1

我有两块通过 PCIE 总线连接的板。他们可以通过预先分配的消息缓冲区交换数据。现在我尝试基于这个连接来实现一个虚拟网络接口。参考一些网络驱动程序源表明他们实现接收路径有两种方法:

  • 用于dev_alloc_skb()分配skb内部接收函数并将数据复制到为此分配的缓冲区skb
  • 用于dev_alloc_skb()分配skb并将它们的缓冲区放入 RX 环。

在这两种情况下,缓冲区是由dev_alloc_skb(). 我只想分配skb控制标头并将data指针指向我的消息缓冲区。我们还必须修改skb_free()以将消息缓冲区放回消息池。

任何人都可以告诉我是否有任何参考代码也使用类似的方法,或者请提出一种更好的方法来最小化代码更改。任何建议表示赞赏。先谢谢了!

4

1 回答 1

0

您可以使用build_skb

因此,交易将只为 NIC 分配数据缓冲区以填充其 RX 环形缓冲区。并build_skb()在 RX 完成时使用将数据缓冲区(现在填充有以太网帧)附加到新的 skb,初始化该skb_shared_info部分,并将热 skb 提供给网络堆栈。

build_skb()是分配一个 skb 的函数,调用者提供应该附加到它的数据缓冲区。驱动程序应该 在让指向以太网帧skb_reserve()之后立即调用(通常跳过和)build_skb()skb->dataNET_SKB_PADNET_IP_ALIGN

于 2018-01-08T20:22:35.040 回答