BPF 程序中对 struct __sk_buff 字段的访问,将会被 BPF 校验器转换成对相应的 struct sk_buff 字段的访问[7]。而 sk_buff 是 Linux 网络协议栈里最重要的结构体,它用来管理和控制接受或发送数据包,在内核中各个协议之间传输时,不需要拷贝 sk_buff 的数据,只需要改协议头和移动数据指针,当数据从 L4 到 L...
tcp->doff * 4) + l4_start); /* cd_tso_len 是数据包总长 减去 L2到L4总长,得到 TCP 数据部分的总长(包括应用层协议头) */ cd_tso_len = skb->len - off->header_len; /* cd_mss 是指示硬件在做TCP 分段时,每笔 TCP 包的 MSS */ cd_mss = skb_shinfo(skb)->gso_size; }...