Lines Matching refs:sk

22 static void dccp_enqueue_skb(struct sock *sk, struct sk_buff *skb)  in dccp_enqueue_skb()  argument
25 __skb_queue_tail(&sk->sk_receive_queue, skb); in dccp_enqueue_skb()
26 skb_set_owner_r(skb, sk); in dccp_enqueue_skb()
27 sk->sk_data_ready(sk); in dccp_enqueue_skb()
30 static void dccp_fin(struct sock *sk, struct sk_buff *skb) in dccp_fin() argument
38 sk->sk_shutdown = SHUTDOWN_MASK; in dccp_fin()
39 sock_set_flag(sk, SOCK_DONE); in dccp_fin()
40 dccp_enqueue_skb(sk, skb); in dccp_fin()
43 static int dccp_rcv_close(struct sock *sk, struct sk_buff *skb) in dccp_rcv_close() argument
47 switch (sk->sk_state) { in dccp_rcv_close()
65 if (dccp_sk(sk)->dccps_role != DCCP_ROLE_CLIENT) in dccp_rcv_close()
70 dccp_send_reset(sk, DCCP_RESET_CODE_CLOSED); in dccp_rcv_close()
71 dccp_done(sk); in dccp_rcv_close()
77 dccp_fin(sk, skb); in dccp_rcv_close()
78 dccp_set_state(sk, DCCP_PASSIVE_CLOSE); in dccp_rcv_close()
84 sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_HUP); in dccp_rcv_close()
89 static int dccp_rcv_closereq(struct sock *sk, struct sk_buff *skb) in dccp_rcv_closereq() argument
99 if (dccp_sk(sk)->dccps_role != DCCP_ROLE_CLIENT) { in dccp_rcv_closereq()
100 dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, DCCP_PKT_SYNC); in dccp_rcv_closereq()
105 switch (sk->sk_state) { in dccp_rcv_closereq()
107 dccp_send_close(sk, 0); in dccp_rcv_closereq()
108 dccp_set_state(sk, DCCP_CLOSING); in dccp_rcv_closereq()
114 dccp_fin(sk, skb); in dccp_rcv_closereq()
115 dccp_set_state(sk, DCCP_PASSIVE_CLOSEREQ); in dccp_rcv_closereq()
118 sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_HUP); in dccp_rcv_closereq()
145 static void dccp_rcv_reset(struct sock *sk, struct sk_buff *skb) in dccp_rcv_reset() argument
149 sk->sk_err = err; in dccp_rcv_reset()
152 dccp_fin(sk, skb); in dccp_rcv_reset()
154 if (err && !sock_flag(sk, SOCK_DEAD)) in dccp_rcv_reset()
155 sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR); in dccp_rcv_reset()
156 dccp_time_wait(sk, DCCP_TIME_WAIT, 0); in dccp_rcv_reset()
159 static void dccp_handle_ackvec_processing(struct sock *sk, struct sk_buff *skb) in dccp_handle_ackvec_processing() argument
161 struct dccp_ackvec *av = dccp_sk(sk)->dccps_hc_rx_ackvec; in dccp_handle_ackvec_processing()
170 static void dccp_deliver_input_to_ccids(struct sock *sk, struct sk_buff *skb) in dccp_deliver_input_to_ccids() argument
172 const struct dccp_sock *dp = dccp_sk(sk); in dccp_deliver_input_to_ccids()
175 if (!(sk->sk_shutdown & RCV_SHUTDOWN)) in dccp_deliver_input_to_ccids()
176 ccid_hc_rx_packet_recv(dp->dccps_hc_rx_ccid, sk, skb); in dccp_deliver_input_to_ccids()
181 if (sk->sk_write_queue.qlen > 0 || !(sk->sk_shutdown & SEND_SHUTDOWN)) in dccp_deliver_input_to_ccids()
182 ccid_hc_tx_packet_recv(dp->dccps_hc_tx_ccid, sk, skb); in dccp_deliver_input_to_ccids()
185 static int dccp_check_seqno(struct sock *sk, struct sk_buff *skb) in dccp_check_seqno() argument
188 struct dccp_sock *dp = dccp_sk(sk); in dccp_check_seqno()
208 dccp_update_gsr(sk, seqno); in dccp_check_seqno()
237 dccp_update_gsr(sk, seqno); in dccp_check_seqno()
276 dccp_send_sync(sk, seqno, DCCP_PKT_SYNC); in dccp_check_seqno()
283 static int __dccp_rcv_established(struct sock *sk, struct sk_buff *skb, in __dccp_rcv_established() argument
286 struct dccp_sock *dp = dccp_sk(sk); in __dccp_rcv_established()
296 dccp_enqueue_skb(sk, skb); in __dccp_rcv_established()
309 dccp_rcv_reset(sk, skb); in __dccp_rcv_established()
312 if (dccp_rcv_closereq(sk, skb)) in __dccp_rcv_established()
316 if (dccp_rcv_close(sk, skb)) in __dccp_rcv_established()
341 dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, in __dccp_rcv_established()
346 dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, in __dccp_rcv_established()
364 int dccp_rcv_established(struct sock *sk, struct sk_buff *skb, in dccp_rcv_established() argument
367 if (dccp_check_seqno(sk, skb)) in dccp_rcv_established()
370 if (dccp_parse_options(sk, NULL, skb)) in dccp_rcv_established()
373 dccp_handle_ackvec_processing(sk, skb); in dccp_rcv_established()
374 dccp_deliver_input_to_ccids(sk, skb); in dccp_rcv_established()
376 return __dccp_rcv_established(sk, skb, dh, len); in dccp_rcv_established()
384 static int dccp_rcv_request_sent_state_process(struct sock *sk, in dccp_rcv_request_sent_state_process() argument
401 const struct inet_connection_sock *icsk = inet_csk(sk); in dccp_rcv_request_sent_state_process()
402 struct dccp_sock *dp = dccp_sk(sk); in dccp_rcv_request_sent_state_process()
420 if (dccp_parse_options(sk, NULL, skb)) in dccp_rcv_request_sent_state_process()
425 dp->dccps_syn_rtt = dccp_sample_rtt(sk, 10 * (tstamp - in dccp_rcv_request_sent_state_process()
429 inet_csk_clear_xmit_timer(sk, ICSK_TIME_RETRANS); in dccp_rcv_request_sent_state_process()
430 WARN_ON(sk->sk_send_head == NULL); in dccp_rcv_request_sent_state_process()
431 kfree_skb(sk->sk_send_head); in dccp_rcv_request_sent_state_process()
432 sk->sk_send_head = NULL; in dccp_rcv_request_sent_state_process()
443 dccp_sync_mss(sk, icsk->icsk_pmtu_cookie); in dccp_rcv_request_sent_state_process()
460 dccp_set_state(sk, DCCP_PARTOPEN); in dccp_rcv_request_sent_state_process()
468 if (dccp_feat_activate_values(sk, &dp->dccps_featneg)) in dccp_rcv_request_sent_state_process()
472 icsk->icsk_af_ops->rebuild_header(sk); in dccp_rcv_request_sent_state_process()
474 if (!sock_flag(sk, SOCK_DEAD)) { in dccp_rcv_request_sent_state_process()
475 sk->sk_state_change(sk); in dccp_rcv_request_sent_state_process()
476 sk_wake_async(sk, SOCK_WAKE_IO, POLL_OUT); in dccp_rcv_request_sent_state_process()
479 if (sk->sk_write_pending || inet_csk_in_pingpong_mode(sk) || in dccp_rcv_request_sent_state_process()
497 dccp_send_ack(sk); in dccp_rcv_request_sent_state_process()
512 dccp_set_state(sk, DCCP_CLOSED); in dccp_rcv_request_sent_state_process()
513 sk->sk_err = ECOMM; in dccp_rcv_request_sent_state_process()
517 static int dccp_rcv_respond_partopen_state_process(struct sock *sk, in dccp_rcv_respond_partopen_state_process() argument
522 struct dccp_sock *dp = dccp_sk(sk); in dccp_rcv_respond_partopen_state_process()
528 inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); in dccp_rcv_respond_partopen_state_process()
531 if (sk->sk_state == DCCP_RESPOND) in dccp_rcv_respond_partopen_state_process()
546 if (sk->sk_state == DCCP_PARTOPEN) in dccp_rcv_respond_partopen_state_process()
547 inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); in dccp_rcv_respond_partopen_state_process()
553 dp->dccps_syn_rtt = dccp_sample_rtt(sk, 10 * delta); in dccp_rcv_respond_partopen_state_process()
557 dccp_set_state(sk, DCCP_OPEN); in dccp_rcv_respond_partopen_state_process()
561 __dccp_rcv_established(sk, skb, dh, len); in dccp_rcv_respond_partopen_state_process()
571 int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, in dccp_rcv_state_process() argument
574 struct dccp_sock *dp = dccp_sk(sk); in dccp_rcv_state_process()
576 const int old_state = sk->sk_state; in dccp_rcv_state_process()
602 if (sk->sk_state == DCCP_LISTEN) { in dccp_rcv_state_process()
609 acceptable = inet_csk(sk)->icsk_af_ops->conn_request(sk, skb) >= 0; in dccp_rcv_state_process()
623 } else if (sk->sk_state == DCCP_CLOSED) { in dccp_rcv_state_process()
629 if (sk->sk_state != DCCP_REQUESTING && dccp_check_seqno(sk, skb)) in dccp_rcv_state_process()
644 (sk->sk_state == DCCP_RESPOND && dh->dccph_type == DCCP_PKT_DATA)) { in dccp_rcv_state_process()
645 dccp_send_sync(sk, dcb->dccpd_seq, DCCP_PKT_SYNC); in dccp_rcv_state_process()
650 if (dccp_parse_options(sk, NULL, skb)) in dccp_rcv_state_process()
662 dccp_rcv_reset(sk, skb); in dccp_rcv_state_process()
665 if (dccp_rcv_closereq(sk, skb)) in dccp_rcv_state_process()
669 if (dccp_rcv_close(sk, skb)) in dccp_rcv_state_process()
674 switch (sk->sk_state) { in dccp_rcv_state_process()
676 queued = dccp_rcv_request_sent_state_process(sk, skb, dh, len); in dccp_rcv_state_process()
685 dccp_handle_ackvec_processing(sk, skb); in dccp_rcv_state_process()
686 dccp_deliver_input_to_ccids(sk, skb); in dccp_rcv_state_process()
689 queued = dccp_rcv_respond_partopen_state_process(sk, skb, in dccp_rcv_state_process()
698 sk->sk_state_change(sk); in dccp_rcv_state_process()
699 sk_wake_async(sk, SOCK_WAKE_IO, POLL_OUT); in dccp_rcv_state_process()
703 dccp_send_sync(sk, dcb->dccpd_seq, DCCP_PKT_SYNCACK); in dccp_rcv_state_process()
724 u32 dccp_sample_rtt(struct sock *sk, long delta) in dccp_sample_rtt() argument
727 delta -= dccp_sk(sk)->dccps_options_received.dccpor_elapsed_time * 10; in dccp_sample_rtt()