kernel-ark/net/dccp
Gerrit Renker d7dc7e5f49 dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling
This completes the implementation of a circular buffer for Ack Vectors, by 
extending the current (linear array-based) implementation.  The changes are:

 (a) An `overflow' flag to deal with the case of overflow. As before, dynamic
     growth of the buffer will not be supported; but code will be added to deal
     robustly with overflowing Ack Vector buffers.

 (b) A `tail_seqno' field. When naively implementing the algorithm of Appendix A
     in RFC 4340, problems arise whenever subsequent Ack Vector records overlap,
     which can bring the entire run length calculation completely out of synch.
     (This is documented on http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/\
                                             ack_vectors/tracking_tail_ackno/ .)
 (c) The buffer lengthi is now computed dynamically (i.e. current fill level),
     as the span between head to tail.

As a result, dccp_ackvec_pending() is now simpler - the #ifdef is no longer 
necessary since buf_empty is always true when IP_DCCP_ACKVEC is not configured.

Note on overflow handling: 
-------------------------
 The Ack Vector code previously simply started to drop packets when the
 Ack Vector buffer overflowed. This means that the userspace application
 will not be able to receive, only because of an Ack Vector storage problem.
 
 Furthermore, overflow may be transient, so that applications may later
 recover from the overflow. Recovering from dropped packets is more difficult
 (e.g. video key frames).
 
 Hence the patch uses a different policy: when the buffer overflows, the oldest
 entries are subsequently overwritten. This has a higher chance of recovery.
 Details are on http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/ack_vectors/

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
2008-09-04 07:45:36 +02:00
..
ccids dccp ccid-2: Ack Vector interface clean-up 2008-09-04 07:45:36 +02:00
ackvec.c dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling 2008-09-04 07:45:36 +02:00
ackvec.h dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling 2008-09-04 07:45:36 +02:00
ccid.c dccp: Auto-load (when supported) CCID plugins for negotiation 2008-09-04 07:45:31 +02:00
ccid.h dccp: Unused argument in CCID tx function 2008-09-04 07:45:35 +02:00
dccp.h dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling 2008-09-04 07:45:36 +02:00
diag.c dccp ccid-2: Phase out the use of boolean Ack Vector sysctl 2008-09-04 07:45:31 +02:00
feat.c dccp ccid-2: Use feature-negotiation to report Ack Ratio changes 2008-09-04 07:45:32 +02:00
feat.h dccp: Debugging functions for feature negotiation 2008-09-04 07:45:32 +02:00
input.c dccp ccid-2: Ack Vector interface clean-up 2008-09-04 07:45:36 +02:00
ipv4.c dccp: Cleanup routines for feature negotiation 2008-09-04 07:45:26 +02:00
ipv6.c dccp: Cleanup routines for feature negotiation 2008-09-04 07:45:26 +02:00
ipv6.h
Kconfig [DCCP]: Promote CCID2 as default CCID 2008-01-28 14:54:46 -08:00
Makefile
minisocks.c dccp: Fix the adjustments to AWL and SWL 2008-09-04 07:45:35 +02:00
options.c dccp ccid-2: Implementation of circular Ack Vector buffer with overflow handling 2008-09-04 07:45:36 +02:00
output.c dccp: Merge now-reduced connect_init() function 2008-09-04 07:45:35 +02:00
probe.c dccp: Reduce noise in output and convert to ktime_t 2008-09-04 07:45:36 +02:00
proto.c dccp ccid-2: Use feature-negotiation to report Ack Ratio changes 2008-09-04 07:45:32 +02:00
sysctl.c dccp: Initialisation and type-checking of feature sysctls 2008-09-04 07:45:32 +02:00
timer.c dccp: Limit feature negotiation to connection setup phase 2008-09-04 07:45:27 +02:00