问题标签 [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 回答
531 浏览

linux - 尝试在我的设备驱动程序上运行 XDP 时出错

我试图弄清楚如何运行 XDP 代码:

我正在尝试让 XDP 丢弃所有数据包。所以我将其编译为:

我的接口名称是enp5s0。

因此,我尝试通过键入以下内容将代码附加到该界面:

然后我收到以下错误:

而且我不知道出了什么问题..我正在尝试使用XDP,并且我已经尝试解决此问题三天但没有结果..如果你们能提供帮助,我将不胜感激我出去!

0 投票
1 回答
923 浏览

linux - 尝试学习eBPF尾调用,无法附加kprobe

嗨,我正在尝试学习如何使用 eBPF 地图,因此我尝试运行在 BCC 文档上找到的简单代码。

这是我使用的 c 代码,名称为 :tailcall_test.c :

我不太确定需要包含哪些头文件或库,所以我把所有东西都扔在那里了。对脏代码感到抱歉:(

无论如何,当我尝试运行它时它给了我这个错误:

任何帮助..?非常感谢你。

另外,如果你们有任何建议可以检查以了解如何使用 eBPF 尾调用,如果你们能与我分享,我将不胜感激。

提前非常感谢。

0 投票
1 回答
263 浏览

ebpf - 是否可以尾调用使用不同模式的 eBPF 代码?

是否可以尾调用使用不同模式的 eBPF 代码?

例如,如果我使用 kprobe 编写了 printk("hello world") 的代码,

之后我是否可以尾调用 XDP 代码,反之亦然?

我在 eBPF 上编写了一些使用套接字缓冲区的程序,似乎当我尝试尾调用另一个使用 kprobe 的代码时,它不会加载程序。

我想在使用 BPF.SOCKET_FILTER 模式后尾调用使用 XDP_PASS 的代码,但似乎尾调用不起作用。

我一直试图弄清楚这一点,但我找不到任何关于使用不同模式的尾调用代码的文档:P

提前致谢!

0 投票
1 回答
663 浏览

c - 即使使用了 pragma unroll,BPF 验证程序也会由于后沿而拒绝 XDP 程序

因此,根据标题,我正在尝试加载 XDP 程序,但令人惊讶的是,bpf 验证程序会以著名的后端错误向我吐口水:

尽管在我受限的 ebpf C 代码中唯一的 for 循环(在编译时已知迭代次数)是由pragma unroll. __alwais_inline这是一个代码片段,显示了在d 函数中定义的受影响的 for 循环:

也许问题在于clang无法展开循环?如果这是正确的,为什么它会失败,有什么解决方法吗?手动展开循环是不可接受的,因为它会导致可怕的、不可维护的和不可读的代码。

哦,我正在与:

  • 内核 4.19.3
  • llvm-clang 8

有什么想法吗?

更新
刚刚注意到,即使是下面的虚拟 for 循环似乎也没有展开,bpf 验证器抱怨后端:

难道只有我,因为这没有任何意义吗?

0 投票
1 回答
1583 浏览

c - 无法在 Raspberry Pi 上加载 eBPF/XDP 代码

主要问题是我无法在网络接口 (XDP) 中加载 eBPF 代码。

我正在尝试使用以下配置在 Raspberry Pi 3 上加载:

  • Raspbian GNU/Linux 10 (Buster)
  • 内核 4.19.50-v7+

我正在使用 ip 命令如下:

在此之前,我通过apt执行了 clang-7 安装,并且make命令正常工作(生成对象)。

Makefile源代码如下:

以及预计要加载的portfilter.c源代码:

不幸的是,ip命令后的实际输出如下:

但预期的结果是模块在网络接口中正确加载。

此代码在带有内核 4.15.0-54-generic 的 Ubuntu 18 笔记本电脑上运行

拜托,有人知道如何正确配置树莓派以使用此代码吗?

0 投票
1 回答
180 浏览

bpf - 我尝试使用 eBPF 访问 iphdr 时出错

所以我一直在尝试使用 eBPF 访问 iphdr。

当我在 eBPF 函数中使用上面的代码时,它可以正常工作:

像这样,调用 parse_ipv4 函数有效。

但是,如果我尝试不使用该函数直接访问 ipheader,它就不起作用。

这给了我一个错误:提示:如果您尝试取消引用内存而不先使用 bpf_probe_read() 将其复制到 BPF 堆栈,则可能会发生无效的内存访问“inv”错误。有时 bpf_probe_read 由 bcc 重写器自动执行,有时您需要明确。

并且无法激活。

非常感谢您!

0 投票
1 回答
1225 浏览

linux - 从内核树编译 eBPF C 代码时出错

我正在尝试将用 C 编写的 BPF 程序构建到加载它所需的 bpf 字节码中。我用这篇文章试图让我开始:https ://blogs.oracle.com/linux/notes-on-bpf-4

由于库依赖性,我不想使用 BCC。我正在使用 ubuntu 18.04(Linux bpf-ubuntu 4.15.0-1036-gcp #38-Ubuntu SMP Mon Jun 24 13:49:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux)

目前我的文件非常简单(并且可能不正确),因为我仍在尝试编译工作:

用于构建和结果的命令是:

我不确定如何解决这个问题。我只能假设我包含标题的方式不正确。

0 投票
1 回答
863 浏览

packet - 在ebpf中编写包过滤程序

如果我想编写一个过滤 icmp 数据包的 cBPF 程序,我可以通过执行tcpdump选项-ddwhich

将数据包匹配代码转储为 C 程序片段。

..见下面的例子

如何使用 eBPF 指令编写相同的程序?

0 投票
1 回答
489 浏览

c - BPF:结构__skbuff中的标记不可写?

我有一个 BPF 代码(“ classifier”部分)。我使用它来使用 tc(流量控制器)实用程序加载到接口。我的代码更改了__skbuff. 后来当我尝试使用 iptables 捕捉这个标记时,我发现我编辑的标记已经消失了。

代码:

我使用 iptable mangle 表的以下规则来查看标记是否正确写入。

以下是我用来加载 bpf 程序的 TC 命令;

0 投票
1 回答
1782 浏览

ebpf - 异常:执行 sudo opensnoop-bpfcc 时无法将 BPF 附加到 kprobe

当我尝试执行时,sudo opensnoop-bpfcc我收到此消息:

我不明白如何解决它。我刚刚使用此命令安装了密件抄送工具

正如github页面上的建议https://github.com/iovisor/bcc/blob/master/INSTALL.md#ubuntu---binary

正在运行的操作系统是 18.04.2 LTS(仿生海狸)。