问题标签 [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.
bpf - 安装 bcc 时,找不到包 bpfcc
我正在尝试在我的 Linux 机器上安装 bcc 模块,以便编写 BPF 程序。
我一直在跟进页面
https://github.com/iovisor/bcc/blob/master/INSTALL.md#kernel-configuration
构建内核并安装 bcc 模块。
但是,每当我输入
我收到一个错误:
如果我问的基本问题太多了,我很抱歉。这是唯一一个似乎有聪明人有一些答案的地方。提前谢谢你们
c - 标头在 eBPF 代码的内核级别上不起作用
所以我正在eBPF上开发一些东西。
我需要使用 unistd.h 标头,因为我想使用睡眠功能。
然而,我意识到当我输入
这些标头不包含在内,我会收到一条错误消息:
我以为我在代码的其他地方做错了,所以我尝试在教程的示例中包含该标题,但它也没有那样工作。
因此,从我在下面附加的代码中,我尝试在消息发布之前延迟一秒钟。
有没有人遇到过同样的问题,并且以某种方式找到了在 c 代码中使用该标头的方法?
如果有人能给我一些帮助,我将不胜感激!
太感谢了!
我尝试更新内核并将所有头文件移动到ёusr/local/includeё目录,因为它在互联网上说这是编译器首先检查头文件但仍然无法工作的地方。
所以这是我试过但没有用的代码。
linux - 如何获取我的 Linux 内核的 bpf_helpers.h 头文件?
我正在 Ubuntu 机器上开发一个 eBPF 程序:
为此,我需要bpf.h
许多定义以及bpf_helpers.h
辅助函数定义。我安装了一个带有标题的新内核:
标题包括bpf.h
:
但不是bpf_helpers.h
:
如何为我的内核获取此文件,为什么它不包含在分发标头中?
我可以签出特定版本的 Linux 内核或从master获取文件,但发行版可能会对上游进行更改,这让我对此感到不舒服。
linux - sockmap 是否需要任何 BPF 程序?
我正在编写一个sockmap BPF 程序,我想知道这样一个程序的要求是什么。一个 sockmap 可能附加了一个解析器和一个判断程序,所以我的问题是在将套接字添加到映射之前是否需要任何一个程序,如果两者都不需要,那么当省略任何一个程序时会发生什么行为。
一些令人困惑的相关陈述显示了我为什么有这个问题:
- 如果没有附加 BPF 程序,则 sock 对象只能用于 sock 重定向- 我认为这意味着重定向是通过附加到 sock 映射本身的裁决程序以外的某种方式编程的?
- 将 SOCKMAP 附加到解析器和判断程序很重要——这意味着解析器和判断程序都是必需的,即没有另一个程序就不能存在?
- recv_sock -> str_parser (parse_prog) -> verdict_prog -> skb_send_sock - 这个 ASCII 图似乎也暗示如果解析程序被省略,判断程序将不会收到任何操作?
linux-kernel - Perf 跟踪并非每次运行都显示所有跟踪点
我正在尝试查看跟踪点以跟踪 ping 数据包的旅程。第一次运行
在同一命令的其他运行中,有时会显示更多跟踪点。我希望所有运行都显示相同的跟踪点,但它是否显示更多或更少是不一致的。
我可以运行任意次数,并且输出将是不可预测的。
linux - 如何计算 BPF 辅助函数的返回码的含义?
我正在编写一个BPF_PROG_TYPE_SOCKET_OPS
程序,我看到以下内容/sys/kernel/debug/tracing/trace_pipe
:
当我由于以下代码段加载它时:
我怎样才能弄清楚-95是什么意思?当我查看https://elixir.bootlin.com/linux/latest/source/arch/alpha/include/uapi/asm/errno.h时,我看到:
这是找到错误含义的正确方法吗?如果是这样,描述的含义是什么?
linux-kernel - 为什么将已建立的 TCP 套接字添加到 BPF_MAP_TYPE_SOCKMAP 映射会破坏 SSL?
我有以下 BPF 程序:
它所做的只是将已建立的 TCP 套接字添加到 sock_ops sockmap。然后我将该程序作为BPF_PROG_TYPE_SOCK_OPS
程序加载,将其附加到 v2 cgroup 并在该 cgroup 中运行 shell。
但是,这似乎破坏了 SSL:
HTTP 按预期工作:
为什么是这样?
uname -a
: Linux ubuntu-bionic 4.18.0-16-generic #17~18.04.1-Ubuntu SMP Tue Feb 12 13:35:51 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
linux - 如何在 BPF_PROG_TYPE_SK_SKB 判断程序中确定数据包的方向?
我正在编写一个BPF_PROG_TYPE_SK_SKB判决程序来做出重定向决定。如何计算数据包的方向(入口/出口)?
我可以访问每个数据包的本地和远程端口,但我无法确定哪个是源端口或目标端口,因此无法确定方向。这应该可能吗?如果不是,那为什么不呢?
uname -a
: Linux ubuntu-bionic 4.18.0-16-generic #17~18.04.1-Ubuntu SMP Tue Feb 12 13:35:51 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
linux - 为什么我的 BPF_PROG_TYPE_CGROUP_SKB 程序不能在容器中运行?
我编写了以下 eBPF 程序来计算数据包:
我还有一个用户空间组件,它将程序加载为 a ,使用 attach type将其附加BPF_PROG_TYPE_CGROUP_SKB
到 v2 cgroup ( ) ,将其自己的 PID 添加到该 cgroup 并开始创建网络流量。/sys/fs/cgroup/unified/foo
BPF_CGROUP_INET_EGRESS
当我在容器外运行这个用户空间组件时,它按预期工作,我看到我的程序被调用了cat /sys/kernel/debug/tracing/trace_pipe
。
但是,当我在容器中运行我的程序时,我看不到任何输出。
我正在按如下方式运行容器:
我正在使用主机网络和 PID 命名空间来避免它们可能导致的任何潜在问题。
为什么我的程序似乎无法在容器内运行?
uname -a
: Linux ubuntu-bionic 4.18.0-16-generic #17~18.04.1-Ubuntu SMP Tue Feb 12 13:35:51 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
ebpf - 从事件中分离 bpf 对象?
我希望能够从附加事件中分离我的 BPF 对象。是从事件中分离以销毁 BPF 对象的唯一方法吗?
我试图避免每次启动我要跟踪的新程序和/或跟踪的事件发生更改时都必须创建/销毁对象。
提前感谢您的帮助!