selftests/bpf: skip sockmap in test_maps if kernel doesn't have support
authorStanislav Fomichev <sdf@google.com>
Mon, 28 Jan 2019 17:21:15 +0000 (09:21 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 31 Jan 2019 09:13:21 +0000 (10:13 +0100)
Use recently introduced bpf_probe_map_type() to skip test_sockmap()
if map creation fails. The skipped test is indicated in the output.

Example:

test_sockmap SKIP (unsupported map type BPF_MAP_TYPE_SOCKMAP)
Fork 1024 tasks to 'test_update_delete'
...
test_sockmap SKIP (unsupported map type BPF_MAP_TYPE_SOCKMAP)
Fork 1024 tasks to 'test_update_delete'
...
test_maps: OK, 2 SKIPPED

Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/test_maps.c

index 1dfef77cff6f4b62aa59bad8395b98461f18d36a..e7798dd97f4b9861c841679f051cd4b00205756f 100644 (file)
@@ -32,6 +32,8 @@
 #define ENOTSUPP 524
 #endif
 
+static int skips;
+
 static int map_flags;
 
 #define CHECK(condition, tag, format...) ({                            \
@@ -724,6 +726,15 @@ static void test_sockmap(int tasks, void *data)
                            sizeof(key), sizeof(value),
                            6, 0);
        if (fd < 0) {
+               if (!bpf_probe_map_type(BPF_MAP_TYPE_SOCKMAP, 0)) {
+                       printf("%s SKIP (unsupported map type BPF_MAP_TYPE_SOCKMAP)\n",
+                              __func__);
+                       skips++;
+                       for (i = 0; i < 6; i++)
+                               close(sfd[i]);
+                       return;
+               }
+
                printf("Failed to create sockmap %i\n", fd);
                goto out_sockmap;
        }
@@ -1701,6 +1712,6 @@ int main(void)
        map_flags = BPF_F_NO_PREALLOC;
        run_all_tests();
 
-       printf("test_maps: OK\n");
+       printf("test_maps: OK, %d SKIPPED\n", skips);
        return 0;
 }