When retransmit the first REQUEST, the sequence number does not be
increased. This is because before retransmit the first REQUEST packet,
the icsk->icsk_retransmits is 0, so dccp_transmit_skb() will fetch the
dp->dccps_iss as the retransmit sequence number.
This patch fix the problem.
Signed-off-by: Wei Yongjun <yjwei@xxxxxxxxxxxxxx>
--- a/net/dccp/output.c 2008-05-29 22:27:55.000000000 -0400
+++ b/net/dccp/output.c 2008-05-30 19:26:43.000000000 -0400
@@ -69,9 +69,6 @@ static int dccp_transmit_skb(struct sock
case DCCP_PKT_REQUEST:
set_ack = 0;
- /* Use ISS on the first (non-retransmitted) Request. */
- if (icsk->icsk_retransmits == 0)
- dcb->dccpd_seq = dp->dccps_iss;
/* fall through */
case DCCP_PKT_SYNC:
@@ -526,6 +523,8 @@ int dccp_connect(struct sock *sk)
/* Initialise GAR as per 8.5; AWL/AWH are set in dccp_transmit_skb() */
dp->dccps_gar = dp->dccps_iss;
+ /* Initialise GSS to ISS - 1, will be increased in dccp_transmit_skb() */
+ dp->dccps_gss = SUB48(dp->dccps_iss, 1);
skb = alloc_skb(sk->sk_prot->max_header, sk->sk_allocation);
if (unlikely(skb == NULL))
--
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html