bpf相关内容

如何从内核树中构建 BPF 程序

内核在samples/bpf 中提供了许多示例.我有兴趣在树之外构建一个示例,就像我们构建一个内核模块一样,其中 Makefile 可以很简单.可以对 bpf 做同样的事情吗?我通过从 samples/bpf/Makefile 中删除不必要的部分并保持对 libbpf 和其他人的依赖来尝试它,但结果证明并不是那么容易. 例如,尝试在内核树之外构建samples/bpf/bpf_tcp_ker ..
发布时间:2022-01-04 22:45:06 其他开发

不同 ebpf 程序类型之间的映射共享

是否可以在不同的程序类型之间共享 ebpf 映射.我需要在 tc-bpf 程序和 cgroup bpf 程序之间共享一个映射.如果映射被固定到充当全局命名空间的文件系统,这应该是可能的.但是,我还没有完成这项工作. 映射由 tc-bpf 程序创建并固定到全局命名空间.由于是tc-bpf程序,所以map的类型是struct bpf_elf_map.这个bpf程序是通过iproute2加载的. ..
发布时间:2022-01-04 22:32:47 其他开发

Linux 上的经典 BPF:过滤器不起作用

我正在尝试通过将经典 BPF 附加到原始套接字来测试用于数据包过滤的经典 BPF.我想用源端口的第一个字节 == 8 来捕获 TCP 数据包(tcpdump 'tcp[1:1] = 0x50'),但我在套接字上看不到传入的数据包.没有过滤器我的代码工作正常. 代码示例如下: #include//对于printf#include//内存集#include//当然是socket#include ..
发布时间:2021-12-11 11:52:38 服务器开发

无法以非超级用户身份运行bpf程序

我正在尝试运行一个我编写的简单bpf程序.但是我不能以非root用户身份运行它.下面是我尝试加载的程序,它基本上获取指向fd为map_fd的地图的指针(我没有在创建地图的地方显示代码).它可以以root用户身份运行,但由于某些原因,非root用户会失败. uname -a的输出 Linux 5.8.0-38-generic#43〜20.04.1-Ubuntu SMP Tue Jan 12 ..
发布时间:2021-05-30 18:38:16 其他开发

ebpf在受限C中不允许什么?

从bpf手册页: eBPF程序可以用编译后的受限C语言编写(使用clang编译器)转换为eBPF字节码.各种功能是从此受限的C中省略,例如循环,全局变量,可变参数函数,浮点数和传递结构为函数参数. AFAIK手册页未更新.我想知道在使用受限C编写eBPF程序时到底被禁止什么?手册页上说的仍然正确吗? 解决方案 这实际上与ELF文件本身“允许"的内容无关.这句话意味着,一旦编译为 ..
发布时间:2021-05-30 18:36:27 其他开发

BPF验证程序拒绝代码:

我正在尝试编写一个简单的套接字过滤器eBPF程序,该程序可以访问套接字缓冲区数据. #include#include#定义SEC(NAME)__attribute __(((section(NAME),已使用))SEC("socket_filter")int myprog(struct __sk_buff * skb){无效*数 ..
发布时间:2021-05-29 22:28:25 服务器开发

如何刷新原始AF_PACKET套接字以获取正确的已过滤数据包

sock = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL));setsockopt(袜子,SOL_SOCKET,SO_ATTACH_FILTER,& f,sizeof(f)) 使用这个简单的BPF/LPF附加代码,当我尝试在套接字上接收数据包时,将得到一些与过滤器不匹配的错误数据包.似乎那些数据包在我调用setsockopt()之前就已经进入套接字了. ..
发布时间:2021-05-04 21:00:56 服务器开发

不同ebpf程序类型之间的地图共享

是否可以在不同程序类型之间共享ebpf映射.我需要在tc-bpf程序和cgroup bpf程序之间共享一个映射.如果将映射固定到充当全局名称空间的文件系统,则应该可行.但是,我没有这个工作. 该映射是由tc-bpf程序创建的,并固定到全局名称空间.由于它是tc-bpf程序,因此映射的类型为struct bpf_elf_map.该bpf程序是通过iproute2加载的. 现在,我有一个c ..
发布时间:2021-05-04 18:30:35 其他开发

AF_XDP:尽管在RX-Queue 0上进行了定向,但没有来自多播的数据包

我仍在使用AF_XDP套接字,并且我的程序仍主要基于: https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP 我现在希望接收多个多播流(这与我注册多播IP的方式很好,因为我已经使用默认的Linux套接字对其进行了测试,因此除非大家表示有必要解决该问题,否则我不会共享代码。) 因为我现在还不想更 ..
发布时间:2020-06-07 18:36:26 服务器开发

为什么使用BPF和RAW SOCKET的该程序只是挂起?

目标:使用BPF编写一个简单的数据包过滤器。数据包过滤器应允许您选择接口。 问题::如果我在代码中取消倒数第三条指令的注释(有调用 recvfrom 时,执行只是挂起,我看不到任何输出(也没有应该在stdout中看到的“缓冲区归零”)。 问题:1)我该如何解决? 2)为什么程序在执行过程中挂起而没有显示第一个 printf 输出? 3)如何从ANY界面接收消息? #includ ..
发布时间:2020-06-07 18:36:22 其他开发

参数列表过长,无法通过bpf syscall加载eBPF程序时

我正在尝试通过Go中的 bpf 系统调用加载eBPF程序,但看到系统调用返回了错误。为了限制该问题,我使用以下最小的eBPF程序,该程序什么也不做: struct task_group {}; Go程序的重要部分如下: b,err:= ioutil.ReadFile(“ bpf / bbf_tty.o”) if err!= nil { fmt.Print( ..
发布时间:2020-06-07 18:36:20 其他开发

BPF表达式仅捕获arp-reply数据包

是否有一个 BPF 表达式只能捕获arp-reply数据包?当前,我正在使用Pcap4J和以下BPF表达式: arp和dst主机 host 和ether dst mac 其中 host 是设备的IP地址,而 mac 是我的主网络接口的MAC地址。不幸的是,当捕获数据包时,此过滤器还允许捕获ARP广播请求,因此我不得不采取额外的步骤来检查ARP标头的操作字段是否为2而不是1。 解决 ..
发布时间:2020-06-07 18:36:15 Java开发

golang,ebpf和函数持续时间

我正在玩gobpf,并且在计算跟踪的用户空间函数的持续时间时遇到问题。 我使用bpf_ktime_get_ns()读取时间,然后尝试计算增量,但得到了很多数字,尽管跟踪函数只睡了1秒。 这里是经过测试的C程序,其功能称为“ ameba”。 #include #include #include #inclu ..
发布时间:2020-06-07 18:36:13 其他开发

在BPF程序中始终获得0会话ID

我正在尝试编写一个BPF程序,该程序检查调用 tty_write 内核函数的任何进程的会话ID。我试图通过从当前 task_struct 结构中检索一个字段来做到这一点。我的代码如下: SEC(“ kprobe / tty_write”) int kprobe__tty_write(struct pt_regs * ctx) { struct task_struct * task; ..
发布时间:2020-06-07 18:36:10 其他开发

BPF过滤器源地址==传输地址

对于仅接收源MAC地址等于传输MAC地址的数据包的正确BPF过滤器是什么? 查看文档,似乎字段应该通过wlan[21:12]或wlan.addr2可用,但我无法使它们正常工作. 解决方案 根据 pcap-filter联机帮助页,捕获tshark或Wireshark的过滤器不支持相互比较数据包字段. 但是,您可以使用显示过滤器(Wireshark的顶部栏,一旦开始捕获)来完成此操 ..
发布时间:2020-05-23 20:13:42 其他开发

无法使用密件抄送工具将eBPF`kretprobes`附加到`napi_poll()`

想法是使用argdist来测量napi_poll()的等待时间,该等待时间返回已处理的数据包数量(称为工作). napi_poll()的执行等待时间与已处理的数据包数量之比将使我以直方图的形式平均处理每个数据包所花费的时间. 我正在使用以下命令 argdist -H 'r:c:napi_poll():u64:$latency/$retval#avg time per packet (n ..
发布时间:2020-05-02 03:45:57 其他开发

BPF:程序上下文的翻译

我查看了不同类型的BPF程序,并注意到对于不同的程序类型,上下文传递的方式也有所不同. 示例: 对于程序类型BPF_PROG_TYPE_SOCK_OPS,类型为 struct bpf_sock_ops_kern .但是,这种类型的BPF程序引用了 对于程序类型BPF_PROG_TYPE_CGROUP_SKB,类型为 struct sk_buff (例如,在 struct __sk ..
发布时间:2020-05-02 03:40:08 服务器开发

如何在内核树之外构建BPF程序

内核在samples/bpf中提供了许多示例.我有兴趣在树外构建示例之一,就像我们构建内核模块一样,其中Makefile可能足够简单. bpf是否可以做同样的事情?我尝试通过从samples/bpf/Makefile中删除不必要的部分并保留对libbpf和其他内容的依赖来进行尝试,但是事实并非如此. 例如,尝试使用以下命令行在内核树之外构建samples/bpf/bpf_tcp_kern.c ..
发布时间:2020-05-02 03:36:16 其他开发

谁在BPF中创建地图

阅读man bpf和其他一些文档来源后,我印象深刻的是map只能由用户进程创建.但是,以下小程序似乎神奇地创建了bpf映射: struct bpf_map_def SEC("maps") my_map = { .type = BPF_MAP_TYPE_ARRAY, .key_size = sizeof(u32), .value_size = s ..
发布时间:2020-05-02 03:34:31 其他开发

eBPF可以修改系统调用的返回值或参数吗?

为模拟某些行为,我想将探针附加到syscall上,并在传递某些参数时修改返回值.另外,在函数的参数成为进程之前对其进行修改也就足够了. 使用BPF可以吗? 解决方案 我相信将eBPF附加到kprobes/kretprobes可使您对函数参数和返回值进行读取访问,但是您不能篡改它们.我不确定100%; IO Visor项目邮件列表或IRC频道是寻求确认的好地方(irc.oftc.net ..
发布时间:2020-05-01 09:45:47 服务器开发