]> err.no Git - linux-2.6/blobdiff - net/dccp/input.c
[PATCH] pcnet32: support ETHTOOL_GPERMADDR
[linux-2.6] / net / dccp / input.c
index ef29cef1dafe238196224bd8aed79cc139a2c329..c74034cf7ede15e34390531a549c4a7ce1048193 100644 (file)
@@ -50,7 +50,8 @@ static void dccp_rcv_closereq(struct sock *sk, struct sk_buff *skb)
                return;
        }
 
-       dccp_set_state(sk, DCCP_CLOSING);
+       if (sk->sk_state != DCCP_CLOSING)
+               dccp_set_state(sk, DCCP_CLOSING);
        dccp_send_close(sk, 0);
 }
 
@@ -170,7 +171,7 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb,
        if (dp->dccps_options.dccpo_send_ack_vector) {
                struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts;
 
-               if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts,
+               if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, sk,
                                     DCCP_SKB_CB(skb)->dccpd_seq,
                                     DCCP_ACKPKTS_STATE_RECEIVED)) {
                        LIMIT_NETDEBUG(KERN_WARNING "DCCP: acknowledgeable "
@@ -498,7 +499,7 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
                 * DCCP_ACKPKTS_STATE_ECN_MARKED
                 */
                if (dp->dccps_options.dccpo_send_ack_vector) {
-                       if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts,
+                       if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, sk,
                                             DCCP_SKB_CB(skb)->dccpd_seq,
                                             DCCP_ACKPKTS_STATE_RECEIVED))
                                goto discard;
@@ -561,6 +562,12 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
                return 0;
        }
 
+       if (unlikely(dh->dccph_type == DCCP_PKT_SYNC)) {
+               dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq,
+                              DCCP_PKT_SYNCACK);
+               goto discard;
+       }
+
        switch (sk->sk_state) {
        case DCCP_CLOSED:
                return 1;