问题标签 [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.

0 投票
1 回答
1140 浏览

ebpf - 使用 attach_xdp,标志是否控制模式?

当我将 xdp 与 eBPF 一起使用时,我想我可以使用 ip link 来设置模式。

例如,

我想知道 xdpoffload 或通用或本机模式是如何在代码中实现的。

所以我在看其他代码,我发现了类似的东西:

我假设标志是设置模式标志的位置?

如果有人能告诉我这是否属实,如果是,我可以使用哪些数字来选择该选项,那就太好了。

非常感谢您提前。

0 投票
1 回答
533 浏览

c++ - Ebpf:助手的未定义符号

我运行最新的 debian 测试(使用内核 4.19)。

在我的系统上找不到助手(但它们存在于标题中,Qt 跳转到它们)

编译结果为

编译

结果相同

我也安装了 libbpf-dev 并且我有相关的库(一个等等)。

怎么了?

更新

即使下面的代码也行不通

结果是

更新2:

顺便说一句,密钥大小被规定为 4 而不是 1;但除此之外,这与我的问题无关。

0 投票
0 回答
540 浏览

python - 为什么我被迫使用原始套接字来编写带有 BCC 的 ebpf 程序?

目标:编写一个不需要高权限的 eBPF 包过滤程序。

问题:据我了解,我必须使用attach_raw_socket函数将过滤器附加到接口。此函数调用bpf_open_raw_socklibbpf 函数,该函数打开需要高权限的 raw_socket ( https://github.com/iovisor/bcc/blob/10dae9eac33287c1df9e6645933b608c2d2c5640/src/cc/libbpf.c#L674-L678 )。

问题:有没有办法将 ebpf 过滤器附加到另一种套接字类型,例如 SOCK_DGRAM(可以使用 cBPF)?

0 投票
1 回答
672 浏览

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 上测试。

0 投票
1 回答
911 浏览

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 获取内核中的堆栈跟踪地址?

提前致谢

0 投票
1 回答
900 浏览

c - 为什么 samples/bpf 中的 ebpf 程序不起作用?

目标:在 4.18.0 内核源代码树的目录中编写一个新ebpf示例,编译并执行它。samples/bpf

问题:在我运行sudo ./mine它编译后它就终止了。

mine_kern.c

mine_user.c

我还修改了Makefile内部samples/bpf添加mine_user.cmine_kern.c需要的地方。 问题:这段代码有什么问题?

0 投票
1 回答
482 浏览

kernel - 在内核树外编译 ebpf _kern.c 并将独立的 libbpf 链接到 _user.c

目标:在内核树之外构建一个 ebpf 程序,使用独立libbpfclang

问题:我遵循了这些步骤

1) 构建libbpf

bpf_helpers.h2)从我的内核 src复制/tools/testing/selftests/bpf/bpf_helpers.h

3)编译

但结果我有很多与bpf_helpers.h内容有关的错误。例如

mine_kern.c

问题:

项目树是:

我该如何解决这个错误?修复后足以编译_user.c和链接?gcc-L../libbpf/srclibbpf.so

0 投票
2 回答
370 浏览

bpf - XDP 卸载模式标志集不适用于密件抄送

我正在尝试运行密件抄送中提供的本教程 XDP 代码。

我使用的代码是这个脚本:bcc/examples/networking/xdp/xdp_drop_count.py

据我了解,XDP 标志的工作方式如下(来自那个问题):

那么,这是否意味着如果我将标志位更改为

我应该能够以硬件加速模式(卸载)运行此代码吗?

我有一个支持 XDP HW 加速模式的网卡,当我只用一行代码附加一个简单的程序时它工作正常:

ip link set dev interface xdpoffload并通过使用等以卸载模式附加它。

所以我已经确认我的 NIC 能够加载卸载的 XDP 程序,但是当我尝试上述操作时,它给了我一个错误:

另外,当我将标志设置为:

我不确定这是否真的在驱动程序模式下运行 XDP 程序。

我错过了什么吗?

先感谢您。

0 投票
0 回答
70 浏览

bpf - 使用 BPF 获取 XFRM 状态

bpf 辅助函数 bpf_skb_get_xfrm_state() 是否假设适用于使用传输模式的 ipsec 或仅适用于隧道模式?

当接收到 ESP 数据包但相应 SPI 不存在 SA/SP 时,bpf 是否有可能即时创建新的 SA/SP(传输模式),前提是创建所需的所有必要信息在bpf 程序?

0 投票
0 回答
84 浏览

ebpf - 使用在 prog_kern.c ebpf

我已经看到,ebpf 程序不是使用#include <stddef.h>来访问offsetof宏,而是有条件地在prog_kern.c文件中定义宏。包含 stddef.h 是错误的prog_kern.c吗?如果是,我为什么要避免它?