Lines Matching refs:server

102 	struct ncp_server *server = sk->sk_user_data;  in ncp_tcp_data_ready()  local
104 server->data_ready(sk); in ncp_tcp_data_ready()
105 schedule_work(&server->rcv.tq); in ncp_tcp_data_ready()
110 struct ncp_server *server = sk->sk_user_data; in ncp_tcp_error_report() local
112 server->error_report(sk); in ncp_tcp_error_report()
113 schedule_work(&server->rcv.tq); in ncp_tcp_error_report()
118 struct ncp_server *server = sk->sk_user_data; in ncp_tcp_write_space() local
122 server->write_space(sk); in ncp_tcp_write_space()
123 if (server->tx.creq) in ncp_tcp_write_space()
124 schedule_work(&server->tx.tq); in ncp_tcp_write_space()
129 struct ncp_server *server = (void*)v; in ncpdgram_timeout_call() local
131 schedule_work(&server->timeout_tq); in ncpdgram_timeout_call()
134 static inline void ncp_finish_request(struct ncp_server *server, struct ncp_request_reply *req, int… in ncp_finish_request() argument
138 memcpy(req->reply_buf, server->rxbuf, req->datalen); in ncp_finish_request()
144 static void __abort_ncp_connection(struct ncp_server *server) in __abort_ncp_connection() argument
148 ncp_invalidate_conn(server); in __abort_ncp_connection()
149 del_timer(&server->timeout_tm); in __abort_ncp_connection()
150 while (!list_empty(&server->tx.requests)) { in __abort_ncp_connection()
151 req = list_entry(server->tx.requests.next, struct ncp_request_reply, req); in __abort_ncp_connection()
154 ncp_finish_request(server, req, -EIO); in __abort_ncp_connection()
156 req = server->rcv.creq; in __abort_ncp_connection()
158 server->rcv.creq = NULL; in __abort_ncp_connection()
159 ncp_finish_request(server, req, -EIO); in __abort_ncp_connection()
160 server->rcv.ptr = NULL; in __abort_ncp_connection()
161 server->rcv.state = 0; in __abort_ncp_connection()
163 req = server->tx.creq; in __abort_ncp_connection()
165 server->tx.creq = NULL; in __abort_ncp_connection()
166 ncp_finish_request(server, req, -EIO); in __abort_ncp_connection()
175 static inline void __ncp_abort_request(struct ncp_server *server, struct ncp_request_reply *req, in… in __ncp_abort_request() argument
184 ncp_finish_request(server, req, err); in __ncp_abort_request()
194 static inline void ncp_abort_request(struct ncp_server *server, struct ncp_request_reply *req, int … in ncp_abort_request() argument
196 mutex_lock(&server->rcv.creq_mutex); in ncp_abort_request()
197 __ncp_abort_request(server, req, err); in ncp_abort_request()
198 mutex_unlock(&server->rcv.creq_mutex); in ncp_abort_request()
201 static inline void __ncptcp_abort(struct ncp_server *server) in __ncptcp_abort() argument
203 __abort_ncp_connection(server); in __ncptcp_abort()
215 static void __ncptcp_try_send(struct ncp_server *server) in __ncptcp_try_send() argument
222 rq = server->tx.creq; in __ncptcp_try_send()
228 result = do_send(server->ncp_sock, iovc, rq->tx_iovlen, in __ncptcp_try_send()
236 __ncp_abort_request(server, rq, result); in __ncptcp_try_send()
240 server->rcv.creq = rq; in __ncptcp_try_send()
241 server->tx.creq = NULL; in __ncptcp_try_send()
256 static inline void ncp_init_header(struct ncp_server *server, struct ncp_request_reply *req, struct… in ncp_init_header() argument
259 h->conn_low = server->connection; in ncp_init_header()
260 h->conn_high = server->connection >> 8; in ncp_init_header()
261 h->sequence = ++server->sequence; in ncp_init_header()
264 static void ncpdgram_start_request(struct ncp_server *server, struct ncp_request_reply *req) in ncpdgram_start_request() argument
272 ncp_init_header(server, req, h); in ncpdgram_start_request()
273 signlen = sign_packet(server, req->tx_iov[1].iov_base + sizeof(struct ncp_request_header) - 1, in ncpdgram_start_request()
282 server->rcv.creq = req; in ncpdgram_start_request()
283 server->timeout_last = server->m.time_out; in ncpdgram_start_request()
284 server->timeout_retries = server->m.retry_count; in ncpdgram_start_request()
285 ncpdgram_send(server->ncp_sock, req); in ncpdgram_start_request()
286 mod_timer(&server->timeout_tm, jiffies + server->m.time_out); in ncpdgram_start_request()
293 static void ncptcp_start_request(struct ncp_server *server, struct ncp_request_reply *req) in ncptcp_start_request() argument
300 ncp_init_header(server, req, h); in ncptcp_start_request()
301 signlen = sign_packet(server, req->tx_iov[1].iov_base + sizeof(struct ncp_request_header) - 1, in ncptcp_start_request()
314 server->tx.creq = req; in ncptcp_start_request()
315 __ncptcp_try_send(server); in ncptcp_start_request()
318 static inline void __ncp_start_request(struct ncp_server *server, struct ncp_request_reply *req) in __ncp_start_request() argument
322 memcpy(server->txbuf, req->tx_iov[1].iov_base, req->tx_iov[1].iov_len); in __ncp_start_request()
323 req->tx_iov[1].iov_base = server->txbuf; in __ncp_start_request()
325 if (server->ncp_sock->type == SOCK_STREAM) in __ncp_start_request()
326 ncptcp_start_request(server, req); in __ncp_start_request()
328 ncpdgram_start_request(server, req); in __ncp_start_request()
331 static int ncp_add_request(struct ncp_server *server, struct ncp_request_reply *req) in ncp_add_request() argument
333 mutex_lock(&server->rcv.creq_mutex); in ncp_add_request()
334 if (!ncp_conn_valid(server)) { in ncp_add_request()
335 mutex_unlock(&server->rcv.creq_mutex); in ncp_add_request()
340 if (server->tx.creq || server->rcv.creq) { in ncp_add_request()
342 list_add_tail(&req->req, &server->tx.requests); in ncp_add_request()
343 mutex_unlock(&server->rcv.creq_mutex); in ncp_add_request()
346 __ncp_start_request(server, req); in ncp_add_request()
347 mutex_unlock(&server->rcv.creq_mutex); in ncp_add_request()
351 static void __ncp_next_request(struct ncp_server *server) in __ncp_next_request() argument
355 server->rcv.creq = NULL; in __ncp_next_request()
356 if (list_empty(&server->tx.requests)) { in __ncp_next_request()
359 req = list_entry(server->tx.requests.next, struct ncp_request_reply, req); in __ncp_next_request()
361 __ncp_start_request(server, req); in __ncp_next_request()
364 static void info_server(struct ncp_server *server, unsigned int id, const void * data, size_t len) in info_server() argument
366 if (server->info_sock) { in info_server()
378 do_send(server->info_sock, iov, 2, len + 8, MSG_NOSIGNAL); in info_server()
384 struct ncp_server *server = in ncpdgram_rcv_proc() local
388 sock = server->ncp_sock; in ncpdgram_rcv_proc()
404 if (server->connection != get_conn_number(&reply)) { in ncpdgram_rcv_proc()
425 …result = _recv(sock, server->unexpected_packet.data, sizeof(server->unexpected_packet.data), MSG_D… in ncpdgram_rcv_proc()
429 info_server(server, 0, server->unexpected_packet.data, result); in ncpdgram_rcv_proc()
432 mutex_lock(&server->rcv.creq_mutex); in ncpdgram_rcv_proc()
433 req = server->rcv.creq; in ncpdgram_rcv_proc()
434 if (req && (req->tx_type == NCP_ALLOC_SLOT_REQUEST || (server->sequence == reply.sequence && in ncpdgram_rcv_proc()
435 server->connection == get_conn_number(&reply)))) { in ncpdgram_rcv_proc()
437 server->timeout_retries = server->m.retry_count; in ncpdgram_rcv_proc()
438 server->timeout_last = NCP_MAX_RPC_TIMEOUT; in ncpdgram_rcv_proc()
439 mod_timer(&server->timeout_tm, jiffies + NCP_MAX_RPC_TIMEOUT); in ncpdgram_rcv_proc()
441 result = _recv(sock, server->rxbuf, req->datalen, MSG_DONTWAIT); in ncpdgram_rcv_proc()
443 if (result >= 0 && server->sign_active && req->tx_type != NCP_DEALLOC_SLOT_REQUEST) { in ncpdgram_rcv_proc()
451 …if (sign_verify_reply(server, server->rxbuf + hdrl, result - hdrl, cpu_to_le32(result), server->rx… in ncpdgram_rcv_proc()
458 del_timer(&server->timeout_tm); in ncpdgram_rcv_proc()
459 server->rcv.creq = NULL; in ncpdgram_rcv_proc()
460 ncp_finish_request(server, req, result); in ncpdgram_rcv_proc()
461 __ncp_next_request(server); in ncpdgram_rcv_proc()
462 mutex_unlock(&server->rcv.creq_mutex); in ncpdgram_rcv_proc()
466 mutex_unlock(&server->rcv.creq_mutex); in ncpdgram_rcv_proc()
473 static void __ncpdgram_timeout_proc(struct ncp_server *server) in __ncpdgram_timeout_proc() argument
476 if (!timer_pending(&server->timeout_tm)) { in __ncpdgram_timeout_proc()
479 req = server->rcv.creq; in __ncpdgram_timeout_proc()
483 if (server->m.flags & NCP_MOUNT_SOFT) { in __ncpdgram_timeout_proc()
484 if (server->timeout_retries-- == 0) { in __ncpdgram_timeout_proc()
485 __ncp_abort_request(server, req, -ETIMEDOUT); in __ncpdgram_timeout_proc()
490 ncpdgram_send(server->ncp_sock, req); in __ncpdgram_timeout_proc()
491 timeout = server->timeout_last << 1; in __ncpdgram_timeout_proc()
495 server->timeout_last = timeout; in __ncpdgram_timeout_proc()
496 mod_timer(&server->timeout_tm, jiffies + timeout); in __ncpdgram_timeout_proc()
503 struct ncp_server *server = in ncpdgram_timeout_proc() local
505 mutex_lock(&server->rcv.creq_mutex); in ncpdgram_timeout_proc()
506 __ncpdgram_timeout_proc(server); in ncpdgram_timeout_proc()
507 mutex_unlock(&server->rcv.creq_mutex); in ncpdgram_timeout_proc()
510 static int do_tcp_rcv(struct ncp_server *server, void *buffer, size_t len) in do_tcp_rcv() argument
515 result = _recv(server->ncp_sock, buffer, len, MSG_DONTWAIT); in do_tcp_rcv()
522 result = _recv(server->ncp_sock, dummy, len, MSG_DONTWAIT); in do_tcp_rcv()
534 static int __ncptcp_rcv_proc(struct ncp_server *server) in __ncptcp_rcv_proc() argument
543 while (server->rcv.len) { in __ncptcp_rcv_proc()
544 result = do_tcp_rcv(server, server->rcv.ptr, server->rcv.len); in __ncptcp_rcv_proc()
549 req = server->rcv.creq; in __ncptcp_rcv_proc()
551 __ncp_abort_request(server, req, -EIO); in __ncptcp_rcv_proc()
553 __ncptcp_abort(server); in __ncptcp_rcv_proc()
562 if (server->rcv.ptr) { in __ncptcp_rcv_proc()
563 server->rcv.ptr += result; in __ncptcp_rcv_proc()
565 server->rcv.len -= result; in __ncptcp_rcv_proc()
567 switch (server->rcv.state) { in __ncptcp_rcv_proc()
569 if (server->rcv.buf.magic != htonl(NCP_TCP_RCVD_MAGIC)) { in __ncptcp_rcv_proc()
570 pr_err("tcp: Unexpected reply type %08X\n", ntohl(server->rcv.buf.magic)); in __ncptcp_rcv_proc()
571 __ncptcp_abort(server); in __ncptcp_rcv_proc()
574 datalen = ntohl(server->rcv.buf.len) & 0x0FFFFFFF; in __ncptcp_rcv_proc()
577 __ncptcp_abort(server); in __ncptcp_rcv_proc()
581 if (server->sign_active) { in __ncptcp_rcv_proc()
584 __ncptcp_abort(server); in __ncptcp_rcv_proc()
587 server->rcv.buf.len = datalen - 8; in __ncptcp_rcv_proc()
588 server->rcv.ptr = (unsigned char*)&server->rcv.buf.p1; in __ncptcp_rcv_proc()
589 server->rcv.len = 8; in __ncptcp_rcv_proc()
590 server->rcv.state = 4; in __ncptcp_rcv_proc()
594 type = ntohs(server->rcv.buf.type); in __ncptcp_rcv_proc()
599 if (datalen - 8 <= sizeof(server->unexpected_packet.data)) { in __ncptcp_rcv_proc()
600 *(__u16*)(server->unexpected_packet.data) = htons(type); in __ncptcp_rcv_proc()
601 server->unexpected_packet.len = datalen - 8; in __ncptcp_rcv_proc()
603 server->rcv.state = 5; in __ncptcp_rcv_proc()
604 server->rcv.ptr = server->unexpected_packet.data + 2; in __ncptcp_rcv_proc()
605 server->rcv.len = datalen - 10; in __ncptcp_rcv_proc()
610 server->rcv.state = 2; in __ncptcp_rcv_proc()
612 server->rcv.ptr = NULL; in __ncptcp_rcv_proc()
613 server->rcv.len = datalen - 10; in __ncptcp_rcv_proc()
616 req = server->rcv.creq; in __ncptcp_rcv_proc()
623 server->rcv.state = 3; in __ncptcp_rcv_proc()
627 ((struct ncp_reply_header*)server->rxbuf)->type = NCP_REPLY; in __ncptcp_rcv_proc()
628 server->rcv.ptr = server->rxbuf + 2; in __ncptcp_rcv_proc()
629 server->rcv.len = datalen - 10; in __ncptcp_rcv_proc()
630 server->rcv.state = 1; in __ncptcp_rcv_proc()
634 datalen = server->rcv.buf.len; in __ncptcp_rcv_proc()
635 type = ntohs(server->rcv.buf.type2); in __ncptcp_rcv_proc()
639 req = server->rcv.creq; in __ncptcp_rcv_proc()
641 if (((struct ncp_reply_header*)server->rxbuf)->sequence != server->sequence) { in __ncptcp_rcv_proc()
643 __ncp_abort_request(server, req, -EIO); in __ncptcp_rcv_proc()
646 …(((struct ncp_reply_header*)server->rxbuf)->conn_low | (((struct ncp_reply_header*)server->rxbuf)-… in __ncptcp_rcv_proc()
648 __ncp_abort_request(server, req, -EIO); in __ncptcp_rcv_proc()
653 if (server->sign_active && req->tx_type != NCP_DEALLOC_SLOT_REQUEST) { in __ncptcp_rcv_proc()
654 …if (sign_verify_reply(server, server->rxbuf + 6, req->datalen - 6, cpu_to_be32(req->datalen + 16),… in __ncptcp_rcv_proc()
656 __ncp_abort_request(server, req, -EIO); in __ncptcp_rcv_proc()
661 ncp_finish_request(server, req, req->datalen); in __ncptcp_rcv_proc()
663 __ncp_next_request(server); in __ncptcp_rcv_proc()
666 server->rcv.ptr = (unsigned char*)&server->rcv.buf; in __ncptcp_rcv_proc()
667 server->rcv.len = 10; in __ncptcp_rcv_proc()
668 server->rcv.state = 0; in __ncptcp_rcv_proc()
671 ncp_finish_request(server, server->rcv.creq, -EIO); in __ncptcp_rcv_proc()
674 info_server(server, 0, server->unexpected_packet.data, server->unexpected_packet.len); in __ncptcp_rcv_proc()
682 struct ncp_server *server = in ncp_tcp_rcv_proc() local
685 mutex_lock(&server->rcv.creq_mutex); in ncp_tcp_rcv_proc()
686 __ncptcp_rcv_proc(server); in ncp_tcp_rcv_proc()
687 mutex_unlock(&server->rcv.creq_mutex); in ncp_tcp_rcv_proc()
692 struct ncp_server *server = in ncp_tcp_tx_proc() local
695 mutex_lock(&server->rcv.creq_mutex); in ncp_tcp_tx_proc()
696 __ncptcp_try_send(server); in ncp_tcp_tx_proc()
697 mutex_unlock(&server->rcv.creq_mutex); in ncp_tcp_tx_proc()
700 static int do_ncp_rpc_call(struct ncp_server *server, int size, in do_ncp_rpc_call() argument
712 req->tx_iov[1].iov_base = server->packet; in do_ncp_rpc_call()
716 req->tx_type = *(u_int16_t*)server->packet; in do_ncp_rpc_call()
718 result = ncp_add_request(server, req); in do_ncp_rpc_call()
723 ncp_abort_request(server, req, -EINTR); in do_ncp_rpc_call()
740 static int ncp_do_request(struct ncp_server *server, int size, in ncp_do_request() argument
745 if (server->lock == 0) { in ncp_do_request()
749 if (!ncp_conn_valid(server)) { in ncp_do_request()
762 if (server->m.flags & NCP_MOUNT_INTR) { in ncp_do_request()
777 result = do_ncp_rpc_call(server, size, reply, max_reply_size); in ncp_do_request()
794 int ncp_request2(struct ncp_server *server, int function, in ncp_request2() argument
801 h = (struct ncp_request_header *) (server->packet); in ncp_request2()
802 if (server->has_subfunction != 0) { in ncp_request2()
803 *(__u16 *) & (h->data[0]) = htons(server->current_size - sizeof(*h) - 2); in ncp_request2()
813 result = ncp_do_request(server, server->current_size, reply, size); in ncp_request2()
818 server->completion = reply->completion_code; in ncp_request2()
819 server->conn_status = reply->connection_state; in ncp_request2()
820 server->reply_size = result; in ncp_request2()
821 server->ncp_reply_size = result - sizeof(struct ncp_reply_header); in ncp_request2()
831 int ncp_connect(struct ncp_server *server) in ncp_connect() argument
836 server->connection = 0xFFFF; in ncp_connect()
837 server->sequence = 255; in ncp_connect()
839 h = (struct ncp_request_header *) (server->packet); in ncp_connect()
844 result = ncp_do_request(server, sizeof(*h), server->packet, server->packet_size); in ncp_connect()
847 server->connection = h->conn_low + (h->conn_high * 256); in ncp_connect()
853 int ncp_disconnect(struct ncp_server *server) in ncp_disconnect() argument
857 h = (struct ncp_request_header *) (server->packet); in ncp_disconnect()
862 return ncp_do_request(server, sizeof(*h), server->packet, server->packet_size); in ncp_disconnect()
865 void ncp_lock_server(struct ncp_server *server) in ncp_lock_server() argument
867 mutex_lock(&server->mutex); in ncp_lock_server()
868 if (server->lock) in ncp_lock_server()
870 server->lock = 1; in ncp_lock_server()
873 void ncp_unlock_server(struct ncp_server *server) in ncp_unlock_server() argument
875 if (!server->lock) { in ncp_unlock_server()
879 server->lock = 0; in ncp_unlock_server()
880 mutex_unlock(&server->mutex); in ncp_unlock_server()