]>
git.ipfire.org Git - thirdparty/linux.git/blob - tools/testing/selftests/bpf/prog_tests/xdp_attach.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include <test_progs.h>
5 #define XDP_FLAGS_REPLACE (1U << 4)
7 void test_xdp_attach(void)
9 struct bpf_object
*obj1
, *obj2
, *obj3
;
10 const char *file
= "./test_xdp.o";
11 int err
, fd1
, fd2
, fd3
;
13 DECLARE_LIBBPF_OPTS(bpf_xdp_set_link_opts
, opts
,
16 err
= bpf_prog_load(file
, BPF_PROG_TYPE_XDP
, &obj1
, &fd1
);
19 err
= bpf_prog_load(file
, BPF_PROG_TYPE_XDP
, &obj2
, &fd2
);
22 err
= bpf_prog_load(file
, BPF_PROG_TYPE_XDP
, &obj3
, &fd3
);
26 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, fd1
, XDP_FLAGS_REPLACE
,
28 if (CHECK(err
, "load_ok", "initial load failed"))
31 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, fd2
, XDP_FLAGS_REPLACE
,
33 if (CHECK(!err
, "load_fail", "load with expected id didn't fail"))
37 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, fd2
, 0, &opts
);
38 if (CHECK(err
, "replace_ok", "replace valid old_fd failed"))
41 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, fd3
, 0, &opts
);
42 if (CHECK(!err
, "replace_fail", "replace invalid old_fd didn't fail"))
45 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, -1, 0, &opts
);
46 if (CHECK(!err
, "remove_fail", "remove invalid old_fd didn't fail"))
50 err
= bpf_set_link_xdp_fd_opts(IFINDEX_LO
, -1, 0, &opts
);
51 if (CHECK(err
, "remove_ok", "remove valid old_fd failed"))
55 bpf_set_link_xdp_fd(IFINDEX_LO
, -1, 0);
57 bpf_object__close(obj3
);
59 bpf_object__close(obj2
);
61 bpf_object__close(obj1
);