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

c - 一个元素的 eBPF 映射。映射类型和内核/用户空间通信

我会创建一个映射来仅存储一个元素(端口号),并且应该从用户空间和内核空间读取/写入它。我应该使用哪种地图类型?哪个大小的键和值是合适的,我如何从双方写入/读取?

_user.c

_kern.c

如何引用 map_fd 并在同一张地图上操作?

编辑:

我只能通过一种方式成功地创建地图并与之交互:在_kern.c文件中定义地图,如下所示:

该定义允许使用 bpf 助手直接在地图上进行操作,例如bpf_map_lookup_elem.

而是在通过我使用将ebpf 程序_user.c加载到内核之后_kern.obpf_prog_load

map_fd = bpf_object__find_map_fd_by_name(obj, "my_map");

检索与地图关联的文件描述符(我错过了这一点)。例如,一旦您获得要执行的文件描述符,您就可以调用地图更新

问题:在这种情况下,我使用 libbpf 从用户空间检索 fd,但是如果我从中创建映射_user.cbpf_create_map那么如何从 ebpf 程序中检索 fd?

0 投票
1 回答
653 浏览

c - 每种类型的 ebpf 程序的上下文

我已经看到,对于每种类型的 ebpf 程序,程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序的情况下,指向 struct __sk_buff 的指针作为参数传递。每个程序类型的上下文在哪里定义?

0 投票
1 回答
1020 浏览

c - tracepoint/syscalls/sys_enter 不会触发 bpf_trace_printk

目标:每次执行系统调用时打印 Hello。

代码:

_kern.c

_user.c

问题:当我运行程序时,如果调用 open 系统调用,它也会终止而不打印“Hello”。

问题:我错过了什么?我也尝试过 sys_enter_open 而不是 sys_enter

0 投票
1 回答
271 浏览

linux-kernel - ebpf 加载器之间的主要区别

如果我理解得很好,有不同的 ebpf 加载器:

  • bpf_load.c 进入内核源代码
  • libbpf
  • bpftool
  • tc
  • ... <-- 其他人?

它们之间的主要区别是什么?它们总是可以互换吗?我应该总是更喜欢 libbpf 吗?

0 投票
2 回答
2023 浏览

c - ebpf 的受限 C 中不允许什么?

从 bpf 手册页:

eBPF 程序可以用受限的 C 语言编写,该 C 语言被编译(使用 clang 编译器)成 eBPF 字节码。这个受限制的 C 语言省略了各种特性,例如循环、全局变量、可变参数函数、浮点数以及作为函数参数传递的结构。

AFAIK 手册页未更新。我想知道在使用受限 C 编写 eBPF 程序时究竟禁止什么?手册页所说的仍然正确吗?

0 投票
1 回答
88 浏览

c - 为什么 bpf 代码无法访问 cpumap_enqueue_ctx 的前 8 个字节?

阅读一些附加到跟踪点的 ebpf 示例,我注意到每个结构都是从这样的填充开始构建的(来自samples/bpf/xdp_redirect_cpu_kern.c

我发现的只是这条评论,它说 bpf 代码无法访问前 8 个字节,但我不明白为什么。

0 投票
2 回答
909 浏览

c - 如何在 ebpf 中使用 seccomp 过滤器?

我正在寻找 eBPF 的示例来编写 seccomp 过滤器,但我找不到。有人可以告诉我是否可以使用 eBPF 编写 seccomp 过滤器?

0 投票
1 回答
71 浏览

c - 无法正确访问跟踪点上下文结构字段

目标:仅当使用 O_RDONLY 标志调用 openat 时才写入 trace_pipe。我已经构建了结构,查看此处包含的格式 /sys/kernel/debug/tracing/events/syscalls/sys_enter_open/format

问题我认为我没有访问 flags 字段,因为看起来第二个 if 语句总是错误的。 问题:我是否正确访问了标志字段?有没有办法打印标志变量内容?

0 投票
0 回答
158 浏览

macos - macOS 上 Rust 程序的类 DTrace 函数追踪

我有一个使用 C FFI 的 Rust 程序,我想在任何时候调用该 C FFI 中的函数并将参数传递给它。

我在 macOS 上开发,看起来 DTrace 很合适,但是在启用 macOS SIP 的情况下,DTrace 不能很好地工作。我不想禁用 SIP。

我正在考虑使用这个 DTrace 提供程序: pid$target:::entry

问题:

  • 有没有更好的方法在 macOS/Rust 上执行此操作?

  • 为了在我的 Rust 程序上使用 DTrace/eBPF,作为 VM 运行的最佳操作系统是什么?

0 投票
1 回答
266 浏览

c - 为什么在 bpf_helpers 中定义了 load_half,但它没有出现在 filter.c 中?

tools/testing/selftests/bpf/bpf_helpers.h 如果我在bpf 中理解“很好”,则定义了帮助原型。

如果我想现在哪些助手可用于特定程序类型,我需要在结果中搜索'func_proto(enum bpf_func_id func_id' kernel/ net/ drivers/

例如,要检查套接字过滤器程序可以调用的助手,我可以阅读以下定义

问题:

1)我看不到load_half,但我仍然可以从我的套接字过滤程序中调用它。为什么?socket_filter2)和有什么区别sk_filter