当在内核中同时加载多个ebpf钩子(不使用链接)时,我对ebpf行为有一个基本问题。所有这些钩子都被调用了吗?例如,我加载了带有cgroup_skb/ingress钩子的ebpf程序。由我的程序加载的ebpf钩子函数在数据包进入过程中不会被内核调用。当我列出在“Linux5.13.0-30-Generic”上加载的程序时,我看到systemd默认已经加载了cgroup_skb/ingress挂钩。我理解为什么这些cgroup/skb钩子是由systemd加载的。我的问题是在加载相同类型的多个钩子(cgroup_skb/ingress)时内核的行为。
发布于 2022-03-09 15:47:26
是。所有的钩子都会被调用。我们需要附加“多”关键字。
测试1.o /sys/fs/bpf/test1 1类型cgroup/skb
bpftool附加/sys/fs/ cgroup /mygrp/mygrp /sys/fs/bpf/test1 1 multi
测试2.o /sys/fs/bpf/test2 2类型cgroup/skb
bpftool附加/sys/fs/ cgroup /mygrp/mygrp /sys/fs/bpf/test2 2 multi
我的简单程序具有不同的调试打印语句(test2.c):SEC("cgroup/skb") int cgrp_dump_pkt(struct __sk_buff *skb) {
bpf_printk("welcome test 2");
return 1;}
平-446804,000天.374792.037025: bpf_trace_printk:欢迎测试1
平-446804,000天.374792.037038: bpf_trace_printk:欢迎测试2
https://stackoverflow.com/questions/71406075
复制相似问题