我有一个内核模块,我在PRE-ROUTING钩子中捕获一个数据包进行一些处理。然后我分配一个新的skb(不能在同一个skb中执行)并将输入skb和ip头的处理后的有效负载放在这个新的skb中。然后我想为这个新的skb做一个netif_rx,让它遍历内核网络堆栈。
我对我应分配的新skb的大小感到困惑,我的skb->数据应该指向(对于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之前应该遵循什么。 任何链接或描述都会有所帮助。
提前致谢。
答案 0 :(得分:0)
套接字缓冲区(skb)保存当前协议数据单元(PDU)信息的 ALL ,并为该PDU传递的数据的 ALL 占用。无论您在skb开头留下多少空间,都可以将skb->data
指向您的数据的开头。