dccp: Extend CCID packet dequeueing interface
authorGerrit Renker <gerrit@erg.abdn.ac.uk>
Wed, 27 Oct 2010 19:16:26 +0000 (19:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Oct 2010 17:27:00 +0000 (10:27 -0700)
commitdc841e30eaea9f9f83c9ab1ee0b3ef9e5c95ce8a
tree921458d0ea02f1478dbac9305c1925dbea8c0dd9
parentfe84f4140f0d24deca8591e38926b95cfd097e62
dccp: Extend CCID packet dequeueing interface

This extends the packet dequeuing interface of dccp_write_xmit() to allow
 1. CCIDs to take care of timing when the next packet may be sent;
 2. delayed sending (as before, with an inter-packet gap up to 65.535 seconds).

The main purpose is to take CCID-2 out of its polling mode (when it is network-
limited, it tries every millisecond to send, without interruption).

The mode of operation for (2) is as follows:
 * new packet is enqueued via dccp_sendmsg() => dccp_write_xmit(),
 * ccid_hc_tx_send_packet() detects that it may not send (e.g. window full),
 * it signals this condition via `CCID_PACKET_WILL_DEQUEUE_LATER',
 * dccp_write_xmit() returns without further action;
 * after some time the wait-condition for CCID becomes true,
 * that CCID schedules the tasklet,
 * tasklet function calls ccid_hc_tx_send_packet() via dccp_write_xmit(),
 * since the wait-condition is now true, ccid_hc_tx_packet() returns "send now",
 * packet is sent, and possibly more (since dccp_write_xmit() loops).

Code reuse: the taskled function calls dccp_write_xmit(), the timer function
            reduces to a wrapper around the same code.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/dccp.h
net/dccp/output.c
net/dccp/timer.c