【问题标题】:Pushing SKB to the network stack将 SKB 推送到网络堆栈
【发布时间】:2013-08-28 11:46:41
【问题描述】:

我有 net_device,它实现了 ndo_start_xmit 函数。

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

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

解决办法是什么?

【问题讨论】:

标签: networking linux-kernel


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 完美,谢谢。但是如何绕过 INPUT 和 FORWARD 路径?
    猜你喜欢
    • 2014-01-31
    • 2019-04-26
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多