• Daniel Borkmann's avatar
    bpf: more msg_name rewrite tests to test_sock_addr · 1812291e
    Daniel Borkmann authored
    Extend test_sock_addr for recvmsg test cases, bigger parts of the
    sendmsg code can be reused for this. Below are the strace view of
    the recvmsg rewrites; the sendmsg side does not have a BPF prog
    connected to it for the context of this test:
    
    IPv4 test case:
    
      [pid  4846] bpf(BPF_PROG_ATTACH, {target_fd=3, attach_bpf_fd=4, attach_type=0x13 /* BPF_??? */, attach_flags=BPF_F_ALLOW_OVERRIDE}, 112) = 0
      [pid  4846] socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 5
      [pid  4846] bind(5, {sa_family=AF_INET, sin_port=htons(4444), sin_addr=inet_addr("127.0.0.1")}, 128) = 0
      [pid  4846] socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 6
      [pid  4846] sendmsg(6, {msg_name={sa_family=AF_INET, sin_port=htons(4444), sin_addr=inet_addr("127.0.0.1")}, msg_namelen=128, msg_iov=[{iov_base="a", iov_len=1}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 1
      [pid  4846] select(6, [5], NULL, NULL, {tv_sec=2, tv_usec=0}) = 1 (in [5], left {tv_sec=1, tv_usec=999995})
      [pid  4846] recvmsg(5, {msg_name={sa_family=AF_INET, sin_port=htons(4040), sin_addr=inet_addr("192.168.1.254")}, msg_namelen=128->16, msg_iov=[{iov_base="a", iov_len=64}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 1
      [pid  4846] close(6)                    = 0
      [pid  4846] close(5)                    = 0
      [pid  4846] bpf(BPF_PROG_DETACH, {target_fd=3, attach_type=0x13 /* BPF_??? */}, 112) = 0
    
    IPv6 test case:
    
      [pid  4846] bpf(BPF_PROG_ATTACH, {target_fd=3, attach_bpf_fd=4, attach_type=0x14 /* BPF_??? */, attach_flags=BPF_F_ALLOW_OVERRIDE}, 112) = 0
      [pid  4846] socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
      [pid  4846] bind(5, {sa_family=AF_INET6, sin6_port=htons(6666), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 128) = 0
      [pid  4846] socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP) = 6
      [pid  4846] sendmsg(6, {msg_name={sa_family=AF_INET6, sin6_port=htons(6666), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, msg_namelen=128, msg_iov=[{iov_base="a", iov_len=1}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 1
      [pid  4846] select(6, [5], NULL, NULL, {tv_sec=2, tv_usec=0}) = 1 (in [5], left {tv_sec=1, tv_usec=999996})
      [pid  4846] recvmsg(5, {msg_name={sa_family=AF_INET6, sin6_port=htons(6060), inet_pton(AF_INET6, "face:b00c:1234:5678::abcd", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, msg_namelen=128->28, msg_iov=[{iov_base="a", iov_len=64}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 1
      [pid  4846] close(6)                    = 0
      [pid  4846] close(5)                    = 0
      [pid  4846] bpf(BPF_PROG_DETACH, {target_fd=3, attach_type=0x14 /* BPF_??? */}, 112) = 0
    
    test_sock_addr run w/o strace view:
    
      # ./test_sock_addr.sh
      [...]
      Test case: recvmsg4: return code ok .. [PASS]
      Test case: recvmsg4: return code !ok .. [PASS]
      Test case: recvmsg6: return code ok .. [PASS]
      Test case: recvmsg6: return code !ok .. [PASS]
      Test case: recvmsg4: rewrite IP & port (asm) .. [PASS]
      Test case: recvmsg6: rewrite IP & port (asm) .. [PASS]
      [...]
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAndrey Ignatov <rdna@fb.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    1812291e
test_sock_addr.c 37.4 KB