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

bpf - eBPF:在 Linux 命名空间中运行

所以BPF程序是内核实体,因为它们在内核空间中运行。另一方面,Linux 命名空间又名容器,提供应用程序级别的隔离,在这种情况下,它们都共享主机的内核、内核模块等。

所以我想每个容器加载一个程序是没有意义的bpf,因为它也会在主机上变得可见?

因此,我猜想bpf程序会加载到主机和监视器/mangle/等上。进出命名空间的数据包。鉴于struct sock有关于命名空间 id 的信息,我认为只有某些类型的bpf程序才能做到这一点?

0 投票
1 回答
97 浏览

c - eBPF:理解验证器代码中的两个宏

我正在查看ebpf验证程序代码,但无法理解以下宏:

我理解offsetofoffsetofend宏,但是什么...意思?

谢谢。

0 投票
1 回答
403 浏览

linux - BPF: translation of program contexts

I was looking at the different types of BPF program, and noticed that for different program types the context is being passed differently.

Example:

  1. For program type BPF_PROG_TYPE_SOCK_OPS, an object of type struct bpf_sock_ops_kern is passed. However, the BPF program of this type takes a reference to struct bpf_sock_ops. Why is it done this way and where is the "translation" from bpf_sock_ops_kern to bpf_sock_ops?

  2. For program type BPF_PROG_TYPE_CGROUP_SKB, an object of type struct sk_buff is passed (e.g., in __cgroup_bpf_run_filter_skb), but the BPF program expects a minimized version, struct __sk_buff.

So I looked at the struct bpf_verifier_ops function callbacks, but they seem to only adjust the offsets in BPF instructions, as they are called by the BPF verifier.

I'd be glad if someone could shed light on how the BPF context is defined. Thanks.

0 投票
1 回答
1351 浏览

linux-kernel - ebpf:拦截函数调用

我正在阅读有关kprobesBPF 程序类型的信息,并且想知道是否有可能不仅拦截函数调用以进行跟踪或收集一些低级信息(寄存器、堆栈等),还可以替换调用并执行而不是实际功能?

是否kprobe提供此功能或我正在寻找错误的工具?

0 投票
1 回答
87 浏览

linux-kernel - ebpf:存在三元查找吗?

有没有可以做三元查找map的?ebpf我知道存在最长前缀匹配的 LPM 映射,但我想要这样的东西:

0 投票
1 回答
669 浏览

concurrency - Linux TC eBPF 和并发性

内核可以在多个 CPU 上同时运行多少个 eBPF 程序实例是否有限制(类似于 python GIL 问题)

特别是 eBPF tc 程序可以同时在多个 CPU 上工作吗?

当 eBPF 在多个 CPU 上运行相同的代码时,它是如何锁定内核数据结构的?

0 投票
1 回答
172 浏览

networking - eBPF 支持事件吗?

是否有可能让ebpf程序生成事件,例如数据包计数器达到预定义的阈值ebpf并将生成一些通知/事件给用户,类似于netlink提供的东西。

我看到目前发出此事件/状态的唯一方法是maps用户应用程序可以通过它进行轮询。

0 投票
1 回答
379 浏览

c - 在 BPF 程序上传时解密“无效的内存访问 map_ptr”

我正在编写一个自定义应用程序,它读取 C 代码,调用 LLVM 从该 C 代码生成 BPF 字节代码,然后重新定位任何 bpf 映射符号并将其上传到内核。我可以成功上传和运行不使用 BPF 映射的程序,但是一旦我重新定位程序以使用 BPF 映射,我就会收到以下错误:

详情如下:

以下输入提供给 LLVM:

生成以下字节码

并且“a”符号在指令#4中被重新定位,如下所示:

指令#4 中的“04”是符号“a”的映射的FD。调用 BPF_PROG_LOAD 后,我在内核的错误日志中得到以下信息。

我在破译这个错误日志时遇到了麻烦。内核想告诉我什么?

0 投票
1 回答
1372 浏览

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

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

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

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 安装。