问题标签 [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.
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 字节之外的字节。
c - 未调用 BPF 尾调用
在以下代码中,BPF 程序tail_prog
没有从以下位置调用 tail main_prog
:
我观察到只有 print inmain_prog
被打印出来。
我正在使用Cilium 的 eBPF Go 包加载 BPF 程序。这是加载程序和地图的代码:
据此,跳转表已从用户空间初始化,这是我认为上面的最后一行应该做的。但是,我看不出那条线是否存在有任何区别。
c - 使用 bcc 和 xdp 更新目标端口
我正在容器中的端口 80 中运行应用程序。现在我想通过使用端口 90 来调用它,xdp 会将端口从 90 更改为 80。但是由于某种原因,我得到了任何响应,或者服务器也没有得到任何调用。这是我的 ebf 代码:
仅供参考,我正在使用 bcc 库并在那里创建了一个问题。任何建议将不胜感激。 https://github.com/iovisor/bcc/issues/3829
注意:我使用的是环回lo
接口。
ebpf - 对于 XDP 编程,是否有一个很好的实现来从 TCP 消息中提取有效载荷的内容
对于XDP编程,有没有很好的从TCP报文中提取payload内容的实现。我想得到HTTP报文中的传输数据内容,做一些分析。我想知道如何获取这部分内容和有没有好的代码已经实现了。谢谢!
go - 无法卸载 BPF 程序
我无法从代码中卸载 BPF 程序。我正在使用Cilium eBPF 库加载程序和netlink以将 BPF 函数添加到接口。这就是我正在做的事情:
即使我正在关闭程序,bpftool prog
仍然 xdp-loader status
显示 BPF 程序。bpftool
我可以使用或卸载程序xdp-loader
。
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]。
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
.
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。有人可以帮忙吗!
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:
xdp-bpf - 用户是否需要更改套接字类型才能使用 XDP?
如果我们想绕过内核网络堆栈,看起来我们必须使用 AF_XDP 套接字。
这是否意味着我们必须修改用户空间程序?
但是APK这么多,这么多APK配合修改难吗?
个人感觉应用场景非常有限。