This patch implements a new test program mptcpify: if the family is
AF_INET or AF_INET6, the type is SOCK_STREAM, and the protocol ID is
0 or IPPROTO_TCP, set it to IPPROTO_MPTCP.

It will be hooked in update_socket_protocol().

Signed-off-by: Geliang Tang <[email protected]>
---
 tools/testing/selftests/bpf/progs/mptcpify.c | 25 ++++++++++++++++++++
 1 file changed, 25 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/progs/mptcpify.c

diff --git a/tools/testing/selftests/bpf/progs/mptcpify.c 
b/tools/testing/selftests/bpf/progs/mptcpify.c
new file mode 100644
index 000000000000..9cf1febe982d
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/mptcpify.c
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2023, SUSE. */
+
+#include <linux/bpf.h>
+#include <bpf/bpf_tracing.h>
+
+char _license[] SEC("license") = "GPL";
+
+#define        AF_INET         2
+#define        AF_INET6        10
+#define        SOCK_STREAM     1
+#define        IPPROTO_TCP     6
+#define        IPPROTO_MPTCP   262
+
+SEC("fmod_ret/update_socket_protocol")
+int BPF_PROG(mptcpify, int family, int type, int protocol)
+{
+       if ((family == AF_INET || family == AF_INET6) &&
+           type == SOCK_STREAM &&
+           (!protocol || protocol == IPPROTO_TCP)) {
+               return IPPROTO_MPTCP;
+       }
+
+       return protocol;
+}
-- 
2.35.3


Reply via email to