Skip to content

Commit 54462e8

Browse files
jrifeAlexei Starovoitov
authored andcommitted
selftests/bpf: Migrate sendmsg6 v4 mapped address tests
Migrate test case from bpf/test_sock_addr.c ensuring that sendmsg returns -ENOTSUPP when sending to an IPv4-mapped IPv6 address to prog_tests/sock_addr.c. Signed-off-by: Jordan Rife <jrife@google.com> Link: https://lore.kernel.org/r/20240510190246.3247730-9-jrife@google.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent f46a104 commit 54462e8

3 files changed

Lines changed: 42 additions & 20 deletions

File tree

tools/testing/selftests/bpf/prog_tests/sock_addr.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ BPF_SKEL_FUNCS(sendmsg4_prog, sendmsg_v4_deny_prog);
447447
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_prog);
448448
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_deny_prog);
449449
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_preserve_dst_prog);
450+
BPF_SKEL_FUNCS(sendmsg6_prog, sendmsg_v6_v4mapped_prog);
450451
BPF_SKEL_FUNCS(sendmsg_unix_prog, sendmsg_unix_prog);
451452
BPF_SKEL_FUNCS(recvmsg4_prog, recvmsg4_prog);
452453
BPF_SKEL_FUNCS(recvmsg6_prog, recvmsg6_prog);
@@ -832,6 +833,22 @@ static struct sock_addr_test tests[] = {
832833
SRC6_REWRITE_IP,
833834
SYSCALL_EPERM,
834835
},
836+
{
837+
SOCK_ADDR_TEST_SENDMSG,
838+
"sendmsg6: sendmsg IPv4-mapped IPv6 (dgram)",
839+
sendmsg_v6_v4mapped_prog_load,
840+
sendmsg_v6_v4mapped_prog_destroy,
841+
BPF_CGROUP_UDP6_SENDMSG,
842+
&user_ops,
843+
AF_INET6,
844+
SOCK_DGRAM,
845+
SERV6_IP,
846+
SERV6_PORT,
847+
SERV6_REWRITE_IP,
848+
SERV6_REWRITE_PORT,
849+
SRC6_REWRITE_IP,
850+
SYSCALL_ENOTSUPP,
851+
},
835852
{
836853
SOCK_ADDR_TEST_SENDMSG,
837854
"sendmsg_unix: sendmsg (dgram)",

tools/testing/selftests/bpf/progs/sendmsg6_prog.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
#define DST_REWRITE_IP6_2 0
2121
#define DST_REWRITE_IP6_3 1
2222

23+
#define DST_REWRITE_IP6_V4_MAPPED_0 0
24+
#define DST_REWRITE_IP6_V4_MAPPED_1 0
25+
#define DST_REWRITE_IP6_V4_MAPPED_2 0x0000FFFF
26+
#define DST_REWRITE_IP6_V4_MAPPED_3 0xc0a80004 // 192.168.0.4
27+
2328
#define DST_REWRITE_PORT6 6666
2429

2530
SEC("cgroup/sendmsg6")
@@ -59,6 +64,26 @@ int sendmsg_v6_prog(struct bpf_sock_addr *ctx)
5964
return 1;
6065
}
6166

67+
SEC("cgroup/sendmsg6")
68+
int sendmsg_v6_v4mapped_prog(struct bpf_sock_addr *ctx)
69+
{
70+
/* Rewrite source. */
71+
ctx->msg_src_ip6[0] = bpf_htonl(SRC_REWRITE_IP6_0);
72+
ctx->msg_src_ip6[1] = bpf_htonl(SRC_REWRITE_IP6_1);
73+
ctx->msg_src_ip6[2] = bpf_htonl(SRC_REWRITE_IP6_2);
74+
ctx->msg_src_ip6[3] = bpf_htonl(SRC_REWRITE_IP6_3);
75+
76+
/* Rewrite destination. */
77+
ctx->user_ip6[0] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_0);
78+
ctx->user_ip6[1] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_1);
79+
ctx->user_ip6[2] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_2);
80+
ctx->user_ip6[3] = bpf_htonl(DST_REWRITE_IP6_V4_MAPPED_3);
81+
82+
ctx->user_port = bpf_htons(DST_REWRITE_PORT6);
83+
84+
return 1;
85+
}
86+
6287
SEC("cgroup/sendmsg6")
6388
int sendmsg_v6_preserve_dst_prog(struct bpf_sock_addr *ctx)
6489
{

tools/testing/selftests/bpf/test_sock_addr.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ static int connect4_prog_load(const struct sock_addr_test *test);
9494
static int connect6_prog_load(const struct sock_addr_test *test);
9595
static int sendmsg4_rw_asm_prog_load(const struct sock_addr_test *test);
9696
static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test);
97-
static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test);
9897
static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test);
9998

10099
static struct sock_addr_test tests[] = {
@@ -299,20 +298,6 @@ static struct sock_addr_test tests[] = {
299298
SRC6_REWRITE_IP,
300299
SUCCESS,
301300
},
302-
{
303-
"sendmsg6: IPv4-mapped IPv6",
304-
sendmsg6_rw_v4mapped_prog_load,
305-
BPF_CGROUP_UDP6_SENDMSG,
306-
BPF_CGROUP_UDP6_SENDMSG,
307-
AF_INET6,
308-
SOCK_DGRAM,
309-
SERV6_IP,
310-
SERV6_PORT,
311-
SERV6_REWRITE_IP,
312-
SERV6_REWRITE_PORT,
313-
SRC6_REWRITE_IP,
314-
SYSCALL_ENOTSUPP,
315-
},
316301
{
317302
"sendmsg6: set dst IP = [::] (BSD'ism)",
318303
sendmsg6_rw_wildcard_prog_load,
@@ -512,11 +497,6 @@ static int sendmsg6_rw_asm_prog_load(const struct sock_addr_test *test)
512497
return sendmsg6_rw_dst_asm_prog_load(test, SERV6_REWRITE_IP);
513498
}
514499

515-
static int sendmsg6_rw_v4mapped_prog_load(const struct sock_addr_test *test)
516-
{
517-
return sendmsg6_rw_dst_asm_prog_load(test, SERV6_V4MAPPED_IP);
518-
}
519-
520500
static int sendmsg6_rw_wildcard_prog_load(const struct sock_addr_test *test)
521501
{
522502
return sendmsg6_rw_dst_asm_prog_load(test, WILDCARD6_IP);

0 commit comments

Comments
 (0)