我net_device
已实施ndo_start_xmit
功能。
当ndo_start_xmit
函数调用时,我的skb
包含IP数据包。我需要使用IP+UDP
标头打开数据包并将其发送回路由系统。
问题在于,当我调用dst_input(skb)
或dst_output(skb)
时,我会抓住NULL
指针解除引用错误。似乎我无法使用此函数将封装的数据包推送到网络堆栈中。
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
在数据包传输过程中(从驱动程序到网络链接)
将数据从套接字缓冲区(skb->数据)复制到驱动程序内核缓冲区(在hard_start_xmit函数内)
数据包接收期间(从网络链接到驱动程序)
创建skb buffer。将数据从驱动程序内核缓冲区复制到套接字缓冲区,并使用netif_rx()函数移交给内核网络堆栈。
答案 1 :(得分:2)
如果你想将skb推入内核堆栈,只需使用netif_rx(skb)函数。