diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2008-11-12 00:42:58 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-12 00:42:58 -0800 |
commit | f74e91b6cca5889e667193c7e794186db73c2000 (patch) | |
tree | 10f6a612d97b3ab5ba4ecd75b6decb669f178d76 /net/dccp/timer.c | |
parent | 6bb3ce25d05f2990c8a19adaf427531430267c1f (diff) | |
download | op-kernel-dev-f74e91b6cca5889e667193c7e794186db73c2000.zip op-kernel-dev-f74e91b6cca5889e667193c7e794186db73c2000.tar.gz |
dccp: Limit feature negotiation to connection setup phase
This patch limits feature (capability) negotation to the connection setup phase:
1. Although it is theoretically possible to perform feature negotiation at any
time (and RFC 4340 supports this), in practice this is prohibitively complex,
as it requires to put traffic on hold for each new negotiation.
2. As a byproduct of restricting feature negotiation to connection setup, the
feature-negotiation retransmit timer is no longer required. This part is now
mapped onto the protocol-level retransmission.
Details indicating why timers are no longer needed can be found on
http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/\
implementation_notes.html
This patch disables anytime negotiation, subsequent patches work out full
feature negotiation support for connection setup.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/timer.c')
-rw-r--r-- | net/dccp/timer.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/net/dccp/timer.c b/net/dccp/timer.c index 54b3c7e..162d1e6 100644 --- a/net/dccp/timer.c +++ b/net/dccp/timer.c @@ -87,17 +87,6 @@ static void dccp_retransmit_timer(struct sock *sk) { struct inet_connection_sock *icsk = inet_csk(sk); - /* retransmit timer is used for feature negotiation throughout - * connection. In this case, no packet is re-transmitted, but rather an - * ack is generated and pending changes are placed into its options. - */ - if (sk->sk_send_head == NULL) { - dccp_pr_debug("feat negotiation retransmit timeout %p\n", sk); - if (sk->sk_state == DCCP_OPEN) - dccp_send_ack(sk); - goto backoff; - } - /* * More than than 4MSL (8 minutes) has passed, a RESET(aborted) was * sent, no need to retransmit, this sock is dead. @@ -126,7 +115,6 @@ static void dccp_retransmit_timer(struct sock *sk) return; } -backoff: icsk->icsk_backoff++; icsk->icsk_rto = min(icsk->icsk_rto << 1, DCCP_RTO_MAX); |