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

linux - 未能创建地图:22 无效参数

我使用说明编译了此处提供的示例 bpf 程序 - https://github.com/torvalds/linux/tree/master/samples/bpf 。对于执行时的大多数程序,我收到此错误:

我已经检查了我系统上的相关 BPF 标志,并且它们设置正确。我正在使用 linux-4.17 源代码。

0 投票
1 回答
81 浏览

winpcap - 有人可以解释 BPF 中的主机参数吗

我已经为此苦苦挣扎了一段时间,我在网上找不到任何答案。查找文档并没有真正的帮助。我不明白hostBPF 代码中的参数应该代表什么或如何正确使用它。它的工作方式与 相同net吗?(不是说我知道什么net,我只是假设它们可能相似)请帮忙。

0 投票
1 回答
2522 浏览

linux - 如何列出加载到内核中的所有 bpf 程序?(例如 tc-bpf)

我知道 bpf 程序可以通过不同的方式加载到内核中,tc/kprobe/socket ...

我想知道有没有接口什么的,通过它我可以得到我加载的所有bpf程序?如果没有这样的事情,如果我单独留下一些可能会改变我的网络数据的 bpf 程序是否危险?

另一个小问题,如何卸载 tc-bpf 程序,我真的必须每次都删除 qdisc 吗?

0 投票
0 回答
346 浏览

linux - 用于用户空间范围内存泄漏检测的密件抄送工具 memleak

是否有人使用 bcc 中的 memleak 工具来分析用户空间内存分配?我一直在尝试调整它来做到这一点,但它似乎非常不可靠,即第一批未完成的分配在使用虚拟 C 应用程序测试时似乎很好,但通常在接下来的批次中,由于某种原因,条目会人为地消失/增加. 我的猜测是由于用户空间中的分配频率很高,哈希表会溢出?有没有人设法使用 ebpf(或任何其他工具)进行 mem 用户空间范围的分析?

0 投票
1 回答
159 浏览

clang - LLVM BPF 后端不会将源文件名放在符号表上

我现在正在尝试从 ELF 对象中提取源 C 文件名,该对象是由 clang 从以下 C 代码编译而来的。

当我将 amd64 指定为后端时,clang 会生成如下所示的 symtab

我们可以看到源文件名在那里。但是,当我将 BPF 指定为后端时,我会看到如下所示的输出。

我们看不到源文件名。

有谁知道为什么会这样,我该如何解决这个问题?

工作环境为 Ubuntu18.04-LTS,clang 版本为 6.0.0-1ubuntu2 (tags/RELEASE_600/final),通过 apt 安装。

0 投票
1 回答
1406 浏览

c - BPF Helper 的 eBPF 隐式声明

我在编译使用 TC 安装的 eBPF 程序时遇到问题。目前,它只执行一些基本的修改,这需要重新计算 IP 校验和。

我注意到在 BPF 助手中,有一个函数 bpf_l3_csum_replace 这似乎是我想要的。但是,当我尝试使用使用 BPF_FUNC 宏映射的任何内置函数时,我得到一个隐式声明错误:

...警告:“bpf_l3_csum_replace”的隐式声明在 C99 中无效。

随后是来自验证者的错误:

... 不支持调用全局函数 'bpf_l3_csum_replace'。只允许调用预定义的 BPF 助手。

我的编译行:

我应该注意,只要我不使用任何“预定义”的 bpf 助手,我就可以编译和安装 BPF 对象(使用 TC)。一旦我这样做,问题就会出现。

我在内核树之外做这个,FWIW。不确定这是否是一个问题。我包括了 bpf 标头(linux/bpf.h),并且我使用了 iproute2 包中的 bpf_api.h 标头(对 bpf_helpers.h 标头没有太多运气)。

我对 eBPF 还是比较陌生,所以如果我遗漏了什么,我不会感到惊讶。任何帮助,将不胜感激。

编辑:代码

0 投票
0 回答
224 浏览

linux - 如何使用 GCP 的 4.15 内核在 BPF 程序中检索当前任务的挂载命名空间?

我正在尝试在BPF 程序中检索当前任务的挂载命名空间,如下所示:

使用 Ubuntu 内核(uname -r:4.15.0-13-generic)可以正常mnt_ns_inum工作,并为主机挂载命名空间中的任务获取值 4026531840,但使用 GCP 的内核(uname -r:4.15.0-1019-gcp)运行相同的代码总是设置mnt_ns_inum为 0。

我不知道谷歌可能会改变什么来导致这种行为(我正在本地虚拟机上测试这个,所以这两种情况之间的唯一区别是我启动虚拟机的内核和用于编译的内核头文件) .

此外,同样的代码适用于 GCP 4.13 内核(uname -r:4.13.0-1008-gcp),所以这似乎是最近的变化。

编辑:

对于 4.15 GCP 内核,调用的返回值bpf_probe_read如下:

  • 0
  • 18446744073709551602
  • 18446744073709551602

正如下面评论中提到的,非零返回值对应于-EFAULT.

0 投票
1 回答
963 浏览

linux - 编译期间未找到外部头文件

我正在尝试在树外编译 bpf 样本。这是我的文件夹:

这是 Makefile:

我几乎只是复制了我在这里找到的 makfile: https ://github.com/netoptimizer/prototype-kernel/blob/master/kernel/samples/bpf/Makefile 并删除了一堆我不需要的东西,并且还将其更改为更具动态性并使用“uname -r”计算不同的路径。问题是原始 Makefile 假定 bfp_helpers.h 与文件位于同一目录中。但是我的 xdp1_kern.c 使用它,我不能将它放在同一个目录中。我添加了 -I(bpf_helpers.h 的路径),但是当我运行它时它仍然会抛出错误。

我确信添加 -I/usr/src/kernels/4.18.0-mlnx/tools/testing/selftests/bpf 会解决它,因为这是 bpf_helpers.h 在我的机器上的位置。但它没有,它只解决了 bpf_utils.h 的包含问题。

0 投票
1 回答
673 浏览

python - 使用 eBPF 在 Python 堆栈级别跟踪代码是否可行?

长期以来,非 Linux 平台上的 dtrace 一直被宣传为能够动态检测 node.js 代码以在节点级别进行动态跟踪,例如允许在 JavaScript 堆栈帧和变量级别调试节点程序(连同较低的级别跟踪)来自核心转储。

Linux 上的 eBPF 现在是否达到了这种复杂程度?我特别对 Python 感兴趣,但如果这个问题是针对任何类似的动态语言回答的,我会考虑回答这个问题。

如果没有,还需要做什么来支持它?

0 投票
1 回答
1174 浏览

linux-kernel - 加载 eBPF 文件对象时如何解决“R0 invalid mem access 'inv'”错误

我试图在内核中加载一个 eBPF 对象,但libbpf没有成功,得到标题中指定的错误。但是让我展示一下我的 BPF*_kern.c是多么简单。

更准确地说,libbpf错误日志如下:

我真的看不出这里有什么问题。我的意思是,这是如此简单,但它却打破了。为什么不应该这样做?我错过了什么?验证者发疯了,或者我正在做一些非常愚蠢的事情。