Allow auto port binding for cgroup connect test to avoid binding conflict.

Result:
./test_progs -a cgroup_v1v2
59      cgroup_v1v2:OK
Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED

Signed-off-by: Jiayuan Chen <jiayuan.c...@linux.dev>
---
 .../testing/selftests/bpf/prog_tests/cgroup_v1v2.c  | 13 +++++++++----
 .../testing/selftests/bpf/progs/connect4_dropper.c  |  4 +++-
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c 
b/tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c
index 64abba72ac10..37c1cc52ed98 100644
--- a/tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c
+++ b/tools/testing/selftests/bpf/prog_tests/cgroup_v1v2.c
@@ -10,12 +10,18 @@
 static int run_test(int cgroup_fd, int server_fd, bool classid)
 {
        struct connect4_dropper *skel;
-       int fd, err = 0;
+       int fd, err = 0, port;
 
        skel = connect4_dropper__open_and_load();
        if (!ASSERT_OK_PTR(skel, "skel_open"))
                return -1;
 
+       port = get_socket_local_port(server_fd);
+       if (!ASSERT_GE(port, 0, "get_socket_local_port"))
+               return -1;
+
+       skel->bss->port = ntohs(port);
+
        skel->links.connect_v4_dropper =
                bpf_program__attach_cgroup(skel->progs.connect_v4_dropper,
                                           cgroup_fd);
@@ -48,10 +54,9 @@ void test_cgroup_v1v2(void)
 {
        struct network_helper_opts opts = {};
        int server_fd, client_fd, cgroup_fd;
-       static const int port = 60120;
 
        /* Step 1: Check base connectivity works without any BPF. */
-       server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
+       server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
        if (!ASSERT_GE(server_fd, 0, "server_fd"))
                return;
        client_fd = connect_to_fd_opts(server_fd, &opts);
@@ -66,7 +71,7 @@ void test_cgroup_v1v2(void)
        cgroup_fd = test__join_cgroup("/connect_dropper");
        if (!ASSERT_GE(cgroup_fd, 0, "cgroup_fd"))
                return;
-       server_fd = start_server(AF_INET, SOCK_STREAM, NULL, port, 0);
+       server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
        if (!ASSERT_GE(server_fd, 0, "server_fd")) {
                close(cgroup_fd);
                return;
diff --git a/tools/testing/selftests/bpf/progs/connect4_dropper.c 
b/tools/testing/selftests/bpf/progs/connect4_dropper.c
index d3f4c5e4fb69..a3819a5d09c8 100644
--- a/tools/testing/selftests/bpf/progs/connect4_dropper.c
+++ b/tools/testing/selftests/bpf/progs/connect4_dropper.c
@@ -13,12 +13,14 @@
 #define VERDICT_REJECT 0
 #define VERDICT_PROCEED        1
 
+int port;
+
 SEC("cgroup/connect4")
 int connect_v4_dropper(struct bpf_sock_addr *ctx)
 {
        if (ctx->type != SOCK_STREAM)
                return VERDICT_PROCEED;
-       if (ctx->user_port == bpf_htons(60120))
+       if (ctx->user_port == bpf_htons(port))
                return VERDICT_REJECT;
        return VERDICT_PROCEED;
 }
-- 
2.47.1


Reply via email to