All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v5 0/3] new bpf_mptcp_sock()
@ 2022-03-03 14:47 Geliang Tang
  2022-03-03 14:47 ` [PATCH mptcp-next v5 1/3] Squash to "bpf: add 'bpf_mptcp_sock' structure and helper" Geliang Tang
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Geliang Tang @ 2022-03-03 14:47 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

v5:
 - fix incorrect token value
 - verify the token in selftest

v4:
 - define bpf_mptcp_sock_proto as a static function, no longer export
   it in linux/bpf.h

v3:
 - use RET_PTR_TO_BTF_ID_OR_NULL instead of RET_PTR_TO_MPTCP_SOCK_OR_NULL
 - add a new bpf_id BTF_SOCK_TYPE_MPTCP

v2:
 - keep RET_PTR_TO_MPTCP_SOCK_OR_NULL. If we use RET_PTR_TO_BTF_ID_OR_NULL
instead of RET_PTR_TO_MPTCP_SOCK_OR_NULL as Alexei suggested, the
"userspace" tests developed by Nicolas will break.

Geliang Tang (3):
  Squash to "bpf: add 'bpf_mptcp_sock' structure and helper"
  bpf: implement bpf_mptcp_sock()
  selftests: bpf: exercise bpf_mptcp_sock()

 include/linux/bpf.h                           | 20 ++-----
 include/linux/btf_ids.h                       |  3 +-
 kernel/bpf/verifier.c                         | 20 -------
 net/core/filter.c                             | 13 +++++
 net/mptcp/bpf.c                               | 52 ++++---------------
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 25 +++++++--
 tools/testing/selftests/bpf/progs/mptcp.c     | 22 ++++++++
 7 files changed, 72 insertions(+), 83 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 11+ messages in thread
* [PATCH RESEND mptcp-next v5 3/3] selftests: bpf: exercise bpf_mptcp_sock()
@ 2022-03-03 15:22 Geliang Tang
  2022-03-03 15:57 ` selftests: bpf: exercise bpf_mptcp_sock(): Tests Results MPTCP CI
  2022-03-07 13:28 ` MPTCP CI
  0 siblings, 2 replies; 11+ messages in thread
From: Geliang Tang @ 2022-03-03 15:22 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch extended the MPTCP test base, to exercise bpf_mptcp_sock() from
C test as Alexei suggested in v3.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 27 +++++++++++++++----
 tools/testing/selftests/bpf/progs/mptcp.c     | 22 +++++++++++++++
 2 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 04aef0f147dc..ba856956f9c3 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -6,9 +6,11 @@
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	__u32 token;
 };
 
-static int verify_sk(int map_fd, int client_fd, const char *msg, __u32 is_mptcp)
+static int verify_sk(int map_fd, int client_fd, const char *msg,
+		     __u32 is_mptcp, __u32 token)
 {
 	int err = 0, cfd = client_fd;
 	struct mptcp_storage val;
@@ -19,8 +21,23 @@ static int verify_sk(int map_fd, int client_fd, const char *msg, __u32 is_mptcp)
 	 * does not trigger sockops events.
 	 * We silently pass this situation at the moment.
 	 */
-	if (is_mptcp == 1)
-		return 0;
+	if (is_mptcp == 1) {
+		if (token <= 0)
+			return 0;
+
+		if (CHECK_FAIL(bpf_map_lookup_elem(map_fd, &cfd, &val) < 0)) {
+			perror("Failed to read socket storage");
+			return -1;
+		}
+
+		if (val.token <= 0) {
+			log_err("%s: unexpected bpf_mptcp_sock.token %d %d",
+				msg, val.token, token);
+			err++;
+		}
+
+		return err;
+	}
 
 	if (CHECK_FAIL(bpf_map_lookup_elem(map_fd, &cfd, &val) < 0)) {
 		perror("Failed to read socket storage");
@@ -76,8 +93,8 @@ static int run_test(int cgroup_fd, int server_fd, bool is_mptcp)
 		goto close_client_fd;
 	}
 
-	err += is_mptcp ? verify_sk(map_fd, client_fd, "MPTCP subflow socket", 1) :
-			  verify_sk(map_fd, client_fd, "plain TCP socket", 0);
+	err += is_mptcp ? verify_sk(map_fd, client_fd, "MPTCP subflow socket", 1, 1) :
+			  verify_sk(map_fd, client_fd, "plain TCP socket", 0, 0);
 
 close_client_fd:
 	close(client_fd);
diff --git a/tools/testing/selftests/bpf/progs/mptcp.c b/tools/testing/selftests/bpf/progs/mptcp.c
index be5ee8dac2b3..faf5cbe49d70 100644
--- a/tools/testing/selftests/bpf/progs/mptcp.c
+++ b/tools/testing/selftests/bpf/progs/mptcp.c
@@ -8,6 +8,7 @@ __u32 _version SEC("version") = 1;
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	__u32 token;
 };
 
 struct {
@@ -20,6 +21,7 @@ struct {
 SEC("sockops")
 int _sockops(struct bpf_sock_ops *ctx)
 {
+	char fmt[] = "invoked=%u is_mptcp=%u token=%u\n";
 	struct mptcp_storage *storage;
 	struct bpf_tcp_sock *tcp_sk;
 	int op = (int)ctx->op;
@@ -43,6 +45,26 @@ int _sockops(struct bpf_sock_ops *ctx)
 
 	storage->invoked++;
 	storage->is_mptcp = tcp_sk->is_mptcp;
+	storage->token = 0;
+
+	if (tcp_sk->is_mptcp) {
+		struct bpf_mptcp_sock *msk;
+
+		msk = bpf_mptcp_sock(sk);
+		if (!msk)
+			return 1;
+		storage = bpf_sk_storage_get(&socket_storage_map, msk, 0,
+					     BPF_SK_STORAGE_GET_F_CREATE);
+		if (!storage)
+			return 1;
+
+		storage->invoked++;
+		storage->token = msk->token;
+		storage->is_mptcp = 1;
+	}
+
+	bpf_trace_printk(fmt, sizeof(fmt),
+			 storage->invoked, storage->is_mptcp, storage->token);
 
 	return 1;
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [PATCH mptcp-next] selftests: bpf: exercise bpf_mptcp_sock()
@ 2022-02-24 15:21 Geliang Tang
  2022-02-24 16:42 ` selftests: bpf: exercise bpf_mptcp_sock(): Tests Results MPTCP CI
  0 siblings, 1 reply; 11+ messages in thread
From: Geliang Tang @ 2022-02-24 15:21 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

This patch extended the MPTCP test base, to exercise bpf_mptcp_sock() from
C test as Alexei suggested in [1].

[1]
https://lore.kernel.org/netdev/20200922040830.3iis6xiavhvpfq3v@ast-mbp.dhcp.thefacebook.com/

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 tools/testing/selftests/bpf/prog_tests/mptcp.c |  1 +
 tools/testing/selftests/bpf/progs/mptcp.c      | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 04aef0f147dc..eba1b6d12a8c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -6,6 +6,7 @@
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	__u32 token;
 };
 
 static int verify_sk(int map_fd, int client_fd, const char *msg, __u32 is_mptcp)
diff --git a/tools/testing/selftests/bpf/progs/mptcp.c b/tools/testing/selftests/bpf/progs/mptcp.c
index be5ee8dac2b3..ea614e02c8e1 100644
--- a/tools/testing/selftests/bpf/progs/mptcp.c
+++ b/tools/testing/selftests/bpf/progs/mptcp.c
@@ -8,6 +8,7 @@ __u32 _version SEC("version") = 1;
 struct mptcp_storage {
 	__u32 invoked;
 	__u32 is_mptcp;
+	__u32 token;
 };
 
 struct {
@@ -20,6 +21,7 @@ struct {
 SEC("sockops")
 int _sockops(struct bpf_sock_ops *ctx)
 {
+	char fmt[] = "invoked=%u is_mptcp=%u token=%u\n";
 	struct mptcp_storage *storage;
 	struct bpf_tcp_sock *tcp_sk;
 	int op = (int)ctx->op;
@@ -43,6 +45,20 @@ int _sockops(struct bpf_sock_ops *ctx)
 
 	storage->invoked++;
 	storage->is_mptcp = tcp_sk->is_mptcp;
+	storage->token = 0;
+
+	if (tcp_sk->is_mptcp) {
+		struct bpf_mptcp_sock *msk;
+
+		msk = bpf_mptcp_sock(sk);
+		if (!msk)
+			return 1;
+
+		storage->token = msk->token;
+	}
+
+	bpf_trace_printk(fmt, sizeof(fmt),
+			 storage->invoked, storage->is_mptcp, storage->token);
 
 	return 1;
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-03-07 13:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-03 14:47 [PATCH mptcp-next v5 0/3] new bpf_mptcp_sock() Geliang Tang
2022-03-03 14:47 ` [PATCH mptcp-next v5 1/3] Squash to "bpf: add 'bpf_mptcp_sock' structure and helper" Geliang Tang
2022-03-03 14:47 ` [PATCH mptcp-next v5 2/3] bpf: implement bpf_mptcp_sock() Geliang Tang
2022-03-03 14:48 ` [PATCH mptcp-next v5 3/3] selftests: bpf: exercise bpf_mptcp_sock() Geliang Tang
2022-03-03 14:58   ` selftests: bpf: exercise bpf_mptcp_sock(): Build Failure MPTCP CI
2022-03-03 15:23   ` selftests: bpf: exercise bpf_mptcp_sock(): Tests Results MPTCP CI
2022-03-03 15:23   ` MPTCP CI
2022-03-03 15:28     ` Matthieu Baerts
  -- strict thread matches above, loose matches on Subject: below --
2022-03-03 15:22 [PATCH RESEND mptcp-next v5 3/3] selftests: bpf: exercise bpf_mptcp_sock() Geliang Tang
2022-03-03 15:57 ` selftests: bpf: exercise bpf_mptcp_sock(): Tests Results MPTCP CI
2022-03-07 13:28 ` MPTCP CI
2022-02-24 15:21 [PATCH mptcp-next] selftests: bpf: exercise bpf_mptcp_sock() Geliang Tang
2022-02-24 16:42 ` selftests: bpf: exercise bpf_mptcp_sock(): Tests Results MPTCP CI

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.