• Martin KaFai Lau's avatar
    tcp: Use a struct to represent a saved_syn · 70a217f1
    Martin KaFai Lau authored
    The TCP_SAVE_SYN has both the network header and tcp header.
    The total length of the saved syn packet is currently stored in
    the first 4 bytes (u32) of an array and the actual packet data is
    stored after that.
    
    A later patch will add a bpf helper that allows to get the tcp header
    alone from the saved syn without the network header.  It will be more
    convenient to have a direct offset to a specific header instead of
    re-parsing it.  This requires to separately store the network hdrlen.
    The total header length (i.e. network + tcp) is still needed for the
    current usage in getsockopt.  Although this total length can be obtained
    by looking into the tcphdr and then get the (th->doff << 2), this patch
    chooses to directly store the tcp hdrlen in the second four bytes of
    this newly created "struct saved_syn".  By using a new struct, it can
    give a readable name to each individual header length.
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20200820190014.2883694-1-kafai@fb.com
    70a217f1
tcp.c 109 KB