• Gerrit Renker's avatar
    dccp ccid-2: Separate option parsing from CCID processing · c8bf462b
    Gerrit Renker authored
    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: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    c8bf462b
ackvec.c 12.4 KB