selftests/bpf: Fix flow dissector tests
authorStanislav Fomichev <sdf@google.com>
Thu, 21 Oct 2021 21:48:14 +0000 (14:48 -0700)
committerAndrii Nakryiko <andrii@kernel.org>
Fri, 22 Oct 2021 23:53:38 +0000 (16:53 -0700)
- update custom loader to search by name, not section name
- update bpftool commands to use proper pin path

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20211021214814.1236114-4-sdf@google.com
tools/testing/selftests/bpf/flow_dissector_load.c
tools/testing/selftests/bpf/flow_dissector_load.h
tools/testing/selftests/bpf/test_flow_dissector.sh

index 3fd83b9..87fd1aa 100644 (file)
@@ -17,7 +17,7 @@
 const char *cfg_pin_path = "/sys/fs/bpf/flow_dissector";
 const char *cfg_map_name = "jmp_table";
 bool cfg_attach = true;
-char *cfg_section_name;
+char *cfg_prog_name;
 char *cfg_path_name;
 
 static void load_and_attach_program(void)
@@ -25,7 +25,11 @@ static void load_and_attach_program(void)
        int prog_fd, ret;
        struct bpf_object *obj;
 
-       ret = bpf_flow_load(&obj, cfg_path_name, cfg_section_name,
+       ret = libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
+       if (ret)
+               error(1, 0, "failed to enable libbpf strict mode: %d", ret);
+
+       ret = bpf_flow_load(&obj, cfg_path_name, cfg_prog_name,
                            cfg_map_name, NULL, &prog_fd, NULL);
        if (ret)
                error(1, 0, "bpf_flow_load %s", cfg_path_name);
@@ -75,15 +79,15 @@ static void parse_opts(int argc, char **argv)
                        break;
                case 'p':
                        if (cfg_path_name)
-                               error(1, 0, "only one prog name can be given");
+                               error(1, 0, "only one path can be given");
 
                        cfg_path_name = optarg;
                        break;
                case 's':
-                       if (cfg_section_name)
-                               error(1, 0, "only one section can be given");
+                       if (cfg_prog_name)
+                               error(1, 0, "only one prog can be given");
 
-                       cfg_section_name = optarg;
+                       cfg_prog_name = optarg;
                        break;
                }
        }
@@ -94,7 +98,7 @@ static void parse_opts(int argc, char **argv)
        if (cfg_attach && !cfg_path_name)
                error(1, 0, "must provide a path to the BPF program");
 
-       if (cfg_attach && !cfg_section_name)
+       if (cfg_attach && !cfg_prog_name)
                error(1, 0, "must provide a section name");
 }
 
index 7290401..9d0acc2 100644 (file)
@@ -7,7 +7,7 @@
 
 static inline int bpf_flow_load(struct bpf_object **obj,
                                const char *path,
-                               const char *section_name,
+                               const char *prog_name,
                                const char *map_name,
                                const char *keys_map_name,
                                int *prog_fd,
@@ -23,13 +23,7 @@ static inline int bpf_flow_load(struct bpf_object **obj,
        if (ret)
                return ret;
 
-       main_prog = NULL;
-       bpf_object__for_each_program(prog, *obj) {
-               if (strcmp(section_name, bpf_program__section_name(prog)) == 0) {
-                       main_prog = prog;
-                       break;
-               }
-       }
+       main_prog = bpf_object__find_program_by_name(*obj, prog_name);
        if (!main_prog)
                return -1;
 
index 174b72a..dbd9122 100755 (executable)
@@ -26,22 +26,22 @@ if [[ -z $(ip netns identify $$) ]]; then
                        type flow_dissector
 
                if ! unshare --net $bpftool prog attach pinned \
-                       /sys/fs/bpf/flow/flow_dissector flow_dissector; then
+                       /sys/fs/bpf/flow/_dissect flow_dissector; then
                        echo "Unexpected unsuccessful attach in namespace" >&2
                        err=1
                fi
 
-               $bpftool prog attach pinned /sys/fs/bpf/flow/flow_dissector \
+               $bpftool prog attach pinned /sys/fs/bpf/flow/_dissect \
                        flow_dissector
 
                if unshare --net $bpftool prog attach pinned \
-                       /sys/fs/bpf/flow/flow_dissector flow_dissector; then
+                       /sys/fs/bpf/flow/_dissect flow_dissector; then
                        echo "Unexpected successful attach in namespace" >&2
                        err=1
                fi
 
                if ! $bpftool prog detach pinned \
-                       /sys/fs/bpf/flow/flow_dissector flow_dissector; then
+                       /sys/fs/bpf/flow/_dissect flow_dissector; then
                        echo "Failed to detach flow dissector" >&2
                        err=1
                fi
@@ -95,7 +95,7 @@ else
 fi
 
 # Attach BPF program
-./flow_dissector_load -p bpf_flow.o -s flow_dissector
+./flow_dissector_load -p bpf_flow.o -s _dissect
 
 # Setup
 tc qdisc add dev lo ingress