mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 12:33:18 -04:00
selftests/bpf: Test attaching bpf qdisc to mq and non root
Until we are certain that existing classful qdiscs work with bpf qdisc, make sure we don't allow attaching a bpf qdisc to non root. Meanwhile, attaching to mq is allowed. Signed-off-by: Amery Hung <ameryhung@gmail.com> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Acked-by: Toke Høiland-Jørgensen <toke@redhat.com> Link: https://patch.msgid.link/20250409214606.2000194-11-ameryhung@gmail.com
This commit is contained in:
committed by
Martin KaFai Lau
parent
2b59bd9e4e
commit
2b7b5b7f10
@@ -74,6 +74,7 @@ CONFIG_NET_MPLS_GSO=y
|
||||
CONFIG_NET_SCH_BPF=y
|
||||
CONFIG_NET_SCH_FQ=y
|
||||
CONFIG_NET_SCH_INGRESS=y
|
||||
CONFIG_NET_SCH_HTB=y
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NETDEVSIM=y
|
||||
CONFIG_NETFILTER=y
|
||||
|
||||
@@ -88,6 +88,77 @@ static void test_fq(void)
|
||||
bpf_qdisc_fq__destroy(fq_skel);
|
||||
}
|
||||
|
||||
static void test_qdisc_attach_to_mq(void)
|
||||
{
|
||||
DECLARE_LIBBPF_OPTS(bpf_tc_hook, hook,
|
||||
.attach_point = BPF_TC_QDISC,
|
||||
.parent = TC_H_MAKE(1 << 16, 1),
|
||||
.handle = 0x11 << 16,
|
||||
.qdisc = "bpf_fifo");
|
||||
struct bpf_qdisc_fifo *fifo_skel;
|
||||
struct bpf_link *link;
|
||||
int err;
|
||||
|
||||
fifo_skel = bpf_qdisc_fifo__open_and_load();
|
||||
if (!ASSERT_OK_PTR(fifo_skel, "bpf_qdisc_fifo__open_and_load"))
|
||||
return;
|
||||
|
||||
link = bpf_map__attach_struct_ops(fifo_skel->maps.fifo);
|
||||
if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
|
||||
bpf_qdisc_fifo__destroy(fifo_skel);
|
||||
return;
|
||||
}
|
||||
|
||||
SYS(out, "ip link add veth0 type veth peer veth1");
|
||||
hook.ifindex = if_nametoindex("veth0");
|
||||
SYS(out, "tc qdisc add dev veth0 root handle 1: mq");
|
||||
|
||||
err = bpf_tc_hook_create(&hook);
|
||||
ASSERT_OK(err, "attach qdisc");
|
||||
|
||||
bpf_tc_hook_destroy(&hook);
|
||||
|
||||
SYS(out, "tc qdisc delete dev veth0 root mq");
|
||||
out:
|
||||
bpf_link__destroy(link);
|
||||
bpf_qdisc_fifo__destroy(fifo_skel);
|
||||
}
|
||||
|
||||
static void test_qdisc_attach_to_non_root(void)
|
||||
{
|
||||
DECLARE_LIBBPF_OPTS(bpf_tc_hook, hook, .ifindex = LO_IFINDEX,
|
||||
.attach_point = BPF_TC_QDISC,
|
||||
.parent = TC_H_MAKE(1 << 16, 1),
|
||||
.handle = 0x11 << 16,
|
||||
.qdisc = "bpf_fifo");
|
||||
struct bpf_qdisc_fifo *fifo_skel;
|
||||
struct bpf_link *link;
|
||||
int err;
|
||||
|
||||
fifo_skel = bpf_qdisc_fifo__open_and_load();
|
||||
if (!ASSERT_OK_PTR(fifo_skel, "bpf_qdisc_fifo__open_and_load"))
|
||||
return;
|
||||
|
||||
link = bpf_map__attach_struct_ops(fifo_skel->maps.fifo);
|
||||
if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
|
||||
bpf_qdisc_fifo__destroy(fifo_skel);
|
||||
return;
|
||||
}
|
||||
|
||||
SYS(out, "tc qdisc add dev lo root handle 1: htb");
|
||||
SYS(out_del_htb, "tc class add dev lo parent 1: classid 1:1 htb rate 75Kbit");
|
||||
|
||||
err = bpf_tc_hook_create(&hook);
|
||||
if (!ASSERT_ERR(err, "attach qdisc"))
|
||||
bpf_tc_hook_destroy(&hook);
|
||||
|
||||
out_del_htb:
|
||||
SYS(out, "tc qdisc delete dev lo root htb");
|
||||
out:
|
||||
bpf_link__destroy(link);
|
||||
bpf_qdisc_fifo__destroy(fifo_skel);
|
||||
}
|
||||
|
||||
void test_bpf_qdisc(void)
|
||||
{
|
||||
struct netns_obj *netns;
|
||||
@@ -100,6 +171,10 @@ void test_bpf_qdisc(void)
|
||||
test_fifo();
|
||||
if (test__start_subtest("fq"))
|
||||
test_fq();
|
||||
if (test__start_subtest("attach to mq"))
|
||||
test_qdisc_attach_to_mq();
|
||||
if (test__start_subtest("attach to non root"))
|
||||
test_qdisc_attach_to_non_root();
|
||||
|
||||
netns_free(netns);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user