Skip to content

Commit 9bfaaa0

Browse files
Geliang Tangintel-lab-lkp
authored andcommitted
selftests/bpf: Add mptcp_subflow bpf_iter subtest
This patch adds a subtest named test_bpf_iter to load and verify the newly added mptcp_subflow type bpf_iter example in test_mptcp. Use endpoint_init() to add a new subflow endpoint. A new helper recv_send() is invoked to trigger the ftrace hook for mptcp_sched_get_send() after wait_for_new_subflows(). Check if skel->bss->iter equals 2 to verify whether the ftrace program loops twice as expected. Signed-off-by: Geliang Tang <[email protected]>
1 parent e570493 commit 9bfaaa0

File tree

1 file changed

+85
-0
lines changed
  • tools/testing/selftests/bpf/prog_tests

1 file changed

+85
-0
lines changed

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

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "mptcp_sock.skel.h"
1111
#include "mptcpify.skel.h"
1212
#include "mptcp_subflow.skel.h"
13+
#include "mptcp_bpf_iter.skel.h"
1314
#include "mptcp_bpf_first.skel.h"
1415
#include "mptcp_bpf_bkup.skel.h"
1516
#include "mptcp_bpf_rr.skel.h"
@@ -258,6 +259,34 @@ static void send_byte(int fd)
258259
ASSERT_EQ(write(fd, &b, sizeof(b)), 1, "send single byte");
259260
}
260261

262+
static int recv_send(int server_fd)
263+
{
264+
char buf[1];
265+
int ret, fd;
266+
ssize_t n;
267+
268+
fd = accept(server_fd, NULL, NULL);
269+
if (!ASSERT_OK_FD(fd, "accept"))
270+
return -1;
271+
272+
n = recv(fd, buf, sizeof(buf), 0);
273+
if (!ASSERT_GT(n, 0, "recv")) {
274+
ret = -1;
275+
goto close;
276+
}
277+
278+
n = send(fd, buf, n, 0);
279+
if (!ASSERT_GT(n, 0, "send")) {
280+
ret = -1;
281+
goto close;
282+
}
283+
284+
ret = 0;
285+
close:
286+
close(fd);
287+
return ret;
288+
}
289+
261290
static int verify_mptcpify(int server_fd, int client_fd)
262291
{
263292
struct __mptcp_info info;
@@ -470,6 +499,60 @@ static void test_subflow(void)
470499
close(cgroup_fd);
471500
}
472501

502+
static void run_bpf_iter(void)
503+
{
504+
int server_fd, client_fd;
505+
506+
server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
507+
if (!ASSERT_OK_FD(server_fd, "start_mptcp_server"))
508+
return;
509+
510+
client_fd = connect_to_fd(server_fd, 0);
511+
if (!ASSERT_OK_FD(client_fd, "connect_to_fd"))
512+
goto close_server;
513+
514+
send_byte(client_fd);
515+
wait_for_new_subflows(client_fd);
516+
recv_send(server_fd);
517+
518+
close(client_fd);
519+
close_server:
520+
close(server_fd);
521+
}
522+
523+
static void test_bpf_iter(void)
524+
{
525+
struct mptcp_bpf_iter *skel;
526+
struct nstoken *nstoken;
527+
int err;
528+
529+
skel = mptcp_bpf_iter__open_and_load();
530+
if (!ASSERT_OK_PTR(skel, "skel_open_load: mptcp_iter"))
531+
return;
532+
533+
skel->bss->pid = getpid();
534+
535+
err = mptcp_bpf_iter__attach(skel);
536+
if (!ASSERT_OK(err, "skel_attach: mptcp_iter"))
537+
goto skel_destroy;
538+
539+
nstoken = create_netns();
540+
if (!ASSERT_OK_PTR(nstoken, "create_netns: mptcp_iter"))
541+
goto skel_destroy;
542+
543+
if (endpoint_init("subflow") < 0)
544+
goto close_netns;
545+
546+
run_bpf_iter();
547+
548+
ASSERT_EQ(skel->bss->iter, 2, "iter");
549+
550+
close_netns:
551+
cleanup_netns(nstoken);
552+
skel_destroy:
553+
mptcp_bpf_iter__destroy(skel);
554+
}
555+
473556
static struct nstoken *sched_init(char *flags, char *sched)
474557
{
475558
struct nstoken *nstoken;
@@ -651,6 +734,8 @@ void test_mptcp(void)
651734
test_mptcpify();
652735
if (test__start_subtest("subflow"))
653736
test_subflow();
737+
if (test__start_subtest("bpf_iter"))
738+
test_bpf_iter();
654739
if (test__start_subtest("default"))
655740
test_default();
656741
if (test__start_subtest("first"))

0 commit comments

Comments
 (0)