Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /* Copyright (c) 2021 Facebook */
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 }