问题标签 [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.
linux - 尝试在我的设备驱动程序上运行 XDP 时出错
我试图弄清楚如何运行 XDP 代码:
我正在尝试让 XDP 丢弃所有数据包。所以我将其编译为:
我的接口名称是enp5s0。
因此,我尝试通过键入以下内容将代码附加到该界面:
然后我收到以下错误:
而且我不知道出了什么问题..我正在尝试使用XDP,并且我已经尝试解决此问题三天但没有结果..如果你们能提供帮助,我将不胜感激我出去!
linux - 尝试学习eBPF尾调用,无法附加kprobe
嗨,我正在尝试学习如何使用 eBPF 地图,因此我尝试运行在 BCC 文档上找到的简单代码。
这是我使用的 c 代码,名称为 :tailcall_test.c :
我不太确定需要包含哪些头文件或库,所以我把所有东西都扔在那里了。对脏代码感到抱歉:(
无论如何,当我尝试运行它时它给了我这个错误:
任何帮助..?非常感谢你。
另外,如果你们有任何建议可以检查以了解如何使用 eBPF 尾调用,如果你们能与我分享,我将不胜感激。
提前非常感谢。
ebpf - 是否可以尾调用使用不同模式的 eBPF 代码?
是否可以尾调用使用不同模式的 eBPF 代码?
例如,如果我使用 kprobe 编写了 printk("hello world") 的代码,
之后我是否可以尾调用 XDP 代码,反之亦然?
我在 eBPF 上编写了一些使用套接字缓冲区的程序,似乎当我尝试尾调用另一个使用 kprobe 的代码时,它不会加载程序。
我想在使用 BPF.SOCKET_FILTER 模式后尾调用使用 XDP_PASS 的代码,但似乎尾调用不起作用。
我一直试图弄清楚这一点,但我找不到任何关于使用不同模式的尾调用代码的文档:P
提前致谢!
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 验证器抱怨后端:
难道只有我,因为这没有任何意义吗?
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 笔记本电脑上运行
拜托,有人知道如何正确配置树莓派以使用此代码吗?
bpf - 我尝试使用 eBPF 访问 iphdr 时出错
所以我一直在尝试使用 eBPF 访问 iphdr。
当我在 eBPF 函数中使用上面的代码时,它可以正常工作:
像这样,调用 parse_ipv4 函数有效。
但是,如果我尝试不使用该函数直接访问 ipheader,它就不起作用。
这给了我一个错误:提示:如果您尝试取消引用内存而不先使用 bpf_probe_read() 将其复制到 BPF 堆栈,则可能会发生无效的内存访问“inv”错误。有时 bpf_probe_read 由 bcc 重写器自动执行,有时您需要明确。
并且无法激活。
非常感谢您!
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)
目前我的文件非常简单(并且可能不正确),因为我仍在尝试编译工作:
用于构建和结果的命令是:
我不确定如何解决这个问题。我只能假设我包含标题的方式不正确。
packet - 在ebpf中编写包过滤程序
如果我想编写一个过滤 icmp 数据包的 cBPF 程序,我可以通过执行tcpdump
选项-dd
which
将数据包匹配代码转储为 C 程序片段。
..见下面的例子
如何使用 eBPF 指令编写相同的程序?
c - BPF:结构__skbuff中的标记不可写?
我有一个 BPF 代码(“ classifier
”部分)。我使用它来使用 tc(流量控制器)实用程序加载到接口。我的代码更改了__skbuff
. 后来当我尝试使用 iptables 捕捉这个标记时,我发现我编辑的标记已经消失了。
代码:
我使用 iptable mangle 表的以下规则来查看标记是否正确写入。
以下是我用来加载 bpf 程序的 TC 命令;
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(仿生海狸)。