dccp: Allow to distinguish original and retransmitted packets
authorGerrit Renker <gerrit@erg.abdn.ac.uk>
Sat, 26 Jul 2008 10:59:09 +0000 (11:59 +0100)
committerGerrit Renker <gerrit@erg.abdn.ac.uk>
Sat, 26 Jul 2008 10:59:09 +0000 (11:59 +0100)
commit59435444a13ed52d3444c5df26b73d3086bcd57b
tree72846dbcb8c6c41e6d630bcb81297801dfe7fb16
parentcdec7e50a4896c5197d5575d9ca635eea6825149
dccp: Allow to distinguish original and retransmitted packets

This patch allows the sender to distinguish original and retransmitted packets,
which is in particular needed for the retransmission of DCCP-Requests:
 * the first Request uses ISS (generated in net/dccp/ip*.c), and sets GSS = ISS;
 * all retransmitted Requests use GSS' = GSS + 1, so that the n-th retransmitted
   Request has sequence number ISS + n (mod 48).

To add generic support, the patch reorganises existing code so that:
 * icsk_retransmits == 0     for the original packet and
 * icsk_retransmits = n > 0  for the n-th retransmitted packet
at the time dccp_transmit_skb() is called, via dccp_retransmit_skb().

Thanks to Wei Yongjun for pointing this problem out.

Further changes:
----------------
 * removed the `skb' argument from dccp_retransmit_skb(), since sk_send_head
   is used for all retransmissions (the exception is client-Acks in PARTOPEN
   state, but these do not use sk_send_head);
 * since sk_send_head always contains the original skb (via dccp_entail()),
   skb_cloned() never evaluated to true and thus pskb_copy() was never used.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
net/dccp/dccp.h
net/dccp/output.c
net/dccp/timer.c