问题标签 [ebpf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ebpf - 使用 attach_xdp,标志是否控制模式?
当我将 xdp 与 eBPF 一起使用时,我想我可以使用 ip link 来设置模式。
例如,
我想知道 xdpoffload 或通用或本机模式是如何在代码中实现的。
所以我在看其他代码,我发现了类似的东西:
我假设标志是设置模式标志的位置?
如果有人能告诉我这是否属实,如果是,我可以使用哪些数字来选择该选项,那就太好了。
非常感谢您提前。
c++ - Ebpf:助手的未定义符号
我运行最新的 debian 测试(使用内核 4.19)。
在我的系统上找不到助手(但它们存在于标题中,Qt 跳转到它们)
编译结果为
编译
结果相同
我也安装了 libbpf-dev 并且我有相关的库(一个等等)。
怎么了?
更新
即使下面的代码也行不通
结果是
更新2:
顺便说一句,密钥大小被规定为 4 而不是 1;但除此之外,这与我的问题无关。
python - 为什么我被迫使用原始套接字来编写带有 BCC 的 ebpf 程序?
目标:编写一个不需要高权限的 eBPF 包过滤程序。
问题:据我了解,我必须使用attach_raw_socket
函数将过滤器附加到接口。此函数调用bpf_open_raw_sock
libbpf 函数,该函数打开需要高权限的 raw_socket ( https://github.com/iovisor/bcc/blob/10dae9eac33287c1df9e6645933b608c2d2c5640/src/cc/libbpf.c#L674-L678 )。
问题:有没有办法将 ebpf 过滤器附加到另一种套接字类型,例如 SOCK_DGRAM(可以使用 cBPF)?
python - eBPF:读取 getaddrinfo 的结果
与 BPF 编译器集合 (bcc) 中的gethostlatency.py工具类似,我想跟踪对getaddrinfo
. 另外,我想收集返回值(IP 地址、地址族)
但是,我似乎无法通过 BPF 验证程序返回正确结果的解决方案。
getaddrinfo 函数:
结果以struct addrinfo **res
.
此代码示例直接基于gethostlatency.py至少不会返回任何错误,而是返回错误的结果:
可能出错的事情:
- 我复制了
addrinfo
类型定义,netdb.h
因为它在密件抄送中似乎无法访问。 - 我收集结果的方式:
currres.update(&pid, &res);
- 我从结果中读取的方式:
bpf_probe_read(&data.af, sizeof(data.af), &resx->ai_family);
在这个示例中,程序只是试图读取地址族(AF)。因此,预期值将是 2 (AF_INET) 或 10 (AF_INET6),而不是显示像 32xxx 这样的数字。
要触发输出,必须发出 DNS 请求。
上面的这个程序版本也显示了一个警告:
解决警告会导致 BPF 验证器中出现更多神秘错误。
使用内核版本 4.18 在 x64 上测试。
c - 如何在 ebpf 中读取堆栈跟踪内核端?
我想用堆栈中的地址过滤我的 ebpf,例如,如果堆栈跟踪包含_do_fork
然后写入映射的地址。
我看到这个https://www.kernel.org/doc/html/latest/bpf/bpf_design_QA.html#q-can-bpf-programs-access-stack-pointer说不可能获得地址。但我也看到了这个https://www.spinics.net/lists/netdev/msg497159.html “bpf 程序能够看到所有堆栈跟踪,然后可以进行内核处理或通过将堆栈跟踪发送到用户空间”。所以我很困惑。最后一个问题是如果可能的话,我们如何使用 bpf_get_stack 获取内核中的堆栈跟踪地址?
提前致谢
c - 为什么 samples/bpf 中的 ebpf 程序不起作用?
目标:在 4.18.0 内核源代码树的目录中编写一个新ebpf
示例,编译并执行它。samples/bpf
问题:在我运行sudo ./mine
它编译后它就终止了。
mine_kern.c
mine_user.c
我还修改了Makefile
内部samples/bpf
添加mine_user.c
和mine_kern.c
需要的地方。
问题:这段代码有什么问题?
kernel - 在内核树外编译 ebpf _kern.c 并将独立的 libbpf 链接到 _user.c
目标:在内核树之外构建一个 ebpf 程序,使用独立libbpf
和clang
问题:我遵循了这些步骤
1) 构建libbpf
bpf_helpers.h
2)从我的内核 src复制/tools/testing/selftests/bpf/bpf_helpers.h
3)编译
但结果我有很多与bpf_helpers.h
内容有关的错误。例如
mine_kern.c
问题:
项目树是:
我该如何解决这个错误?修复后足以编译_user.c
和链接?gcc
-L../libbpf/src
libbpf.so
bpf - XDP 卸载模式标志集不适用于密件抄送
我正在尝试运行密件抄送中提供的本教程 XDP 代码。
我使用的代码是这个脚本:bcc/examples/networking/xdp/xdp_drop_count.py。
据我了解,XDP 标志的工作方式如下(来自那个问题):
那么,这是否意味着如果我将标志位更改为
我应该能够以硬件加速模式(卸载)运行此代码吗?
我有一个支持 XDP HW 加速模式的网卡,当我只用一行代码附加一个简单的程序时它工作正常:
ip link set dev interface xdpoffload
并通过使用等以卸载模式附加它。
所以我已经确认我的 NIC 能够加载卸载的 XDP 程序,但是当我尝试上述操作时,它给了我一个错误:
另外,当我将标志设置为:
我不确定这是否真的在驱动程序模式下运行 XDP 程序。
我错过了什么吗?
先感谢您。
bpf - 使用 BPF 获取 XFRM 状态
bpf 辅助函数 bpf_skb_get_xfrm_state() 是否假设适用于使用传输模式的 ipsec 或仅适用于隧道模式?
当接收到 ESP 数据包但相应 SPI 不存在 SA/SP 时,bpf 是否有可能即时创建新的 SA/SP(传输模式),前提是创建所需的所有必要信息在bpf 程序?
ebpf - 使用在 prog_kern.c ebpf
我已经看到,ebpf 程序不是使用#include <stddef.h>
来访问offsetof
宏,而是有条件地在prog_kern.c
文件中定义宏。包含 stddef.h 是错误的prog_kern.c
吗?如果是,我为什么要避免它?