• Kuniyuki Iwashima's avatar
    selftest: bpf: Test bpf_sk_assign_tcp_reqsk(). · a7471224
    Kuniyuki Iwashima authored
    This commit adds a sample selftest to demonstrate how we can use
    bpf_sk_assign_tcp_reqsk() as the backend of SYN Proxy.
    
    The test creates IPv4/IPv6 x TCP connections and transfer messages
    over them on lo with BPF tc prog attached.
    
    The tc prog will process SYN and returns SYN+ACK with the following
    ISN and TS.  In a real use case, this part will be done by other
    hosts.
    
            MSB                                   LSB
      ISN:  | 31 ... 8 | 7 6 |   5 |    4 | 3 2 1 0 |
            |   Hash_1 | MSS | ECN | SACK |  WScale |
    
      TS:   | 31 ... 8 |          7 ... 0           |
            |   Random |           Hash_2           |
    
      WScale in SYN is reused in SYN+ACK.
    
    The client returns ACK, and tc prog will recalculate ISN and TS
    from ACK and validate SYN Cookie.
    
    If it's valid, the prog calls kfunc to allocate a reqsk for skb and
    configure the reqsk based on the argument created from SYN Cookie.
    
    Later, the reqsk will be processed in cookie_v[46]_check() to create
    a connection.
    Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240115205514.68364-7-kuniyu@amazon.comSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    a7471224
bpf_tracing_net.h 3.12 KB