On 3/29/24 12:18 PM, Jordan Rife wrote:
diff --git a/tools/testing/selftests/bpf/sock_addr_helpers.c 
b/tools/testing/selftests/bpf/sock_addr_helpers.c
new file mode 100644
index 0000000000000..ff2eb09870f16
--- /dev/null
+++ b/tools/testing/selftests/bpf/sock_addr_helpers.c
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <bpf/bpf.h>
+#include <bpf/libbpf.h>
+
+#include "cgroup_helpers.h"
+#include "sock_addr_helpers.h"
+#include "testing_helpers.h"
+
+int load_path(const char *path, enum bpf_attach_type attach_type,
+             bool expect_reject)
+{
+       struct bpf_object *obj;
+       struct bpf_program *prog;
+       int err;
+
+       obj = bpf_object__open_file(path, NULL);

Although it works, it is heading to the opposite direction by reusing things from the older test_sock_addr.c.

test_sock_addr.c should have been moved to the test_progs. It is not run by bpf CI and bits get rotten [e.g. the bug fix in patch 8]. There is also old practice like bpf_object__open_file() should have been replaced with the skeleton __open_and_load() instead of refactoring it out to create new use cases.

The newer prog_tests/sock_addr.c was created when adding AF_UNIX support. It has a very similar setup as the older test_sock_addr.c and the intention was to finally retire test_sock_addr.c. e.g. It also has "load_fn loadfn" but is done with skeleton, the program is also attached to cgroup...etc.

Instead of adding a new sock_addr_kern.c in patch 7, it probably will be easier to add the kernel socket tests into the existing prog_tests/sock_addr.c.

Also setup the netns and veth in the prog_tests/sock_addr.c instead of calling out the test_sock_addr.sh (which should also go away eventually), there are examples in prog_tests/ (e.g. mptcp.c).

+       err = libbpf_get_error(obj);
+       if (err) {
+               log_err(">>> Opening BPF object (%s) error.\n", path);
+               return -1;
+       }
+
+       prog = bpf_object__next_program(obj, NULL);
+       if (!prog)
+               goto err_out;
+
+       bpf_program__set_type(prog, BPF_PROG_TYPE_CGROUP_SOCK_ADDR);
+       bpf_program__set_expected_attach_type(prog, attach_type);
+       bpf_program__set_flags(prog, testing_prog_flags());
+
+       err = bpf_object__load(obj);
+       if (err) {
+               if (!expect_reject)
+                       log_err(">>> Loading program (%s) error.\n", path);
+               goto err_out;
+       }
+
+       return bpf_program__fd(prog);
+err_out:
+       bpf_object__close(obj);
+       return -1;
+}


Reply via email to