我有两块板通过PCIE总线连接。他们可以通过预先分配的消息缓冲区交换数据。现在我尝试基于此连接实现虚拟网络接口。 引用一些网络驱动程序源显示它们实现了接收路径的两种方法:
dev_alloc_skb()
在接收函数内分配skb
,并将数据复制到为此skb
分配的缓冲区。 dev_alloc_skb()
分配skb
并将其缓冲区放入RX环。在这两种情况下,缓冲区由dev_alloc_skb()
分配。我只想分配skb
控件头,并将data
指针指向我的消息缓冲区。我们还必须修改skb_free()
以将消息缓冲区放回消息池。
任何人都可以告诉我,如果有任何参考代码也使用类似的方法或请提出一个更好的方法,以尽量减少代码更改。任何建议表示赞赏。先谢谢!
答案 0 :(得分:0)
您可以使用build_skb:
所以交易将是仅为NIC分配数据缓冲区 填充其RX环缓冲区。并在RX完成时使用
build_skb()
将数据缓冲区(现在填充以太网帧)附加到新的skb, 初始化skb_shared_info
部分,并将热门skb提供给网络 叠加。
build_skb()
是分配skb的函数,调用者提供 应附加到它的数据缓冲区。司机应该打电话 在skb_reserve()
之后build_skb()
skb->data
让NET_SKB_PAD
指向 以太网帧(通常跳过NET_IP_ALIGN
和{{1}})