selftests/bpf: Add test for detachment on empty mprog entry
Add a detachment test case with miniq present to assert that with and without the miniq we get the same error. # ./test_progs -t tc_opts #244 tc_opts_after:OK #245 tc_opts_append:OK #246 tc_opts_basic:OK #247 tc_opts_before:OK #248 tc_opts_chain_classic:OK #249 tc_opts_delete_empty:OK #250 tc_opts_demixed:OK #251 tc_opts_detach:OK #252 tc_opts_detach_after:OK #253 tc_opts_detach_before:OK #254 tc_opts_dev_cleanup:OK #255 tc_opts_invalid:OK #256 tc_opts_mixed:OK #257 tc_opts_prepend:OK #258 tc_opts_replace:OK #259 tc_opts_revision:OK Summary: 16/0 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/r/20230804131112.11012-2-daniel@iogearbox.net Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
This commit is contained in:
committed by
Martin KaFai Lau
parent
d210f9735e
commit
21ce6abe17
@@ -2237,3 +2237,34 @@ void serial_test_tc_opts_detach_after(void)
|
||||
test_tc_opts_detach_after_target(BPF_TCX_INGRESS);
|
||||
test_tc_opts_detach_after_target(BPF_TCX_EGRESS);
|
||||
}
|
||||
|
||||
static void test_tc_opts_delete_empty(int target, bool chain_tc_old)
|
||||
{
|
||||
LIBBPF_OPTS(bpf_tc_hook, tc_hook, .ifindex = loopback);
|
||||
LIBBPF_OPTS(bpf_prog_detach_opts, optd);
|
||||
int err;
|
||||
|
||||
assert_mprog_count(target, 0);
|
||||
if (chain_tc_old) {
|
||||
tc_hook.attach_point = target == BPF_TCX_INGRESS ?
|
||||
BPF_TC_INGRESS : BPF_TC_EGRESS;
|
||||
err = bpf_tc_hook_create(&tc_hook);
|
||||
ASSERT_OK(err, "bpf_tc_hook_create");
|
||||
__assert_mprog_count(target, 0, true, loopback);
|
||||
}
|
||||
err = bpf_prog_detach_opts(0, loopback, target, &optd);
|
||||
ASSERT_EQ(err, -ENOENT, "prog_detach");
|
||||
if (chain_tc_old) {
|
||||
tc_hook.attach_point = BPF_TC_INGRESS | BPF_TC_EGRESS;
|
||||
bpf_tc_hook_destroy(&tc_hook);
|
||||
}
|
||||
assert_mprog_count(target, 0);
|
||||
}
|
||||
|
||||
void serial_test_tc_opts_delete_empty(void)
|
||||
{
|
||||
test_tc_opts_delete_empty(BPF_TCX_INGRESS, false);
|
||||
test_tc_opts_delete_empty(BPF_TCX_EGRESS, false);
|
||||
test_tc_opts_delete_empty(BPF_TCX_INGRESS, true);
|
||||
test_tc_opts_delete_empty(BPF_TCX_EGRESS, true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user