dccp ccid-2: use feature-negotiation to report Ack Ratio changes
authorGerrit Renker <gerrit@erg.abdn.ac.uk>
Mon, 25 Jul 2011 03:18:25 +0000 (21:18 -0600)
committerGerrit Renker <gerrit@erg.abdn.ac.uk>
Mon, 1 Aug 2011 13:52:35 +0000 (07:52 -0600)
This uses the new feature-negotiation framework to signal Ack Ratio changes,
as required by RFC 4341, sec. 6.1.2.

That raises some problems with CCID-2, which at the moment can not cope
gracefully with Ack Ratios > 1. Since these issues are not directly related
to feature negotiation, they are marked by a FIXME.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Samuel Jero <sj323707@ohio.edu>
Acked-by: Ian McDonald <ian.mcdonald@jandi.co.uk>
net/dccp/ccids/ccid2.c
net/dccp/proto.c

index 0462040fc818f9a624eaa73fc8428ba91ebea9b0..b51cc92376da695c1d31e257b398f6c0c26c1edc 100644 (file)
@@ -494,8 +494,16 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
                        if (hc->tx_rpdupack >= NUMDUPACK) {
                                hc->tx_rpdupack = -1; /* XXX lame */
                                hc->tx_rpseq    = 0;
-
+#ifdef __CCID2_COPES_GRACEFULLY_WITH_ACK_CONGESTION_CONTROL__
+                               /*
+                                * FIXME: Ack Congestion Control is broken; in
+                                * the current state instabilities occurred with
+                                * Ack Ratios greater than 1; causing hang-ups
+                                * and long RTO timeouts. This needs to be fixed
+                                * before opening up dynamic changes. -- gerrit
+                                */
                                ccid2_change_l_ack_ratio(sk, 2 * dp->dccps_l_ack_ratio);
+#endif
                        }
                }
        }
index 152975d942d9a59a7c26756d0f22419b9e298425..e742f90a6858879aa075a0900230abf533eb89d3 100644 (file)
@@ -184,7 +184,6 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
        dp->dccps_rate_last     = jiffies;
        dp->dccps_role          = DCCP_ROLE_UNDEFINED;
        dp->dccps_service       = DCCP_SERVICE_CODE_IS_ABSENT;
-       dp->dccps_l_ack_ratio   = dp->dccps_r_ack_ratio = 1;
        dp->dccps_tx_qlen       = sysctl_dccp_tx_qlen;
 
        dccp_init_xmit_timers(sk);