• Martin KaFai Lau's avatar
    bpf: tcp: Add bpf_skops_hdr_opt_len() and bpf_skops_write_hdr_opt() · 331fca43
    Martin KaFai Lau authored
    The bpf prog needs to parse the SYN header to learn what options have
    been sent by the peer's bpf-prog before writing its options into SYNACK.
    This patch adds a "syn_skb" arg to tcp_make_synack() and send_synack().
    This syn_skb will eventually be made available (as read-only) to the
    bpf prog.  This will be the only SYN packet available to the bpf
    prog during syncookie.  For other regular cases, the bpf prog can
    also use the saved_syn.
    
    When writing options, the bpf prog will first be called to tell the
    kernel its required number of bytes.  It is done by the new
    bpf_skops_hdr_opt_len().  The bpf prog will only be called when the new
    BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG is set in tp->bpf_sock_ops_cb_flags.
    When the bpf prog returns, the kernel will know how many bytes are needed
    and then update the "*remaining" arg accordingly.  4 byte alignment will
    be included in the "*remaining" before this function returns.  The 4 byte
    aligned number of bytes will also be stored into the opts->bpf_opt_len.
    "bpf_opt_len" is a newly added member to the struct tcp_out_options.
    
    Then the new bpf_skops_write_hdr_opt() will call the bpf prog to write the
    header options.  The bpf prog is only called if it has reserved spaces
    before (opts->bpf_opt_len > 0).
    
    The bpf prog is the last one getting a chance to reserve header space
    and writing the header option.
    
    These two functions are half implemented to highlight the changes in
    TCP stack.  The actual codes preparing the bpf running context and
    invoking the bpf prog will be added in the later patch with other
    necessary bpf pieces.
    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>
    Link: https://lore.kernel.org/bpf/20200820190052.2885316-1-kafai@fb.com
    331fca43
tcp_output.c 116 KB