aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2006-11-13 10:07:51 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 00:22:16 -0500
commit08a29e41bb6d6516b0f65e19381f537168d1768e (patch)
tree618fab853176e620311c495959e038018fb14d8e /net
parent75356f27ed4f85bd789a822bca3fc5e92e334140 (diff)
[DCCP]: Update comments on precisely which packets can be retransmitted
This updates program documentation: spell out precise conditions about which packets are eligible for retransmission (which is actually quite hard to extract from RFC 4340). It is based on the following table derived from RFC 4340: +-----------+---------------------------------+---------------------+ | Type | Retransmit? | Remark | +-----------+---------------------------------+---------------------+ | Request | in client-REQUEST state | sec. 8.1.1 | | Response | NEVER | SHOULD NOT, 8.1.3 | | Data | NEVER | unreliable protocol | | Ack | possible in client-PARTOPEN | sec. 8.1.5 | | DataAck | NEVER | unreliable protocol | | CloseReq | only in server-CLOSEREQ state | MUST, sec. 8.3 | | Close | in node-CLOSING state | MUST, sec. 8.3 | +-----------+-------------------------------------------------------+ | Reset | only in response to other packets | | Sync | only in response to sequence-invalid packets (7.5.4) | | SyncAck | only in response to Sync packets | +-----------+-------------------------------------------------------+ Hence the only packets eligible for retransmission are: * Requests in client-REQUEST state (sec. 8.1.1) * Acks in client-PARTOPEN state (sec. 8.1.5) * CloseReq in server-CLOSEREQ state (sec. 8.3) * Close in node-CLOSING state (sec. 8.3) I had meant to put in a check for these types too, but have left that for later. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Diffstat (limited to 'net')
-rw-r--r--net/dccp/timer.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/dccp/timer.c b/net/dccp/timer.c
index 8447742f5615..bda0af639ae4 100644
--- a/net/dccp/timer.c
+++ b/net/dccp/timer.c
@@ -142,7 +142,7 @@ static void dccp_retransmit_timer(struct sock *sk)
142 142
143 /* retransmit timer is used for feature negotiation throughout 143 /* retransmit timer is used for feature negotiation throughout
144 * connection. In this case, no packet is re-transmitted, but rather an 144 * connection. In this case, no packet is re-transmitted, but rather an
145 * ack is generated and pending changes are splaced into its options. 145 * ack is generated and pending changes are placed into its options.
146 */ 146 */
147 if (sk->sk_send_head == NULL) { 147 if (sk->sk_send_head == NULL) {
148 dccp_pr_debug("feat negotiation retransmit timeout %p\n", sk); 148 dccp_pr_debug("feat negotiation retransmit timeout %p\n", sk);
@@ -154,9 +154,11 @@ static void dccp_retransmit_timer(struct sock *sk)
154 /* 154 /*
155 * sk->sk_send_head has to have one skb with 155 * sk->sk_send_head has to have one skb with
156 * DCCP_SKB_CB(skb)->dccpd_type set to one of the retransmittable DCCP 156 * DCCP_SKB_CB(skb)->dccpd_type set to one of the retransmittable DCCP
157 * packet types (REQUEST, RESPONSE, the ACK in the 3way handshake 157 * packet types. The only packets eligible for retransmission are:
158 * (PARTOPEN timer), etc). 158 * -- Requests in client-REQUEST state (sec. 8.1.1)
159 */ 159 * -- Acks in client-PARTOPEN state (sec. 8.1.5)
160 * -- CloseReq in server-CLOSEREQ state (sec. 8.3)
161 * -- Close in node-CLOSING state (sec. 8.3) */
160 BUG_TRAP(sk->sk_send_head != NULL); 162 BUG_TRAP(sk->sk_send_head != NULL);
161 163
162 /* 164 /*