eBPF Talk: challenge verifier

在 eBPF Talk: binary search 中,我们使用一个朴素的 for 循环实现了一个二分查找的 eBPF 程序,但是,这个程序通不过 verifier,报错 “R3 unbounded memory access, make sure to bounds check any such acces

eBPF Talk: binary search

其实,bpf 子系统里并没有一个叫 bpf_binary_search() 的 helper 函数。 但并不是说,在 eBPF 里就实现不了二分查找了。 小需求 怎么判断一个 IP 地址是否在某几个 CIDR 里? 已知方法有二:

eBPF Talk: bpf prog stats

根据以下两个 commit,可以看到,自 5.1 内核起,bpf prog 可以统计自己的运行情况了。 bpf: enable program stats 5.1 kernel. bpf: Sharing bpf runtime stats with BPF_ENABLE_STATS 5.8 kernel. bpf: Improve program stats run-time calculation 6.x kernel. stats 例子 以 bpf2bpf demo

eBPF Talk: packet range check

在 XDP 或者 tc-bpf 中,经常要直接访问网络包内容;而在访问网络包内容之前,总是需要先检查访问的内容是否在 data_end 之内。 So,学习一下 packet range check 相关 commit 的历史;以史

eBPF Talk: 踩坑 XDP on Mellanox

对 XDP 了解得越多,对 XDP 的信心越是膨胀。最近在 XDP on Mellanox 上踩了个坑,让我对 XDP 的认识又有了新的提升:就是需要保持对技术的敬畏之心,不要过于自信。 P.S. Mellanox 网

eBPF Talk: tc-bpf 转发网络包

在 tc-bpf 里转发网络包,跟 XDP 里转发网络包有什么不同呢? eBPF Talk: XDP 转发失败了 eBPF Talk: 揭秘 XDP 转发网络包 eBPF Talk: 揭秘 XDP 转发网络包【续】 呃,其实还是那个奇葩的需求,不

eBPF Talk: eBPF 程序模块化与单测构想

我们来复习一下以下两篇文章: eBPF Talk: freplace on x86【汇编慎入】 eBPF Talk: 给 XDP 程序写 unittest 一个构想:使用 replace 实现 eBPF 程序的模块化,使用 BPF_PROG_TEST_RUN 对 eBPF 程序模块进行单测。 eBPF 程序

eBPF Talk: 给 XDP 程序写 unittest

我们都知道写 unittest 是非常必要的,但是在 eBPF 程序里,该如何给 XDP 程序写 unittest 呢? bpf: introduce BPF_PROG_TEST_RUN command since 4.12 kernel 在 4.12 内核中,引入了 BPF_PROG_TEST_RUN 命令,可以用来给 XDP 和 tc-bpf 等 eBPF 程序写 unit

eBPF Talk: helpers for bpf map

通过学习 eBPF Talk: eBPF helpers 的另一面,我们知道 eBPF helpers 是通过 bpf_func_proto 结构体来实现的,不同的 helpers 函数对应不同的 bpf_func_proto;甚至,对于同一个 helpers 函数,不