【问题标题】:LL_ALLOCATED_SPACE and other considerationsLL_ALLOCATED_SPACE 和其他注意事项
【发布时间】: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


    【解决方案1】:

    套接字缓冲区 (skb) 保存当前协议数据单元 (PDU) 的 ALL 信息,并占为此 PDU 传递的 ALL 数据.无论您在 skb 开头留下多少空闲空间,都将您的 skb->data 指向 YOUR 数据的开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-19
      • 2014-03-28
      • 2012-02-03
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多