【发布时间】:2014-04-11 20:37:25
【问题描述】:
我有一个内核模块,其中我在 PRE-ROUTING 钩子中捕获一个数据包以进行一些处理。然后我分配一个新的 skb(不能在同一个 skb 中执行)并将输入 skb 的处理后的有效负载和 ip 标头放在这个新的 skb 中。然后我想为这个新的 skb 做一个 netif_rx 并让它遍历内核网络堆栈。
我对我应该分配的新 skb 的大小有点困惑,我的 skb->data 应该指向哪里(指向 network_header 或 mac 头)。 skb->len应该是什么,是否考虑mac头?
len; // total length of new ip datagram
skb_new = dev_alloc_skb(len + LL_ALLOCATED_SPACE(skb->dev) + ETH_LEN);
在此之后,我应该为 LL 标题和预告片保留多少,以及我的 skb_new->数据应该指向哪里。
我想在 skb 中填写所需的详细信息后调用 netif_rx(skb_new)。基本上在分配 skb 和调用 netif_rx 之前应该遵循什么。 任何链接或描述都会有所帮助。
提前致谢。
【问题讨论】:
标签: linux networking linux-kernel kernel