首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libbpf: CO程序fexit不能记录特定函数上的事件。

libbpf: CO程序fexit不能记录特定函数上的事件。
EN

Stack Overflow用户
提问于 2022-10-20 17:38:53
回答 1查看 45关注 0票数 0

当调用内核中的net_ns_net_exit函数时,我希望创建一个记录消息的程序。

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
bpftool v7.0.0
using libbpf v1.0
features: libbfd, libbpf_strict, skeletons

我正在构建在Ubuntu22.04内核5.15.0-52-通用,AMD。该程序在这台机器上运行良好,但是当我尝试在GCP上运行内核版本5.10.133+时,它会出现错误:

代码语言:javascript
复制
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很久以前就引入到内核中了,所以我希望它应该是可用的。也许有人有这个问题,并有一些建议或知道如何处理这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-10-24 18:56:03

fexit挂钩点不提供稳定的API。因此,如果您试图跟踪的函数是内联的(就像GCP内核中的情况一样),那么您唯一的选择就是找到另一个提供相同信息的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74144137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档