2013-08-28 122 views
2

我有net_device其中已實現ndo_start_xmit功能。將SKB推送到網絡堆棧

ndo_start_xmit函數調用我有一個skb包含IP數據包。我需要用IP+UDP標頭公開數據包並將其發送迴路由系統。

問題是,當我打電話給dst_input(skb)dst_output(skb)時,我會捕獲NULL指針解除引用錯誤。看來我不能使用這個功能將封裝的數據包推入網絡堆棧。

任何人都可以幫我解決這個問題嗎?

回答

2

如果您想將skb推入內核堆棧,只需使用netif_rx(skb)函數。

+0

完美,謝謝。但是,我怎樣才能繞過INPUT和FORWARD路徑? –

3

在數據包傳輸(來自驅動器到網絡鏈路)

從插座緩衝液(是skb->數據)複製數據到驅動器內核緩衝區(的hard_start_xmit函數內)

在分組接收(從網絡鏈接到驅動程序)

創建skb緩衝區。將數據從驅動程序內核緩衝區複製到套接字緩衝區,並使用netif_rx()函數切換到內核網絡堆棧。