linux/net/dccp
Gerrit Renker c8bf462bc5 dccp ccid-2: Separate option parsing from CCID processing
This patch replaces an almost identical replication of code: large parts
of dccp_parse_options() re-appeared as ccid2_ackvector() in ccid2.c.

Apart from the duplication, this caused two more problems:
 1. CCIDs should not need to be concerned with parsing header options;
 2. one can not assume that Ack Vectors appear as a contiguous area within an
    skb, it is legal to insert other options and/or padding in between. The
    current code would throw an error and stop reading in such a case.

The patch provides a new data structure and associated list housekeeping.

Only small changes were necessary to integrate with CCID-2: data structure
initialisation, adapt list traversal routine, and add call to the provided
cleanup routine.

The latter also lead to fixing the following BUG: CCID-2 so far ignored
Ack Vectors on all packets other than Ack/DataAck, which is incorrect,
since Ack Vectors can be present on any packet that has an Ack field.

Details:
--------
 * received Ack Vectors are parsed by dccp_parse_options() alone, which passes
   the result on to the CCID-specific routine ccid_hc_tx_parse_options();
 * CCIDs interested in using/decoding Ack Vector information will add code
   to fetch parsed Ack Vectors via this interface;
 * a data structure, `struct dccp_ackvec_parsed' is provided as interface;
 * this structure arranges Ack Vectors of the same skb into a FIFO order;
 * a doubly-linked list is used to keep the required FIFO code small.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
2008-09-04 07:45:37 +02:00
..
ccids dccp ccid-2: Separate option parsing from CCID processing 2008-09-04 07:45:37 +02:00
ackvec.c dccp ccid-2: Separate option parsing from CCID processing 2008-09-04 07:45:37 +02:00
ackvec.h dccp ccid-2: Separate option parsing from CCID processing 2008-09-04 07:45:37 +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: Consolidate Ack-Vector processing within main DCCP module 2008-09-04 07:45:37 +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 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig dccp ccid-2: Remove old infrastructure 2008-09-04 07:45:37 +02:00
Makefile dccp ccid-2: Remove old infrastructure 2008-09-04 07:45:37 +02:00
minisocks.c dccp: Fix the adjustments to AWL and SWL 2008-09-04 07:45:35 +02:00
options.c dccp ccid-2: Separate option parsing from CCID processing 2008-09-04 07:45:37 +02:00
output.c dccp ccid-2: Schedule Sync as out-of-band mechanism 2008-09-04 07:45:37 +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