summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJakub Sitnicki <jakub@cloudflare.com>2019-12-12 11:22:54 +0100
committerAlexei Starovoitov <ast@kernel.org>2019-12-13 12:38:00 -0800
commit9936338258308aa008387dc4f9fd3f5fec6c046a (patch)
tree8d236b3551d3ae96b5cdf8349060426e59004076 /tools
parenta9ce4cf4e47c55ab40641b92551bc9e1de4bfa61 (diff)
selftests/bpf: Unroll the main loop in reuseport test
Prepare for iterating over individual tests without introducing another nested loop in the main test function. Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20191212102259.418536-6-jakub@cloudflare.com
Diffstat (limited to 'tools')
-rw-r--r--tools/testing/selftests/bpf/test_select_reuseport.c73
1 files changed, 41 insertions, 32 deletions
diff --git a/tools/testing/selftests/bpf/test_select_reuseport.c b/tools/testing/selftests/bpf/test_select_reuseport.c
index ef98a7de6704..63ce2e75e758 100644
--- a/tools/testing/selftests/bpf/test_select_reuseport.c
+++ b/tools/testing/selftests/bpf/test_select_reuseport.c
@@ -698,47 +698,56 @@ static const char *sotype_str(int sotype)
}
}
-static void test_all(void)
+static void test_config(int type, sa_family_t family, bool inany)
{
- /* Extra SOCK_STREAM to test bind_inany==true */
- const int types[] = { SOCK_STREAM, SOCK_DGRAM, SOCK_STREAM };
- const sa_family_t families[] = { AF_INET6, AF_INET };
- const bool bind_inany[] = { false, false, true };
- int t, f, err;
+ int err;
- for (f = 0; f < ARRAY_SIZE(families); f++) {
- sa_family_t family = families[f];
+ printf("######## %s/%s %s ########\n",
+ family_str(family), sotype_str(type),
+ inany ? " INANY " : "LOOPBACK");
- for (t = 0; t < ARRAY_SIZE(types); t++) {
- bool inany = bind_inany[t];
- int type = types[t];
+ setup_per_test(type, family, inany);
- printf("######## %s/%s %s ########\n",
- family_str(family), sotype_str(type),
- inany ? " INANY " : "LOOPBACK");
+ test_err_inner_map(type, family);
- setup_per_test(type, family, inany);
+ /* Install reuseport_array to the outer_map */
+ err = bpf_map_update_elem(outer_map, &index_zero,
+ &reuseport_array, BPF_ANY);
+ CHECK(err == -1, "update_elem(outer_map)",
+ "err:%d errno:%d\n", err, errno);
- test_err_inner_map(type, family);
+ test_err_skb_data(type, family);
+ test_err_sk_select_port(type, family);
+ test_pass(type, family);
+ test_syncookie(type, family);
+ test_pass_on_err(type, family);
+ /* Must be the last test */
+ test_detach_bpf(type, family);
- /* Install reuseport_array to the outer_map */
- err = bpf_map_update_elem(outer_map, &index_zero,
- &reuseport_array, BPF_ANY);
- CHECK(err == -1, "update_elem(outer_map)",
- "err:%d errno:%d\n", err, errno);
+ cleanup_per_test();
+ printf("\n");
+}
- test_err_skb_data(type, family);
- test_err_sk_select_port(type, family);
- test_pass(type, family);
- test_syncookie(type, family);
- test_pass_on_err(type, family);
- /* Must be the last test */
- test_detach_bpf(type, family);
+#define BIND_INANY true
- cleanup_per_test();
- printf("\n");
- }
- }
+static void test_all(void)
+{
+ const struct config {
+ int sotype;
+ sa_family_t family;
+ bool inany;
+ } configs[] = {
+ { SOCK_STREAM, AF_INET },
+ { SOCK_STREAM, AF_INET, BIND_INANY },
+ { SOCK_STREAM, AF_INET6 },
+ { SOCK_STREAM, AF_INET6, BIND_INANY },
+ { SOCK_DGRAM, AF_INET },
+ { SOCK_DGRAM, AF_INET6 },
+ };
+ const struct config *c;
+
+ for (c = configs; c < configs + ARRAY_SIZE(configs); c++)
+ test_config(c->sotype, c->family, c->inany);
}
int main(int argc, const char **argv)