在无BTF的内核中使用fd寻找关联的socket结构

上一篇文章讲了eBPF Tracepoint和Kprobe,这一篇文章我们来看一下如何应对无BTF的老版本内核,以及如何只使用fd寻找关联的socket结构。

这篇文章的大背景,是需要关联fd、socket结构体指针,以便能够在hook系统调用时,通过fd找到对应的五元组信息。但是问题就在于,尝试了众多方法来关联上述的数据,甚至hook了十几个内核函数,希望包围socket的全生命周期,但是最终都出现了意料之外的结果,非常棘手。

阅读更多

看看Linux Kernel——基于Macvtap互通问题追溯根源

Linux上遇到一个问题——macvtap的虚拟接口无法和parent互通,这个问题让我不禁感到奇怪。以往都是同一个parent上的macvtap间互访,还真没有留意过访问parent是什么样一个情况。libvirt的wiki告诉我它确实是不能互通的,这或多或少激起了我对macvtap与bridge区别的一个好奇,Google未果,只能沿着Linux的内核代码走一遍了。

阅读更多

初探DPDK——环境准备与编写第一个简易的NAT程序

博主早期使用Golang+TAP/TUN实现了对数据包L2/L3级别的操作,但是很显然这么做也会有很大的问题——用户程序的数据包发出到TAP/TUN,还要再复制到用户态程序处理,然后通过用户态程序的套接字再从主网卡发出,这样一来既延长了数据路径,又带来了多次的用户态内核态间的数据拷贝,整体上造成的指令数不容小觑。DPDK则可以完全解决这个问题,本篇文章则为对DPDK的一个开端,在完成开发环境准备的同时,博主我稍微修改了l2fwd例程,使得其能够实现一个简易的NAT操作(不能用的那种),感受一下DPDK的魅力~

阅读更多