0001
0002
0003 #include <test_progs.h>
0004 #include "syscall.skel.h"
0005
0006 struct args {
0007 __u64 log_buf;
0008 __u32 log_size;
0009 int max_entries;
0010 int map_fd;
0011 int prog_fd;
0012 int btf_fd;
0013 };
0014
0015 void test_syscall(void)
0016 {
0017 static char verifier_log[8192];
0018 struct args ctx = {
0019 .max_entries = 1024,
0020 .log_buf = (uintptr_t) verifier_log,
0021 .log_size = sizeof(verifier_log),
0022 };
0023 LIBBPF_OPTS(bpf_test_run_opts, tattr,
0024 .ctx_in = &ctx,
0025 .ctx_size_in = sizeof(ctx),
0026 );
0027 struct syscall *skel = NULL;
0028 __u64 key = 12, value = 0;
0029 int err, prog_fd;
0030
0031 skel = syscall__open_and_load();
0032 if (!ASSERT_OK_PTR(skel, "skel_load"))
0033 goto cleanup;
0034
0035 prog_fd = bpf_program__fd(skel->progs.bpf_prog);
0036 err = bpf_prog_test_run_opts(prog_fd, &tattr);
0037 ASSERT_EQ(err, 0, "err");
0038 ASSERT_EQ(tattr.retval, 1, "retval");
0039 ASSERT_GT(ctx.map_fd, 0, "ctx.map_fd");
0040 ASSERT_GT(ctx.prog_fd, 0, "ctx.prog_fd");
0041 ASSERT_OK(memcmp(verifier_log, "processed", sizeof("processed") - 1),
0042 "verifier_log");
0043
0044 err = bpf_map_lookup_elem(ctx.map_fd, &key, &value);
0045 ASSERT_EQ(err, 0, "map_lookup");
0046 ASSERT_EQ(value, 34, "map lookup value");
0047 cleanup:
0048 syscall__destroy(skel);
0049 if (ctx.prog_fd > 0)
0050 close(ctx.prog_fd);
0051 if (ctx.map_fd > 0)
0052 close(ctx.map_fd);
0053 if (ctx.btf_fd > 0)
0054 close(ctx.btf_fd);
0055 }