Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 
0003 #define _GNU_SOURCE
0004 #include <test_progs.h>
0005 #include <network_helpers.h>
0006 #include <sys/stat.h>
0007 #include <linux/sched.h>
0008 #include <sys/syscall.h>
0009 
0010 #include "test_pkt_md_access.skel.h"
0011 #include "test_trace_ext.skel.h"
0012 #include "test_trace_ext_tracing.skel.h"
0013 
0014 static __u32 duration;
0015 
0016 void test_trace_ext(void)
0017 {
0018     struct test_pkt_md_access *skel_pkt = NULL;
0019     struct test_trace_ext_tracing *skel_trace = NULL;
0020     struct test_trace_ext_tracing__bss *bss_trace;
0021     struct test_trace_ext *skel_ext = NULL;
0022     struct test_trace_ext__bss *bss_ext;
0023     int err, pkt_fd, ext_fd;
0024     struct bpf_program *prog;
0025     char buf[100];
0026     __u64 len;
0027     LIBBPF_OPTS(bpf_test_run_opts, topts,
0028         .data_in = &pkt_v4,
0029         .data_size_in = sizeof(pkt_v4),
0030         .repeat = 1,
0031     );
0032 
0033     /* open/load/attach test_pkt_md_access */
0034     skel_pkt = test_pkt_md_access__open_and_load();
0035     if (CHECK(!skel_pkt, "setup", "classifier/test_pkt_md_access open failed\n"))
0036         goto cleanup;
0037 
0038     err = test_pkt_md_access__attach(skel_pkt);
0039     if (CHECK(err, "setup", "classifier/test_pkt_md_access attach failed: %d\n", err))
0040         goto cleanup;
0041 
0042     prog = skel_pkt->progs.test_pkt_md_access;
0043     pkt_fd = bpf_program__fd(prog);
0044 
0045     /* open extension */
0046     skel_ext = test_trace_ext__open();
0047     if (CHECK(!skel_ext, "setup", "freplace/test_pkt_md_access open failed\n"))
0048         goto cleanup;
0049 
0050     /* set extension's attach target - test_pkt_md_access  */
0051     prog = skel_ext->progs.test_pkt_md_access_new;
0052     bpf_program__set_attach_target(prog, pkt_fd, "test_pkt_md_access");
0053 
0054     /* load/attach extension */
0055     err = test_trace_ext__load(skel_ext);
0056     if (CHECK(err, "setup", "freplace/test_pkt_md_access load failed\n")) {
0057         libbpf_strerror(err, buf, sizeof(buf));
0058         fprintf(stderr, "%s\n", buf);
0059         goto cleanup;
0060     }
0061 
0062     err = test_trace_ext__attach(skel_ext);
0063     if (CHECK(err, "setup", "freplace/test_pkt_md_access attach failed: %d\n", err))
0064         goto cleanup;
0065 
0066     prog = skel_ext->progs.test_pkt_md_access_new;
0067     ext_fd = bpf_program__fd(prog);
0068 
0069     /* open tracing  */
0070     skel_trace = test_trace_ext_tracing__open();
0071     if (CHECK(!skel_trace, "setup", "tracing/test_pkt_md_access_new open failed\n"))
0072         goto cleanup;
0073 
0074     /* set tracing's attach target - fentry */
0075     prog = skel_trace->progs.fentry;
0076     bpf_program__set_attach_target(prog, ext_fd, "test_pkt_md_access_new");
0077 
0078     /* set tracing's attach target - fexit */
0079     prog = skel_trace->progs.fexit;
0080     bpf_program__set_attach_target(prog, ext_fd, "test_pkt_md_access_new");
0081 
0082     /* load/attach tracing */
0083     err = test_trace_ext_tracing__load(skel_trace);
0084     if (!ASSERT_OK(err, "tracing/test_pkt_md_access_new load")) {
0085         libbpf_strerror(err, buf, sizeof(buf));
0086         fprintf(stderr, "%s\n", buf);
0087         goto cleanup;
0088     }
0089 
0090     err = test_trace_ext_tracing__attach(skel_trace);
0091     if (!ASSERT_OK(err, "tracing/test_pkt_md_access_new attach"))
0092         goto cleanup;
0093 
0094     /* trigger the test */
0095     err = bpf_prog_test_run_opts(pkt_fd, &topts);
0096     ASSERT_OK(err, "test_run_opts err");
0097     ASSERT_OK(topts.retval, "test_run_opts retval");
0098 
0099     bss_ext = skel_ext->bss;
0100     bss_trace = skel_trace->bss;
0101 
0102     len = bss_ext->ext_called;
0103 
0104     ASSERT_NEQ(bss_ext->ext_called, 0,
0105           "failed to trigger freplace/test_pkt_md_access");
0106     ASSERT_EQ(bss_trace->fentry_called, len,
0107           "failed to trigger fentry/test_pkt_md_access_new");
0108     ASSERT_EQ(bss_trace->fexit_called, len,
0109            "failed to trigger fexit/test_pkt_md_access_new");
0110 
0111 cleanup:
0112     test_trace_ext_tracing__destroy(skel_trace);
0113     test_trace_ext__destroy(skel_ext);
0114     test_pkt_md_access__destroy(skel_pkt);
0115 }