eBPF Talk: `tailcall` in `bpf2bpf` 踩坑一则

在 bpf2bpf 里使用 tailcall 时,可以达到意想不到的效果: tailcall 目标 bpf prog 复用当前 subprog 的栈空间,而不是 subprog caller 的栈空间。 subprog caller 能获取到 tailcall 目标 bpf prog 的返回值。 tailcall in bpf2bpf 支持情况 从 5.10

eBPF Talk: 巨献 eBPF vm on eBPF

花了几天时间,将 eBPF vm on eBPF 的想法实现了一下,这是一个非常有趣的想法。以前用 Go 实现过 eBPF vm,所以这回轻车熟路,很快就实现了一个 eBPF vm on eBPF demo。

eBPF Talk: Unix Socket 抓包工具 sockdump

犹如 2 年前抄狄老师的 skbtracer 一样,当看到 sockdump 时,又抄了一回作业。原 sockdump 也是基于 bcc 的项目,我把它改造成了基于 Go+eBPF CO-RE 的项目,下载二进制文件即可立马用起来。 skbtracer

eBPF Talk: XDP 支持 traceroute

不管 traceroute 具体的工作原理是什么,只需要抓住一点:如果当前的包 IP 头里的 TTL 是 1,那么就可以回一个 ICMP TtlExceeded 包,这样就可以支持 traceroute 和 mtr 了。 TL;DR XDP 程序里的处理逻辑

eBPF Talk: 从一个 pwru issue 谈起

有位 pwru 的用户在 GitHub 上提了一个 issue,说 --filter-trace-tc 不能正常工作。 option –filter-trace-tc not support 1 2 3 4 5 6 7 8 9 ...... ; event.addr = bpf_get_func_ip(ctx); 26: (bf) r1 = r6 27: R0=invP1 R1_w=ctx(id=0,off=0,imm=0) R6=ctx(id=0,off=0,imm=0) R7=ptr_sk_buff(id=0,off=0,imm=0) R10=fp0 fp-8=????mmmm fp-16=00000000 fp-24=00000000 fp-32=0mm0mmmm fp-40=mmmmmmmm fp-48=mmmmmmmm fp-56=mmmmmmmm fp-64=mmmmmmmm fp-72=00000000 fp-80=00000000 fp-88=00000000 fp-96=00000000 fp-104=mmmmmmmm