问题标签 [xdp-bpf]

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 投票
2 回答
60 浏览

c - 即使在访问之前进行了检查,对数据包的访问也无效

即使在访问数据包中的字节之前我正在执行检查,我invalid access to packet还是从 eBPF 验证程序中获取信息。偏移量存储在BPF_MAP_TYPE_ARRAY. 循环迭代的次数无关紧要,因为即使我进行一次迭代也会发生这个问题。

这是错误。错误发生在if (data[pkt_ctx->pkt_offset + j] == '\r') {j = 0 时。

即使pkt_ctx->pkt_offset == 0xffff,访问前的 if 条件也应该阻止访问数据包前 0xffff 字节之外的字节。

0 投票
1 回答
37 浏览

c - 未调用 BPF 尾调用

在以下代码中,BPF 程序tail_prog没有从以下位置调用 tail main_prog

我观察到只有 print inmain_prog被打印出来。

我正在使用Cilium 的 eBPF Go 包加载 BPF 程序。这是加载程序和地图的代码:

据此,跳转表已从用户空间初始化,这是我认为上面的最后一行应该做的但是,我看不出那条线是否存在有任何区别。

0 投票
0 回答
29 浏览

c - 使用 bcc 和 xdp 更新目标端口

我正在容器中的端口 80 中运行应用程序。现在我想通过使用端口 90 来调用它,xdp 会将端口从 90 更改为 80。但是由于某种原因,我得到了任何响应,或者服务器也没有得到任何调用。这是我的 ebf 代码:

仅供参考,我正在使用 bcc 库并在那里创建了一个问题。任何建议将不胜感激。 https://github.com/iovisor/bcc/issues/3829

注意:我使用的是环回lo接口。

0 投票
0 回答
26 浏览

ebpf - 对于 XDP 编程,是否有一个很好的实现来从 TCP 消息中提取有效载荷的内容

对于XDP编程,有没有很好的从TCP报文中提取payload内容的实现。我想得到HTTP报文中的传输数据内容,做一些分析。我想知道如何获取这部分内容和有没有好的代码已经实现了。谢谢!

0 投票
1 回答
57 浏览

go - 无法卸载 BPF 程序

我无法从代码中卸载 BPF 程序。我正在使用Cilium eBPF 库加载程序和netlink以将 BPF 函数添加到接口。这就是我正在做的事情:

即使我正在关闭程序,bpftool prog仍然 xdp-loader status显示 BPF 程序。bpftool我可以使用或卸载程序xdp-loader

0 投票
0 回答
55 浏览

go - 无法在 SKB 模式下卸载/取消固定/分离 BPF 映射和程序

在 SKB 模式下加载 XDP 程序时,我无法从代码中删除任何地图和某些程序。我无法删除这些相同的 BPF 实体bpftool。这是我清理实体的代码:

在我用于开发的 VM 上,我只需要调用 donetlink.LinkSetXdpFd(link, -1)来清理所有内容。但是,当我在目标服务器上运行时,我观察到该程序collect_ips_prog仍在加载,并且没有删除任何地图:

collect_ips_prog是我使用加载到界面的唯一程序netlink.LinkSetXdpFdWithFlags。我用代码填充其他两个程序jump_table。程序退出后,jump_table 映射为空:

如果我这样做,程序仍然存在bpftool net detach xdp dev eth0。没有错误/错误代码。

我在驱动程序模式下加载 XDP 程序时没有这个问题。

服务器运行的是 CentOS 7,我用 5.16.7-1.el7.elrepo.x86_64 替换了内核。我的 NIC 是 Mellanox MT28800 系列 [ConnectX-5 Ex]。

0 投票
1 回答
42 浏览

go - xdpoffload 附加失败:参数无效

当我尝试在 XDP 卸载模式下附加 BPF 程序时,我得到Invalid argument. 如果通过代码附加或使用bpftool. 这是我使用netlink附加的方式:

从使用bpftool

我在驱动程序模式下加载程序没有任何问题,其中4传递给LinkSetXdpFdWithFlags.

我的网卡 Mellanox MT28800 系列 [ConnectX-5 Ex] 应该支持硬件卸载。

我的主要 XDP 程序调用两个不同的尾部程序。我用BPF_MAP_TYPE_RINGBUF, BPF_MAP_TYPE_PROG_ARRAY, and BPF_MAP_TYPE_ARRAY.

0 投票
0 回答
15 浏览

linux - 无法安装 libxdp-devel

我正在尝试在 CentOS-8 上安装 libxdp-devel 软件包,但我不断收到错误消息“错误:无法找到匹配:libxdp-devel”

我还修改了 /etc/yum.repos/CentOS-Linux-Devel.repo 和 /etc/yum.repos/CentOS-Linux-PowerTools.repo 中的文件以允许使用 baseurl,并且我还将启用的变量从 enabled= 更改为0 到启用 = 1。

但是我仍然无法安装 libxdp-devel。有人可以帮忙吗!

0 投票
0 回答
63 浏览

c - 从环形缓冲区读取时删除 BPF 尾部程序

我观察到,如果我在尾部程序中写入环形缓冲区并从用户空间读取环形缓冲区,尾部程序最终会被删除。尾部程序不再出现在bpftool prog. bpftool map dump name jump_table说它Found 0 elements;它最初有 1 个元素,尾部程序。

这个 BPF 程序由main_prog调用一个尾部程序组成。尾部程序写入0环形缓冲区。

这个 Go 程序加载程序和映射并从环形缓冲区读取:

当我向接口发送流量时遇到了问题。reader.Read()从不返回错误并且返回的Record对象有0. 因为跳转表是空的,所以尾调用失败,我bpf_printk在内核日志中看到了输出。

如果注释掉下面的代码A并将其替换为无限等待,例如select {},我不会遇到问题。

作为参考,等效的 C 程序可以正常工作。我正在使用 libbpf 0.7:

0 投票
1 回答
14 浏览

xdp-bpf - 用户是否需要更改套接字类型才能使用 XDP?

如果我们想绕过内核网络堆栈,看起来我们必须使用 AF_XDP 套接字。

这是否意味着我们必须修改用户空间程序?

但是APK这么多,这么多APK配合修改难吗?

个人感觉应用场景非常有限。