Commit 96586dd9 authored by John Fastabend's avatar John Fastabend Committed by Daniel Borkmann

bpf: Selftests, add ktls tests to test_sockmap

Until now we have only had minimal ktls+sockmap testing when being
used with helpers and different sendmsg/sendpage patterns. Add a
pass with ktls here.

To run just ktls tests,

 $ ./test_sockmap --whitelist="ktls"
Signed-off-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Reviewed-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
Link: https://lore.kernel.org/bpf/158939736278.15176.5435314315563203761.stgit@john-Precision-5820-Tower
parent a7238f7c
...@@ -115,6 +115,7 @@ static const struct option long_options[] = { ...@@ -115,6 +115,7 @@ static const struct option long_options[] = {
struct test_env { struct test_env {
const char *type; const char *type;
const char *subtest; const char *subtest;
const char *prepend;
int test_num; int test_num;
int subtest_num; int subtest_num;
...@@ -126,6 +127,26 @@ struct test_env { ...@@ -126,6 +127,26 @@ struct test_env {
struct test_env env; struct test_env env;
struct sockmap_options {
int verbose;
bool base;
bool sendpage;
bool data_test;
bool drop_expected;
int iov_count;
int iov_length;
int rate;
char *map;
char *whitelist;
char *blacklist;
char *prepend;
};
struct _test {
char *title;
void (*tester)(int cg_fd, struct sockmap_options *opt);
};
static void test_start(void) static void test_start(void)
{ {
env.subtest_num++; env.subtest_num++;
...@@ -151,10 +172,11 @@ static void test_reset(void) ...@@ -151,10 +172,11 @@ static void test_reset(void)
txmsg_ingress = txmsg_skb = 0; txmsg_ingress = txmsg_skb = 0;
} }
static int test_start_subtest(const char *name, const char *type) static int test_start_subtest(const struct _test *t, struct sockmap_options *o)
{ {
env.type = type; env.type = o->map;
env.subtest = name; env.subtest = t->title;
env.prepend = o->prepend;
env.test_num++; env.test_num++;
env.subtest_num = 0; env.subtest_num = 0;
env.fail_last = env.fail_cnt; env.fail_last = env.fail_cnt;
...@@ -170,9 +192,10 @@ static void test_end_subtest(void) ...@@ -170,9 +192,10 @@ static void test_end_subtest(void)
if (!error) if (!error)
test_pass(); test_pass();
fprintf(stdout, "#%2d/%2d %8s:%s:%s\n", fprintf(stdout, "#%2d/%2d %8s:%s:%s:%s\n",
env.test_num, env.subtest_num, env.test_num, env.subtest_num,
!type ? "sockmap" : "sockhash", !type ? "sockmap" : "sockhash",
env.prepend ? : "",
env.subtest, error ? "FAIL" : "OK"); env.subtest, error ? "FAIL" : "OK");
} }
...@@ -379,20 +402,6 @@ struct msg_stats { ...@@ -379,20 +402,6 @@ struct msg_stats {
struct timespec end; struct timespec end;
}; };
struct sockmap_options {
int verbose;
bool base;
bool sendpage;
bool data_test;
bool drop_expected;
int iov_count;
int iov_length;
int rate;
char *map;
char *whitelist;
char *blacklist;
};
static int msg_loop_sendpage(int fd, int iov_length, int cnt, static int msg_loop_sendpage(int fd, int iov_length, int cnt,
struct msg_stats *s, struct msg_stats *s,
struct sockmap_options *opt) struct sockmap_options *opt)
...@@ -1606,11 +1615,6 @@ static int populate_progs(char *bpf_file) ...@@ -1606,11 +1615,6 @@ static int populate_progs(char *bpf_file)
return 0; return 0;
} }
struct _test {
char *title;
void (*tester)(int cg_fd, struct sockmap_options *opt);
};
struct _test test[] = { struct _test test[] = {
{"txmsg test passthrough", test_txmsg_pass}, {"txmsg test passthrough", test_txmsg_pass},
{"txmsg test redirect", test_txmsg_redir}, {"txmsg test redirect", test_txmsg_redir},
...@@ -1636,7 +1640,9 @@ static int check_whitelist(struct _test *t, struct sockmap_options *opt) ...@@ -1636,7 +1640,9 @@ static int check_whitelist(struct _test *t, struct sockmap_options *opt)
return -ENOMEM; return -ENOMEM;
entry = strtok(ptr, ","); entry = strtok(ptr, ",");
while (entry) { while (entry) {
if (strstr(opt->map, entry) != 0 || strstr(t->title, entry) != 0) if ((opt->prepend && strstr(opt->prepend, entry) != 0) ||
strstr(opt->map, entry) != 0 ||
strstr(t->title, entry) != 0)
return 0; return 0;
entry = strtok(NULL, ","); entry = strtok(NULL, ",");
} }
...@@ -1654,7 +1660,9 @@ static int check_blacklist(struct _test *t, struct sockmap_options *opt) ...@@ -1654,7 +1660,9 @@ static int check_blacklist(struct _test *t, struct sockmap_options *opt)
return -ENOMEM; return -ENOMEM;
entry = strtok(ptr, ","); entry = strtok(ptr, ",");
while (entry) { while (entry) {
if (strstr(opt->map, entry) != 0 || strstr(t->title, entry) != 0) if ((opt->prepend && strstr(opt->prepend, entry) != 0) ||
strstr(opt->map, entry) != 0 ||
strstr(t->title, entry) != 0)
return 0; return 0;
entry = strtok(NULL, ","); entry = strtok(NULL, ",");
} }
...@@ -1680,7 +1688,7 @@ static int __test_selftests(int cg_fd, struct sockmap_options *opt) ...@@ -1680,7 +1688,7 @@ static int __test_selftests(int cg_fd, struct sockmap_options *opt)
if (check_blacklist(&t, opt) == 0) if (check_blacklist(&t, opt) == 0)
continue; continue;
test_start_subtest(t.title, opt->map); test_start_subtest(&t, opt);
t.tester(cg_fd, opt); t.tester(cg_fd, opt);
test_end_subtest(); test_end_subtest();
} }
...@@ -1700,11 +1708,21 @@ static void test_selftests_sockhash(int cg_fd, struct sockmap_options *opt) ...@@ -1700,11 +1708,21 @@ static void test_selftests_sockhash(int cg_fd, struct sockmap_options *opt)
__test_selftests(cg_fd, opt); __test_selftests(cg_fd, opt);
} }
static void test_selftests_ktls(int cg_fd, struct sockmap_options *opt)
{
opt->map = BPF_SOCKHASH_FILENAME;
opt->prepend = "ktls";
ktls = 1;
__test_selftests(cg_fd, opt);
ktls = 0;
}
static int test_selftest(int cg_fd, struct sockmap_options *opt) static int test_selftest(int cg_fd, struct sockmap_options *opt)
{ {
test_selftests_sockmap(cg_fd, opt); test_selftests_sockmap(cg_fd, opt);
test_selftests_sockhash(cg_fd, opt); test_selftests_sockhash(cg_fd, opt);
test_selftests_ktls(cg_fd, opt);
test_print_results(); test_print_results();
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment