mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 06:37:59 +00:00
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: John Fastabend <john.fastabend@gmail.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com> Link: https://lore.kernel.org/bpf/158939736278.15176.5435314315563203761.stgit@john-Precision-5820-Tower
This commit is contained in:
parent
a7238f7c79
commit
96586dd926
1 changed files with 44 additions and 26 deletions
|
@ -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 {
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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 {
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
__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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue