我有net_device
其中已實現ndo_start_xmit
功能。將SKB推送到網絡堆棧
當ndo_start_xmit
函數調用我有一個skb
包含IP數據包。我需要用IP+UDP
標頭公開數據包並將其發送迴路由系統。
問題是,當我打電話給dst_input(skb)
或dst_output(skb)
時,我會捕獲NULL
指針解除引用錯誤。看來我不能使用這個功能將封裝的數據包推入網絡堆棧。
任何人都可以幫我解決這個問題嗎?
我有net_device
其中已實現ndo_start_xmit
功能。將SKB推送到網絡堆棧
當ndo_start_xmit
函數調用我有一個skb
包含IP數據包。我需要用IP+UDP
標頭公開數據包並將其發送迴路由系統。
問題是,當我打電話給dst_input(skb)
或dst_output(skb)
時,我會捕獲NULL
指針解除引用錯誤。看來我不能使用這個功能將封裝的數據包推入網絡堆棧。
任何人都可以幫我解決這個問題嗎?
如果您想將skb推入內核堆棧,只需使用netif_rx(skb)函數。
在數據包傳輸(來自驅動器到網絡鏈路)
從插座緩衝液(是skb->數據)複製數據到驅動器內核緩衝區(的hard_start_xmit函數內)
在分組接收(從網絡鏈接到驅動程序)
創建skb緩衝區。將數據從驅動程序內核緩衝區複製到套接字緩衝區,並使用netif_rx()函數切換到內核網絡堆棧。
完美,謝謝。但是,我怎樣才能繞過INPUT和FORWARD路徑? –