• Gerrit Renker's avatar
    dccp ccid-3: Remove redundant 'options_received' struct · ce177ae2
    Gerrit Renker authored
    The `options_received' struct is redundant, since it re-duplicates the existing
    `p' and `x_recv' fields. This patch removes the sub-struct and migrates the
    format conversion operations (cf. below) to ccid3_hc_tx_parse_options().
    
                         Why the fields are redundant
                         ----------------------------
    The Loss Event Rate p and the Receive Rate x_recv are initially 0 when first 
    loading CCID-3, as ccid_new() zeroes out the entire ccid3_hc_tx_sock. 
    
    When Loss Event Rate or Receive Rate options are received, they are stored by
    ccid3_hc_tx_parse_options() into the fields `ccid3or_loss_event_rate' and
    `ccid3or_receive_rate' of the sub-struct `options_received' in ccid3_hc_tx_sock.
    
    After parsing (considering only the established state - dccp_rcv_established()),
    the packet is passed on to ccid_hc_tx_packet_recv(). This calls the CCID-3
    specific routine ccid3_hc_tx_packet_recv(), which performs the following copy
    operations between fields of ccid3_hc_tx_sock:
    
     * hctx->options_received.ccid3or_receive_rate is copied into hctx->x_recv,
       after scaling it for fixpoint arithmetic, by 2^64;
     * hctx->options_received.ccid3or_loss_event_rate is copied into hctx->p,
       considering the above special cases; in addition, a value of 0 here needs to
       be mapped into p=0 (when no Loss Event Rate option has been received yet).
    Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    ce177ae2
ccid3.c 25.8 KB