diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2011-07-24 23:18:25 -0400 |
---|---|---|
committer | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2011-08-01 09:52:35 -0400 |
commit | 31daf0393fbb17cf6efe613fb538a3ea4b5202e4 (patch) | |
tree | 1b6cca8e816283593ee6965198014f997fc91b11 | |
parent | a6444f4237af6c9981ddd45ab35a5c06d4e5a4d8 (diff) |
dccp ccid-2: use feature-negotiation to report Ack Ratio changes
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>
-rw-r--r-- | net/dccp/ccids/ccid2.c | 10 | ||||
-rw-r--r-- | net/dccp/proto.c | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index 0462040fc818..b51cc92376da 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
@@ -494,8 +494,16 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
494 | if (hc->tx_rpdupack >= NUMDUPACK) { | 494 | if (hc->tx_rpdupack >= NUMDUPACK) { |
495 | hc->tx_rpdupack = -1; /* XXX lame */ | 495 | hc->tx_rpdupack = -1; /* XXX lame */ |
496 | hc->tx_rpseq = 0; | 496 | hc->tx_rpseq = 0; |
497 | 497 | #ifdef __CCID2_COPES_GRACEFULLY_WITH_ACK_CONGESTION_CONTROL__ | |
498 | /* | ||
499 | * FIXME: Ack Congestion Control is broken; in | ||
500 | * the current state instabilities occurred with | ||
501 | * Ack Ratios greater than 1; causing hang-ups | ||
502 | * and long RTO timeouts. This needs to be fixed | ||
503 | * before opening up dynamic changes. -- gerrit | ||
504 | */ | ||
498 | ccid2_change_l_ack_ratio(sk, 2 * dp->dccps_l_ack_ratio); | 505 | ccid2_change_l_ack_ratio(sk, 2 * dp->dccps_l_ack_ratio); |
506 | #endif | ||
499 | } | 507 | } |
500 | } | 508 | } |
501 | } | 509 | } |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 152975d942d9..e742f90a6858 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
@@ -184,7 +184,6 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized) | |||
184 | dp->dccps_rate_last = jiffies; | 184 | dp->dccps_rate_last = jiffies; |
185 | dp->dccps_role = DCCP_ROLE_UNDEFINED; | 185 | dp->dccps_role = DCCP_ROLE_UNDEFINED; |
186 | dp->dccps_service = DCCP_SERVICE_CODE_IS_ABSENT; | 186 | dp->dccps_service = DCCP_SERVICE_CODE_IS_ABSENT; |
187 | dp->dccps_l_ack_ratio = dp->dccps_r_ack_ratio = 1; | ||
188 | dp->dccps_tx_qlen = sysctl_dccp_tx_qlen; | 187 | dp->dccps_tx_qlen = sysctl_dccp_tx_qlen; |
189 | 188 | ||
190 | dccp_init_xmit_timers(sk); | 189 | dccp_init_xmit_timers(sk); |