• Gerrit Renker's avatar
    dccp: Extend CCID packet dequeueing interface · dc841e30
    Gerrit Renker authored
    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: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    dc841e30
timer.c 7.5 KB