}
}
-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)