• Gerrit Renker's avatar
    [DCCP]: Handle timestamps on Request/Response exchange separately · b4d4f7c7
    Gerrit Renker authored
    In DCCP, timestamps can occur on packets anytime, CCID3 uses a timestamp(/echo) on the Request/Response
    exchange. This patch addresses the following situation:
    	* timestamps are recorded on the listening socket;
    	* Responses are sent from dccp_request_sockets;
    	* suppose two connections reach the listening socket with very small time in between:
    	* the first timestamp value gets overwritten by the second connection request.
    
    This is not really good, so this patch separates timestamps into
     * those which are received by the server during the initial handshake (on dccp_request_sock);
     * those which are received by the client or the client after connection establishment.
    
    As before, a timestamp of 0 is regarded as indicating that no (meaningful) timestamp has been
    received (in addition, a warning message is printed if hosts send 0-valued timestamps).
    
    The timestamp-echoing now works as follows:
     * when a timestamp is present on the initial Request, it is placed into dreq, due to the
       call to dccp_parse_options in dccp_v{4,6}_conn_request;
     * when a timestamp is present on the Ack leading from RESPOND => OPEN, it is copied over
       from the request_sock into the child cocket in dccp_create_openreq_child;
     * timestamps received on an (established) dccp_sock are treated as before.
    
    Since Elapsed Time is measured in hundredths of milliseconds (13.2), the new dccp_timestamp()
    function is used, as it is expected that the time between receiving the timestamp and
    sending the timestamp echo will be very small against the wrap-around time. As a byproduct,
    this allows smaller timestamping-time fields.
    
    Furthermore, inserting the Timestamp Echo option has been taken out of the block starting with
    '!dccp_packet_without_ack()', since Timestamp Echo can be carried on any packet (5.8 and 13.3).
    Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    Acked-by: default avatarIan McDonald <ian.mcdonald@jandi.co.nz>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b4d4f7c7
options.c 15.6 KB