将SKB推送到网络堆栈

时间:2013-08-28 11:46:41

标签: networking linux-kernel

net_device已实施ndo_start_xmit功能。

ndo_start_xmit函数调用时,我的skb包含IP数据包。我需要使用IP+UDP标头打开数据包并将其发送回路由系统。

问题在于,当我调用dst_input(skb)dst_output(skb)时,我会抓住NULL指针解除引用错误。似乎我无法使用此函数将封装的数据包推送到网络堆栈中。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

在数据包传输过程中(从驱动程序到网络链接)

将数据从套接字缓冲区(skb->数据)复制到驱动程序内核缓冲区(在hard_start_xmit函数内)

数据包接收期间(从网络链接到驱动程序)

创建skb buffer。将数据从驱动程序内核缓冲区复制到套接字缓冲区,并使用netif_rx()函数移交给内核网络堆栈。

答案 1 :(得分:2)

如果你想将skb推入内核堆栈,只需使用netif_rx(skb)函数。