2013-03-20 113 views
1

我有兩塊通過PCIE總線連接的板卡。他們可以通過預先分配的消息緩衝區交換數據。現在我嘗試基於此連接實現虛擬網絡接口。 參考一些網絡驅動程序源代碼顯示,有兩種方法,他們實施的接收路徑:手動爲skb分配數據緩衝區struct

  • 使用dev_alloc_skb()分配接收函數內skb和數據複製到分配給該skb緩衝區。
  • 使用dev_alloc_skb()分配skb並將其緩衝區放入RX環。

在這兩種情況下,緩衝區由dev_alloc_skb()分配。我想只分配skb控制標題,並指向我的消息緩衝區的data指針。我們還必須修改skb_free()以將消息緩衝區重新放回消息池。

任何人都可以請告訴我,如果有任何參考代碼也使用類似的方法或請提出一個更好的方法,儘量減少代碼更改。任何建議表示讚賞。先謝謝了!

+0

我也在努力解決類似的問題,有什麼辦法沒有,你把HTTP:/? /stackoverflow.com/questions/40857686/mapping-1-mib-of-reserved-memory-for-network-interface-cardnic-driver-in-arm-l – shunty 2016-12-26 09:58:24

回答

0

你可以使用build_skb

那麼這筆交易將是爲網卡只分配數據緩衝區 填充其RX環形緩衝區。並且在RX完成時使用build_skb()至 將數據緩衝區(現在填充以太網幀)附加到新的skb, 初始化skb_shared_info部分,並將熱skb分配給網絡 堆棧。

build_skb()是分配skb的函數,調用者提供應連接到它的數據緩衝區 。司機預計build_skb()後有權要求 skb_reserve()skb->data指向 以太網幀(通常跳過NET_SKB_PADNET_IP_ALIGN