【发布时间】:2022-08-18 23:02:07
【问题描述】:
我们在 TC egress BPF 程序中解析 DHCP 数据包,在我们的例子中,在 skb->data 和 skb->data_end 之间不存在 UDP 标头之后的数据包。经过进一步调查,我们发现它位于非线性部分。我们有 bpf_skb_pull_data(skb,len) 来直接访问非线性数据。
基于以上几个问题:
-
调用 bpf_skb_pull_data(skb, skb->len); skb->data 和 skb->data_end 指针的值发生了变化。随着 skb->data 指针值的变化,堆栈是否会产生任何影响。这个辅助函数是否类似于 skb_pull ,它更改 skb->data 指针并且通常在由于在该层上解析数据包而导致数据包上升到堆栈时移动?我们是否有类似于 BPF 中的 skb_linearize() 或任何其他方式来解析非线性部分?
-
对于我们的案例,UDP 标头之后的数据包处于非线性部分,IP 标头之后的数据包是否会出现非线性或以太网标头之后的数据包?
标签: networking ebpf