ebpf

为什么 XDP 不在出口处?
ebpf

为什么 XDP 不在出口处?

我查看了多个来源,但了解到 Linux 不支持 XDP 出口。 我想确切地知道 xdp 可以在原始数据包上修改哪些内容以及除了 tc 之外不能修改哪些内容。 对于 XDP 出口疑问,用例:多播。 (也可以有其他用例)如何从用例中推断出为什么 XDP 出口不受支持。 (你能推断出什么?) 我知道 xdp 位于入口部分,但不在出口部分。但为什么 ?我刚刚了解到它可以恶意修改目标 MAC 地址,从而导致网络瘫痪。但事实并非如此。有些东西我无法从用例中连接,我可以从中推断出为什么 xdp egress 不受支持。 ...

Admin

为什么 eBPF 堆栈跟踪中的指令指针包含两次具有相同 IP 的 eBPF 程序,以及一个奇怪的不相关 IP?
ebpf

为什么 eBPF 堆栈跟踪中的指令指针包含两次具有相同 IP 的 eBPF 程序,以及一个奇怪的不相关 IP?

当在 eBPF 程序中获取内核堆栈跟踪时,我得到了重复且看似奇怪的条目:有人可以解释一下吗? 让我们从相关的 eBPF 程序片段开始;首先,我声明了一个堆栈跟踪图,如下所示: struct { __uint(type, BPF_MAP_TYPE_STACK_TRACE); __type(key, u32); __type(value, stack); __uint(max_entries, 1 << 14); } stacks SEC(".maps"); 在 eBPF 程序(稍后附加到cap_capable)中,...

Admin

我可以使用 systemd 资源管理来仅拒绝容器外部的端口吗
ebpf

我可以使用 systemd 资源管理来仅拒绝容器外部的端口吗

在最新的 fedora 39 上,我为无根容器设置了 podman,并通过创建 /etc/systemd/system/user-1000.slice.d/user-resources.conf 来限制用户可以绑定的端口和 [Slice] SocketBindAllow = 12345 SocketBindDeny = any 现在,正如预期的那样,用户无法绑定到端口 20202,例如: $ nc -4 -lp 20202 Ncat: bind to 0.0.0.0:20202: Operation not permitted. QUITTING...

Admin

到环回接口的 XDP 通用传输数据包被丢弃
ebpf

到环回接口的 XDP 通用传输数据包被丢弃

我试图通过 xdp 传输 udp 数据包(接收工作正常),但数据包在 udp 处理之前被丢弃。 内核:Linux fedora 6.5.12-300.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Mon Nov 20 22:44:24 UTC 2023 x86_64 GNU/Linux PRETTY_NAME="Fedora Linux 39(工作站版)" 我的 xdp 程序和套接字使用xdpgeneric. 我看到传输的数据包 intcpdump和 viabpftrace我看到为数据包调用了 ip_rcv。 然而,ip_rcv_fi...

Admin

eBPF 与经过验证的 Linux 内核模块
ebpf

eBPF 与经过验证的 Linux 内核模块

eBPF 在哪些方面优于用户端验证的内核模块? 我并不质疑验证代码的价值;两种方法都将得到完全静态验证。这两种方法都需要通常仅授予特权用户的功能。 然而,在用户空间中运行验证器可以让用户在验证器、安全级别和允许的假设之间有更多选择。验证器也可以独立于内核而更快速地开发。 在问这个问题之前我读过的东西: 我发现这个黑客新闻主题,这只是说一些有限的 eBPF 过滤器不需要特权,但我了解大多数 eBPF 应用程序仍然需要特权? 我发现这一页,它声称 内核模块有一个特定的入口点(init_module())和出口点(cleanup_module())。 eB...

Admin

如何在bpftrace中获取argv[0]?
ebpf

如何在bpftrace中获取argv[0]?

我有这个相当简单的脚本: #!/usr/bin/bpftrace tracepoint:syscalls:sys_enter_exec* { @start[pid] = nsecs; printf("START;%-6d;", pid); join(args->argv); } tracepoint:syscalls:sys_enter_exit* { $from = @start[pid]; $until = nsecs; printf("STOP;%-5d;%-16d\n", pid, $until-...

Admin

使用 TC BPF 重定向端口
ebpf

使用 TC BPF 重定向端口

我想用来TC BPF将传入流量从一个端口重定向80到另一个端口8080。下面是我自己的代码,但我也尝试过来自的示例人 8 tc-bpf(搜索8080),我得到相同的结果。 #include <linux/bpf.h> #include <bpf/bpf_helpers.h> #include <bpf/bpf_endian.h> #include <linux/pkt_cls.h> #include <linux/if_ether.h> #include <linux/tcp.h> #i...

Admin

pmap 显示“其他对象”的映射 - 我如何找出这些对象是什么?
ebpf

pmap 显示“其他对象”的映射 - 我如何找出这些对象是什么?

我正在调查我的 Rust 应用程序中的某种内存泄漏。内存保持稳定增长(从 30M 左右开始,每天增长 50M)。该应用程序是用 Rust 编写的,它几乎只是将 XDP/BPF 程序附加到一些接口,并通过 BPF 映射读取一些数据并发布一些指标。 有趣的是,“泄漏”仅发生在我们的测试环境中(到目前为止,生产环境中的内存使用情况非常稳定)。 下面是一些 pmap 输出(我已经过滤掉了*.so,anon_inode:[perf_event]因为有很多,它们不是问题的一部分)。 看看这个,我的泄漏似乎不在堆上(所以分析堆没有意义)。我想了解其他对象的未命名映射是什么...

Admin

读取ebpf中的环境变量
ebpf

读取ebpf中的环境变量

我正在尝试创建一个ebpf程序C并想要读取用户设置的环境变量。类似于getenv中的东西C。 我无法找到bpf_helper()完成这项工作的功能。 是否存在用于此目的的函数,如果没有,我该如何实现它。 ...

Admin

记录所有执行的命令,无论 shell 是什么?
ebpf

记录所有执行的命令,无论 shell 是什么?

假设用户运行以下命令: zcat file.gz | grep something | gzip > grepped.gz 我正在寻找一个内核功能(也许是 BPF 过滤器?),它会记录所有的execves,将它们的 stdins/stdouts 链接在一起,并以类似的形式重建它,将其放入系统日志中。有没有办法在不与外壳交互的情况下做到这一点? ...

Admin

DPROBES (DTRACE_PROBE) 用于测量 1 微秒以下的高延迟内容
ebpf

DPROBES (DTRACE_PROBE) 用于测量 1 微秒以下的高延迟内容

目前,我正在分析高延迟应用程序的性能,但我对自己的测量结果完全没有信心。到目前为止,我已经用于DPROBES仪器和密件抄送/功能用于测量。有人能够验证这些数字吗?另外,如果有人知道更好的方法,请告诉我。 测量usleep(1):平均值 = 53962 纳秒 #include <unistd.h> #include <sys/sdt.h> int main() { int i; for(i=0; i<1000000; i++){ DTRACE_PROBE("hello-usdt", probe-main-st...

Admin

在内核 4.19.232 的 linux-tools-common 中找不到 linux bpftool
ebpf

在内核 4.19.232 的 linux-tools-common 中找不到 linux bpftool

我正在尝试检查是否bpf已正确安装在我的 Linux 内核中。它在内核中启用,如下所示: jakew@desktop:~$ cat config | grep BPF CONFIG_CGROUP_BPF=y CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT_ALWAYS_ON=y # CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set CONFIG_IPV6_SEG6_BPF=y CONFIG_NETFILTER_XT_MATCH_BPF=y CONFIG_BPFILTER=y C...

Admin

如何从 C/C++ 获取当前的 cgroup ID?
ebpf

如何从 C/C++ 获取当前的 cgroup ID?

这eBPF 辅助函数为 eBPF 程序定义bpf_get_current_cgroup_id,它做了显而易见的事情 u64 bpf_get_current_cgroup_id(void) Return A 64-bit integer containing the current cgroup id based on the cgroup within which the current task is running. 但是我找不到等效的系统调用(类似于获取pid)我可以在常规...

Admin

eBPF 在功能方面有哪些限制?
ebpf

eBPF 在功能方面有哪些限制?

据我了解,它主要用于可观察性(即只读)。 我看到你可以路由数据包,但你还能做更多的事情吗? 您还可以操作文件系统、发送信号并从 eBPF 程序写入吗? ...

Admin