summaryrefslogtreecommitdiffstats
path: root/net/dccp/output.c
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2006-11-13 16:12:07 +0100
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 06:22:17 +0100
commite11d9d30802278af22e78d8c10f348b683670cd9 (patch)
treeba084b0c5791090164363ad2aaec2c0ab241f603 /net/dccp/output.c
parent[DCCP]: Update comments on precisely which packets can be retransmitted (diff)
downloadlinux-e11d9d30802278af22e78d8c10f348b683670cd9.tar.xz
linux-e11d9d30802278af22e78d8c10f348b683670cd9.zip
[DCCP]: Increment sequence numbers on retransmitted Response packets
Problem:
Diffstat (limited to 'net/dccp/output.c')
-rw-r--r--net/dccp/output.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c
index 992caedd7725..08ee5547a2f2 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -332,6 +332,8 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
skb->dst = dst_clone(dst);
dreq = dccp_rsk(req);
+ if (inet_rsk(req)->acked) /* increase ISS upon retransmission */
+ dccp_inc_seqno(&dreq->dreq_iss);
DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_RESPONSE;
DCCP_SKB_CB(skb)->dccpd_seq = dreq->dreq_iss;
@@ -354,6 +356,8 @@ struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
dccp_csum_outgoing(skb);
+ /* We use `acked' to remember that a Response was already sent. */
+ inet_rsk(req)->acked = 1;
DCCP_INC_STATS(DCCP_MIB_OUTSEGS);
return skb;
}