2

我有net_device哪个ndo_start_xmit实现了功能。

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

问题是,当我调用dst_input(skb)or时dst_output(skb),我会发现NULL指针取消引用错误。看来我不能使用这个函数将封装的数据包推入网络堆栈。

解决办法是什么?

4

2 回答 2

3

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

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

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

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

于 2013-08-29T04:19:22.873 回答
2

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

于 2013-08-28T11:55:48.187 回答