diff options
Diffstat (limited to 'net/dccp/input.c')
| -rw-r--r-- | net/dccp/input.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/net/dccp/input.c b/net/dccp/input.c index b6cba72b44e8..bfc53665516b 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c | |||
| @@ -32,7 +32,7 @@ static void dccp_fin(struct sock *sk, struct sk_buff *skb) | |||
| 32 | 32 | ||
| 33 | static void dccp_rcv_close(struct sock *sk, struct sk_buff *skb) | 33 | static void dccp_rcv_close(struct sock *sk, struct sk_buff *skb) |
| 34 | { | 34 | { |
| 35 | dccp_v4_send_reset(sk, DCCP_RESET_CODE_CLOSED); | 35 | dccp_send_reset(sk, DCCP_RESET_CODE_CLOSED); |
| 36 | dccp_fin(sk, skb); | 36 | dccp_fin(sk, skb); |
| 37 | dccp_set_state(sk, DCCP_CLOSED); | 37 | dccp_set_state(sk, DCCP_CLOSED); |
| 38 | sk_wake_async(sk, 1, POLL_HUP); | 38 | sk_wake_async(sk, 1, POLL_HUP); |
| @@ -56,11 +56,11 @@ static void dccp_rcv_closereq(struct sock *sk, struct sk_buff *skb) | |||
| 56 | dccp_send_close(sk, 0); | 56 | dccp_send_close(sk, 0); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static inline void dccp_event_ack_recv(struct sock *sk, struct sk_buff *skb) | 59 | static void dccp_event_ack_recv(struct sock *sk, struct sk_buff *skb) |
| 60 | { | 60 | { |
| 61 | struct dccp_sock *dp = dccp_sk(sk); | 61 | struct dccp_sock *dp = dccp_sk(sk); |
| 62 | 62 | ||
| 63 | if (dp->dccps_options.dccpo_send_ack_vector) | 63 | if (dccp_msk(sk)->dccpms_send_ack_vector) |
| 64 | dccp_ackvec_check_rcv_ackno(dp->dccps_hc_rx_ackvec, sk, | 64 | dccp_ackvec_check_rcv_ackno(dp->dccps_hc_rx_ackvec, sk, |
| 65 | DCCP_SKB_CB(skb)->dccpd_ack_seq); | 65 | DCCP_SKB_CB(skb)->dccpd_ack_seq); |
| 66 | } | 66 | } |
| @@ -151,9 +151,8 @@ static int dccp_check_seqno(struct sock *sk, struct sk_buff *skb) | |||
| 151 | return 0; | 151 | return 0; |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | static inline int __dccp_rcv_established(struct sock *sk, struct sk_buff *skb, | 154 | static int __dccp_rcv_established(struct sock *sk, struct sk_buff *skb, |
| 155 | const struct dccp_hdr *dh, | 155 | const struct dccp_hdr *dh, const unsigned len) |
| 156 | const unsigned len) | ||
| 157 | { | 156 | { |
| 158 | struct dccp_sock *dp = dccp_sk(sk); | 157 | struct dccp_sock *dp = dccp_sk(sk); |
| 159 | 158 | ||
| @@ -247,7 +246,7 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb, | |||
| 247 | if (DCCP_SKB_CB(skb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) | 246 | if (DCCP_SKB_CB(skb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) |
| 248 | dccp_event_ack_recv(sk, skb); | 247 | dccp_event_ack_recv(sk, skb); |
| 249 | 248 | ||
| 250 | if (dp->dccps_options.dccpo_send_ack_vector && | 249 | if (dccp_msk(sk)->dccpms_send_ack_vector && |
| 251 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, | 250 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, |
| 252 | DCCP_SKB_CB(skb)->dccpd_seq, | 251 | DCCP_SKB_CB(skb)->dccpd_seq, |
| 253 | DCCP_ACKVEC_STATE_RECEIVED)) | 252 | DCCP_ACKVEC_STATE_RECEIVED)) |
| @@ -300,7 +299,10 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk, | |||
| 300 | goto out_invalid_packet; | 299 | goto out_invalid_packet; |
| 301 | } | 300 | } |
| 302 | 301 | ||
| 303 | if (dp->dccps_options.dccpo_send_ack_vector && | 302 | if (dccp_parse_options(sk, skb)) |
| 303 | goto out_invalid_packet; | ||
| 304 | |||
| 305 | if (dccp_msk(sk)->dccpms_send_ack_vector && | ||
| 304 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, | 306 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, |
| 305 | DCCP_SKB_CB(skb)->dccpd_seq, | 307 | DCCP_SKB_CB(skb)->dccpd_seq, |
| 306 | DCCP_ACKVEC_STATE_RECEIVED)) | 308 | DCCP_ACKVEC_STATE_RECEIVED)) |
| @@ -321,14 +323,6 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk, | |||
| 321 | dccp_set_seqno(&dp->dccps_swl, | 323 | dccp_set_seqno(&dp->dccps_swl, |
| 322 | max48(dp->dccps_swl, dp->dccps_isr)); | 324 | max48(dp->dccps_swl, dp->dccps_isr)); |
| 323 | 325 | ||
| 324 | if (ccid_hc_rx_init(dp->dccps_hc_rx_ccid, sk) != 0 || | ||
| 325 | ccid_hc_tx_init(dp->dccps_hc_tx_ccid, sk) != 0) { | ||
| 326 | ccid_hc_rx_exit(dp->dccps_hc_rx_ccid, sk); | ||
| 327 | ccid_hc_tx_exit(dp->dccps_hc_tx_ccid, sk); | ||
| 328 | /* FIXME: send appropriate RESET code */ | ||
| 329 | goto out_invalid_packet; | ||
| 330 | } | ||
| 331 | |||
| 332 | dccp_sync_mss(sk, icsk->icsk_pmtu_cookie); | 326 | dccp_sync_mss(sk, icsk->icsk_pmtu_cookie); |
| 333 | 327 | ||
| 334 | /* | 328 | /* |
| @@ -492,7 +486,7 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, | |||
| 492 | if (dcb->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) | 486 | if (dcb->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) |
| 493 | dccp_event_ack_recv(sk, skb); | 487 | dccp_event_ack_recv(sk, skb); |
| 494 | 488 | ||
| 495 | if (dp->dccps_options.dccpo_send_ack_vector && | 489 | if (dccp_msk(sk)->dccpms_send_ack_vector && |
| 496 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, | 490 | dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, |
| 497 | DCCP_SKB_CB(skb)->dccpd_seq, | 491 | DCCP_SKB_CB(skb)->dccpd_seq, |
| 498 | DCCP_ACKVEC_STATE_RECEIVED)) | 492 | DCCP_ACKVEC_STATE_RECEIVED)) |
