前言
最近在eBPF的TC程序中对TCP的checksum进行重计算,其中遇到了点“小”问题。
问题描述
在重计算checksum后,发现携带payload的报文checksum总是计算错误:
刚开始是以为没有考虑末尾单字节,但是代码单独拉出来做单元测试又没有问题。
问题定位
最后把skb->data_end - skb->data看了以下长度,发现这个长度和前面无payload的报文长度一样,最后才发现skb->data_end其实是报文4层网络头的结束位置,而且我计算checksum的结束位置正是skb->data_end,实在是很“坑”,这个命名怎么看都像是...