summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/recvmsg4_prog.c
diff options
context:
space:
mode:
authorStanislav Fomichev <sdf@google.com>2021-01-27 15:28:52 -0800
committerDaniel Borkmann <daniel@iogearbox.net>2021-01-29 02:09:05 +0100
commit357490601621d077c2c90473fec66d7a8badedcc (patch)
tree423741aaac9b0ab450e743187865491521e7cabd /tools/testing/selftests/bpf/progs/recvmsg4_prog.c
parent073f4ec124bb2c431d9e4136e7f583abfea7f290 (diff)
selftests/bpf: Rewrite recvmsg{4,6} asm progs to c in test_sock_addr
I'll extend them in the next patch. It's easier to work with C than with asm. Signed-off-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20210127232853.3753823-4-sdf@google.com
Diffstat (limited to 'tools/testing/selftests/bpf/progs/recvmsg4_prog.c')
-rw-r--r--tools/testing/selftests/bpf/progs/recvmsg4_prog.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/recvmsg4_prog.c b/tools/testing/selftests/bpf/progs/recvmsg4_prog.c
new file mode 100644
index 000000000000..fc2fe8a952fa
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/recvmsg4_prog.c
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/stddef.h>
+#include <linux/bpf.h>
+#include <linux/in.h>
+#include <sys/socket.h>
+
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_endian.h>
+
+#define SERV4_IP 0xc0a801feU /* 192.168.1.254 */
+#define SERV4_PORT 4040
+
+SEC("cgroup/recvmsg4")
+int recvmsg4_prog(struct bpf_sock_addr *ctx)
+{
+ struct bpf_sock *sk;
+ __u32 user_ip4;
+ __u16 user_port;
+
+ sk = ctx->sk;
+ if (!sk)
+ return 1;
+
+ if (sk->family != AF_INET)
+ return 1;
+
+ if (ctx->type != SOCK_STREAM && ctx->type != SOCK_DGRAM)
+ return 1;
+
+ ctx->user_ip4 = bpf_htonl(SERV4_IP);
+ ctx->user_port = bpf_htons(SERV4_PORT);
+
+ return 1;
+}
+
+char _license[] SEC("license") = "GPL";