Lines Matching refs:sk

33 static void llc_conn_send_pdus(struct sock *sk);
34 static int llc_conn_service(struct sock *sk, struct sk_buff *skb);
35 static int llc_exec_conn_trans_actions(struct sock *sk,
38 static struct llc_conn_state_trans *llc_qualify_conn_ev(struct sock *sk,
59 int llc_conn_state_process(struct sock *sk, struct sk_buff *skb) in llc_conn_state_process() argument
62 struct llc_sock *llc = llc_sk(skb->sk); in llc_conn_state_process()
75 rc = llc_conn_service(skb->sk, skb); in llc_conn_state_process()
93 llc_save_primitive(sk, skb, LLC_DATA_PRIM); in llc_conn_state_process()
94 if (unlikely(sock_queue_rcv_skb(sk, skb))) { in llc_conn_state_process()
109 skb_queue_tail(&sk->sk_receive_queue, skb); in llc_conn_state_process()
110 sk->sk_state_change(sk); in llc_conn_state_process()
113 sock_hold(sk); in llc_conn_state_process()
114 if (sk->sk_type == SOCK_STREAM && in llc_conn_state_process()
115 sk->sk_state == TCP_ESTABLISHED) { in llc_conn_state_process()
116 sk->sk_shutdown = SHUTDOWN_MASK; in llc_conn_state_process()
117 sk->sk_socket->state = SS_UNCONNECTED; in llc_conn_state_process()
118 sk->sk_state = TCP_CLOSE; in llc_conn_state_process()
119 if (!sock_flag(sk, SOCK_DEAD)) { in llc_conn_state_process()
120 sock_set_flag(sk, SOCK_DEAD); in llc_conn_state_process()
121 sk->sk_state_change(sk); in llc_conn_state_process()
125 sock_put(sk); in llc_conn_state_process()
148 sk->sk_write_space(sk); in llc_conn_state_process()
153 if (sk->sk_type == SOCK_STREAM && in llc_conn_state_process()
154 sk->sk_state == TCP_SYN_SENT) { in llc_conn_state_process()
156 sk->sk_socket->state = SS_UNCONNECTED; in llc_conn_state_process()
157 sk->sk_state = TCP_CLOSE; in llc_conn_state_process()
159 sk->sk_socket->state = SS_CONNECTED; in llc_conn_state_process()
160 sk->sk_state = TCP_ESTABLISHED; in llc_conn_state_process()
162 sk->sk_state_change(sk); in llc_conn_state_process()
166 sock_hold(sk); in llc_conn_state_process()
167 if (sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_CLOSING) { in llc_conn_state_process()
168 sk->sk_socket->state = SS_UNCONNECTED; in llc_conn_state_process()
169 sk->sk_state = TCP_CLOSE; in llc_conn_state_process()
170 sk->sk_state_change(sk); in llc_conn_state_process()
172 sock_put(sk); in llc_conn_state_process()
196 void llc_conn_send_pdu(struct sock *sk, struct sk_buff *skb) in llc_conn_send_pdu() argument
199 skb_queue_tail(&sk->sk_write_queue, skb); in llc_conn_send_pdu()
200 llc_conn_send_pdus(sk); in llc_conn_send_pdu()
212 void llc_conn_rtn_pdu(struct sock *sk, struct sk_buff *skb) in llc_conn_rtn_pdu() argument
229 void llc_conn_resend_i_pdu_as_cmd(struct sock *sk, u8 nr, u8 first_p_bit) in llc_conn_resend_i_pdu_as_cmd() argument
237 llc_conn_remove_acked_pdus(sk, nr, &nbr_unack_pdus); in llc_conn_resend_i_pdu_as_cmd()
244 llc = llc_sk(sk); in llc_conn_resend_i_pdu_as_cmd()
250 skb_queue_tail(&sk->sk_write_queue, skb); in llc_conn_resend_i_pdu_as_cmd()
258 llc_conn_send_pdus(sk); in llc_conn_resend_i_pdu_as_cmd()
272 void llc_conn_resend_i_pdu_as_rsp(struct sock *sk, u8 nr, u8 first_f_bit) in llc_conn_resend_i_pdu_as_rsp() argument
276 struct llc_sock *llc = llc_sk(sk); in llc_conn_resend_i_pdu_as_rsp()
279 llc_conn_remove_acked_pdus(sk, nr, &nbr_unack_pdus); in llc_conn_resend_i_pdu_as_rsp()
291 skb_queue_tail(&sk->sk_write_queue, skb); in llc_conn_resend_i_pdu_as_rsp()
299 llc_conn_send_pdus(sk); in llc_conn_resend_i_pdu_as_rsp()
312 int llc_conn_remove_acked_pdus(struct sock *sk, u8 nr, u16 *how_many_unacked) in llc_conn_remove_acked_pdus() argument
318 struct llc_sock *llc = llc_sk(sk); in llc_conn_remove_acked_pdus()
346 static void llc_conn_send_pdus(struct sock *sk) in llc_conn_send_pdus() argument
350 while ((skb = skb_dequeue(&sk->sk_write_queue)) != NULL) { in llc_conn_send_pdus()
357 skb_queue_tail(&llc_sk(sk)->pdu_unack_q, skb); in llc_conn_send_pdus()
375 static int llc_conn_service(struct sock *sk, struct sk_buff *skb) in llc_conn_service() argument
378 struct llc_sock *llc = llc_sk(sk); in llc_conn_service()
384 trans = llc_qualify_conn_ev(sk, skb); in llc_conn_service()
386 rc = llc_exec_conn_trans_actions(sk, trans, skb); in llc_conn_service()
390 sk->sk_state_change(sk); in llc_conn_service()
405 static struct llc_conn_state_trans *llc_qualify_conn_ev(struct sock *sk, in llc_qualify_conn_ev() argument
411 struct llc_sock *llc = llc_sk(sk); in llc_qualify_conn_ev()
421 if (!((*next_trans)->ev)(sk, skb)) { in llc_qualify_conn_ev()
430 !(*next_qualifier)(sk, skb); next_qualifier++) in llc_qualify_conn_ev()
452 static int llc_exec_conn_trans_actions(struct sock *sk, in llc_exec_conn_trans_actions() argument
461 int rc2 = (*next_action)(sk, skb); in llc_exec_conn_trans_actions()
475 const struct sock *sk) in llc_estab_match() argument
477 struct llc_sock *llc = llc_sk(sk); in llc_estab_match()
537 struct sock *sk; in llc_lookup_established() local
540 sk = __llc_lookup_established(sap, daddr, laddr); in llc_lookup_established()
542 return sk; in llc_lookup_established()
547 const struct sock *sk) in llc_listener_match() argument
549 struct llc_sock *llc = llc_sk(sk); in llc_listener_match()
551 return sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_LISTEN && in llc_listener_match()
618 struct sock *sk = __llc_lookup_established(sap, daddr, laddr); in __llc_lookup() local
620 return sk ? : llc_lookup_listener(sap, laddr); in __llc_lookup()
713 void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk) in llc_sap_add_socket() argument
715 struct llc_sock *llc = llc_sk(sk); in llc_sap_add_socket()
720 llc_sk(sk)->sap = sap; in llc_sap_add_socket()
724 sk_nulls_add_node_rcu(sk, laddr_hb); in llc_sap_add_socket()
737 void llc_sap_remove_socket(struct llc_sap *sap, struct sock *sk) in llc_sap_remove_socket() argument
739 struct llc_sock *llc = llc_sk(sk); in llc_sap_remove_socket()
742 sk_nulls_del_node_init_rcu(sk); in llc_sap_remove_socket()
756 static int llc_conn_rcv(struct sock *sk, struct sk_buff *skb) in llc_conn_rcv() argument
762 return llc_conn_state_process(sk, skb); in llc_conn_rcv()
765 static struct sock *llc_create_incoming_sock(struct sock *sk, in llc_create_incoming_sock() argument
770 struct sock *newsk = llc_sk_alloc(sock_net(sk), sk->sk_family, GFP_ATOMIC, in llc_create_incoming_sock()
771 sk->sk_prot, 0); in llc_create_incoming_sock()
772 struct llc_sock *newllc, *llc = llc_sk(sk); in llc_create_incoming_sock()
790 struct sock *sk; in llc_conn_handler() local
797 sk = __llc_lookup(sap, &saddr, &daddr); in llc_conn_handler()
798 if (!sk) in llc_conn_handler()
801 bh_lock_sock(sk); in llc_conn_handler()
810 if (unlikely(sk->sk_state == TCP_LISTEN)) { in llc_conn_handler()
811 struct sock *newsk = llc_create_incoming_sock(sk, skb->dev, in llc_conn_handler()
824 skb->sk = sk; in llc_conn_handler()
826 if (!sock_owned_by_user(sk)) in llc_conn_handler()
827 llc_conn_rcv(sk, skb); in llc_conn_handler()
831 if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) in llc_conn_handler()
835 bh_unlock_sock(sk); in llc_conn_handler()
836 sock_put(sk); in llc_conn_handler()
861 static int llc_backlog_rcv(struct sock *sk, struct sk_buff *skb) in llc_backlog_rcv() argument
864 struct llc_sock *llc = llc_sk(sk); in llc_backlog_rcv()
868 rc = llc_conn_rcv(sk, skb); in llc_backlog_rcv()
874 rc = llc_conn_state_process(sk, skb); in llc_backlog_rcv()
894 static void llc_sk_init(struct sock *sk) in llc_sk_init() argument
896 struct llc_sock *llc = llc_sk(sk); in llc_sk_init()
903 (unsigned long)sk); in llc_sk_init()
907 (unsigned long)sk); in llc_sk_init()
911 (unsigned long)sk); in llc_sk_init()
915 (unsigned long)sk); in llc_sk_init()
923 sk->sk_backlog_rcv = llc_backlog_rcv; in llc_sk_init()
936 struct sock *sk = sk_alloc(net, family, priority, prot, kern); in llc_sk_alloc() local
938 if (!sk) in llc_sk_alloc()
940 llc_sk_init(sk); in llc_sk_alloc()
941 sock_init_data(NULL, sk); in llc_sk_alloc()
944 printk(KERN_DEBUG "LLC socket %p created in %s, now we have %d alive\n", sk, in llc_sk_alloc()
948 return sk; in llc_sk_alloc()
957 void llc_sk_free(struct sock *sk) in llc_sk_free() argument
959 struct llc_sock *llc = llc_sk(sk); in llc_sk_free()
963 llc_conn_ac_stop_all_timers(sk, NULL); in llc_sk_free()
967 skb_queue_len(&sk->sk_write_queue)); in llc_sk_free()
969 skb_queue_purge(&sk->sk_receive_queue); in llc_sk_free()
970 skb_queue_purge(&sk->sk_write_queue); in llc_sk_free()
973 if (atomic_read(&sk->sk_refcnt) != 1) { in llc_sk_free()
975 sk, __func__, atomic_read(&sk->sk_refcnt)); in llc_sk_free()
980 printk(KERN_DEBUG "LLC socket %p released in %s, %d are still alive\n", sk, in llc_sk_free()
984 sock_put(sk); in llc_sk_free()
994 void llc_sk_reset(struct sock *sk) in llc_sk_reset() argument
996 struct llc_sock *llc = llc_sk(sk); in llc_sk_reset()
998 llc_conn_ac_stop_all_timers(sk, NULL); in llc_sk_reset()
999 skb_queue_purge(&sk->sk_write_queue); in llc_sk_reset()
1004 llc_conn_set_p_flag(sk, 0); in llc_sk_reset()