当在内核中同时加载(不使用链接(多个ebpf挂钩时,我对ebpf行为有基本的疑问。所有这些钩子都被调用了吗?例如,我加载了我的ebpf程序,该程序具有cgroup_skb/ingress钩子。我的程序加载的ebpf钩子函数在数据包进入期间不会被内核调用。当我在";Linux 5.13.0-30通用";,我看到systemd默认情况下已经加载了cgroup_skb/ingress钩子。我确实理解为什么这些cgroup/skb挂钩是由systemd加载的。我的问题特别是当加载多个相同类型的挂钩(cgroup_skb/ingress(时内核的行为。
是。所有的钩子都会被调用。我们需要附上";多";关键字。
bpftool程序加载测试1.o/sys/fs/bpf/test1类型cgroup/skb
bpftool cgroup attach/sys/fs/cgroup/mygrp egress pinned/sys/fs/bpf/test1multi
bpftool程序加载测试2.o/sys/fs/bpf/test2类型cgroup/skb
bpftool cgroup attach/sys/fs/cgroup/mygrp egress pinned/sys/fs/bpf/test2multi
我的简单程序使用不同的调试打印语句(test2.c(:SEC("cgroup/scb"(int cgrp_dump_pkt(结构__sk_buff*skb({
bpf_printk("welcome test 2");
return 1;
}
ping-446804[0000]d…374792.037025:bpf_trace_printk:欢迎测试1
ping-446804[0000]d…374792.037038:bpf_trace_printk:欢迎测试2