问题标签 [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 投票
0 回答
249 浏览

ebpf - stdio.h 标头不适用于 eBPF 内核程序

我正在尝试查看是否可以将 stdio.h 与阻止每个数据包的简单 XDP 代码一起使用。

这段代码可以在没有的情况下工作,stdio.h但是当我尝试使用以下代码编译它时它不会编译:

我在想也许编译器找不到系统头文件的目录所以我也试过:

我认为应该指定系统头文件的位置。

我不知道怎么了:(

0 投票
1 回答
706 浏览

ebpf - 如何使用 iproute2 将 XDP 程序导入内核?

我正在使用“ip link”命令将 xdp 程序放入内核,在我的虚拟机中(内核版本:4.18)

像这样的命令:

但是在这个命令之后,错误说:

我应该怎么做才能解决这个问题?

0 投票
2 回答
204 浏览

c - 将数据连续写入文件的 C 最快方法

我有一个由一些数据包统计信息组成的字符串,例如数据包长度等。

我想将其存储到 csv 文件中,但如果我使用标准 fprintf 写入文件,它的写入速度非常慢,我最终会丢失信息。

如何尽快将信息写入文件,以尽量减少数据包中的信息丢失。理想情况下,我希望每秒支持数百万个数据包,这意味着我需要每秒写入数百万行。

我正在使用 XDP 获取数据包信息并通过 eBPF 映射将其发送到用户空间,如果这很重要的话。

0 投票
0 回答
133 浏览

c - 如何设置 XDP 挂钩使用的内核/线程数?

我在用户端使用多生产者单消费者实现来处理来自 XDP 挂钩的 eBPF 映射的传入数据。

但是,为了做到这一点,我需要将 XDP 挂钩用于向用户空间发送信息的核心数量限制为 1。

我们有办法做到这一点吗?

我正在使用 BPF_MAP_TYPE_PERF_EVENT_ARRAY,并通过 bpf_prog_load_xattr 和 bpf_set_link_xdp_fd 挂钩 kern 代码。

这是加载钩子的函数。

这是它被使用的地方。

0 投票
0 回答
145 浏览

c - 获取用户空间中 XDP 钩子的 PID

我在用户端使用多生产者单消费者实现来处理来自 XDP 挂钩的 eBPF 映射的传入数据。

但是,为了做到这一点,我需要将 XDP 挂钩用于向用户空间发送信息的核心数量限制为 1。据我了解,这样做的唯一方法是以如下方式设置其亲和力:

但是,我不知道如何获取我的钩子的 PID,以便我可以做到这一点。

我正在使用,并通过和BPF_MAP_TYPE_PERF_EVENT_ARRAY挂钩紧缩代码。bpf_prog_load_xattrbpf_set_link_xdp_fd

这是加载钩子的函数。

这是它被使用的地方。

0 投票
1 回答
85 浏览

c - 如何正确利用掩码将索引信息发送到 perf 事件输出?

根据此处找到的 bpf_perf_event_output 文档:http: //man7.org/linux/man-pages/man7/bpf-helpers.7.html

“这些标志用于指示映射中必须为其放置值的索引,并用 BPF_F_INDEX_MASK 屏蔽。”

在以下代码中:

它可以按您的预期工作,并存储给定 CPU 编号的信息。但是,假设我希望将所有数据包发送到索引 1。

我交换

为了

代码正确编译并且没有抛出错误,但是根本没有数据包被保存。如果我希望将所有数据包都发送到索引 1,我做错了什么?

0 投票
1 回答
242 浏览

c - xdp 代码计算 icmp 校验和的验证程序失败?

我正在使用 xdp(使用 XDP_TX 操作)来构造一个 icmp resv 数据包。

linux:centos8

内核 4.18.0-80.el8.x86_64

llvm:7.0.1

clang:clang 版本 7.0.1 (tags/RELEASE_701/final)

这是我的代码:

但是编译结果告诉我“验证器失败”:

错误:

0 投票
0 回答
233 浏览

linux - AF_XDP 不适用于内核`4.18.0-25-generic`

我目前正在尝试从这里运行 AF_XDP-Tutorial:https ://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP

我能够编译它,但如果我尝试通过以下方式将 xdp 代码放入内核:

我收到此错误:

ERROR: Can't setup AF_XDP socket "Operation not permitted"

然后我检查了内核标志

CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_XDP_SOCKETS=y

/boot/config-4.18.0-25-generic他们都在那里。

因此,下一步,我尝试不使用存储库libbpf中的 -submodule编译程序xdp-tutorial,而是使用此处的最新版本:https ://github.com/libbpf/libbpf/tree/master/src

但是现在,如果我尝试编译程序,我会得到以下输出:

cc -Wall -I../libbpf/src/build/usr/include/ -g -I../headers/ -L../libbpf/src -o af_xdp_user ../common/common_libbpf.o ../common /common_params.o ../common/common_user_bpf_xdp.o \af_xdp_user.c -l:libbpf.a -lelf -lpthread /usr/bin/ld: ../libbpf/src/libbpf.a(libbpf.o): 未定义引用符号 'gzopen64@@ZLIB_1.2.3.3' /usr/bin/ld: //lib/x86_64-linux-gnu/libz.so.1: 添加符号时出错:命令行中缺少 DSO

有谁能帮忙吗?

编辑:

输出sudo strace ./af_xdp_user --dev veth-basic02 --force

https://pastebin.com/Pyj3NJ2m

Edit_2:自从创建这篇文章以来,我升级到内核5.3.0-28- 但不幸的是没有任何改变

0 投票
1 回答
1681 浏览

linux - XDP 程序 ip 链接错误:Prog 部分被拒绝:不允许操作

我尝试进入XDP,为此我有一个非常小的程序:

但是,如果我尝试将其加载到虚拟接口veth-basic02中,则会出现此错误:

$ sudo ip -force link set dev veth-basic02 xdp object xdpsock_kern.o section xdp_sock

Prog 部分“xdp_sock”被拒绝:不允许操作 (1)!- 类型:6 - 说明:2(0 超限) - 许可证:

验证者分析:

获取程序/地图时出错!

内核版本:5.3.0-28-generic

这是我正在使用的 Makefile:

封锁:

编辑: ++echo 1 > /proc/sys/kernel/sysrq确实解决了问题——我终于可以加载 XDP 程序了!不过有趣的复活节彩蛋。谢谢@Qeole!echo x > /proc/sysrq-triggerAlt+SysRq+x

0 投票
1 回答
221 浏览

c - AF_XDP - 用户空间程序继续接收 `ping` 数据包,即使内核中的`XDP_DROP`

我从这个存储库开始我的应用程序:https ://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP

就像“概念证明”一样,我想将提供的应用程序更改为

  • 丢弃内核程序中所有其他接收到的数据包(af_xdp_kern.c
  • 回复从用户空间收到的 ping 请求 ( af_xdp_user.c)

我希望在执行 ping 的控制台窗口中看到的内容:

  • 对每第二个 ping 请求的响应(例如,仅偶数或仅奇数序列号)

我注意到的是:

  • 每个 ping 请求的响应

为了进一步调查,我用一个简单的内核程序替换了内核程序return XDP_DROP;——据我所知,这意味着用户空间程序不应该接收任何数据包。

但不知何故,我仍然看到我发送的每个 ping 的响应。

我的内核程序:

用户空间程序:https ://github.com/xdp-project/xdp-tutorial/blob/master/advanced03-AF_XDP/af_xdp_user.c (删除if (false)287

有什么想法有什么问题吗?

编辑: