当调用内核中的net_ns_net_exit函数时,我希望创建一个记录消息的程序。
SEC("fexit/net_ns_net_exit")
int BPF_PROG(net_ns_net_exit, struct net *net, long ret)
#endif
{
__u64 netns_inum = BPF_CORE_READ(net, ns.inum);
debugf("removing: netns_inum: %u", netns_inum);
return 0;
}bpftool v7.0.0
using libbpf v1.0
features: libbfd, libbpf_strict, skeletons我正在构建在Ubuntu22.04内核5.15.0-52-通用,AMD。该程序在这台机器上运行良好,但是当我尝试在GCP上运行内核版本5.10.133+时,它会出现错误:
libbpf: failed to find kernel BTF type ID of 'net_ns_net_exit': -3
libbpf: prog 'net_ns_net_exit': failed to prepare load attributes: -3
libbpf: prog 'net_ns_net_exit': failed to load: -3
libbpf: failed to load object 'remove_net_ns'
libbpf: failed to load BPF skeleton 'remove_net_ns': -3
loading remove_net_ns skeleton failed with error: -3我检查了vmlinux在机器上是否可用,我发现两者都是: GCP和本地ubuntu有:/sys/kernel/btf/vmlinux。我已经检查了VM上的内容(使用vim),我注意到我的VM有net_ns_net_exit,但是GCP没有,我不确定它是否相关,以及它是如何工作的。方法:net_ns_net_exit很久以前就引入到内核中了,所以我希望它应该是可用的。也许有人有这个问题,并有一些建议或知道如何处理这个问题?
发布于 2022-10-24 18:56:03
fexit挂钩点不提供稳定的API。因此,如果您试图跟踪的函数是内联的(就像GCP内核中的情况一样),那么您唯一的选择就是找到另一个提供相同信息的函数。
https://stackoverflow.com/questions/74144137
复制相似问题