当前位置:  技术问答>linux和unix

netif_rx(skb)成功,但无法收到数据包是怎么回事呀

    来源: 互联网  发布时间:2017-01-26

    本文导语:  我用dummy做为模板,想在里面实现接收功能,就是类似loopback,接到网络层的数据包后,原封不动的把这个数据包返回给网络层,具体的实现代码如下: 环境:VMware+ubuntu_2.6.32.46  static netdev_tx_t dummy_xmit(struct sk_buff *skb, struct...

我用dummy做为模板,想在里面实现接收功能,就是类似loopback,接到网络层的数据包后,原封不动的把这个数据包返回给网络层,具体的实现代码如下:
环境:VMware+ubuntu_2.6.32.46 

static netdev_tx_t dummy_xmit(struct sk_buff *skb, struct net_device *dev)
{

        skb_orphan(skb);

        skb->protocol = eth_type_trans(skb, dev);

        if (likely(netif_rx(skb) == NET_RX_SUCCESS)) {
                dev->stats.tx_packets++;
                dev->stats.tx_bytes += skb->len;
        } else
                dev->stats.tx_dropped++;

        return NETDEV_TX_OK;
}

然后用UDP来测试,先指定一条路由,即发往192.168.155.155地址的包要经过设备dummy0,
然后udp_client就把包发往192.168.155.155,
udp_server的地址设为INADDR_ANY.
现在的问题的,netif_rx(skb)返回值表示发送成功,但udp_server接收不到数据.
我不知道问题出在哪了,是我在发包的时候有些值没设置好,还是用UDP这种测试方法根据就不对呢,麻烦各位高手指点一下,谢谢!

|
我觉得还是路由的问题,netif_rx之后肯定是 上到协议栈。

但loopback的来源和目的ip 都是127.0.0.1 和 loopback device的ip都是127.0.0.1,你的 这个虚拟device 的ip也要设置成192.168.155.155 才行,这样才上的来,你可以看人家 127.0.0.0 的路由设置。

楼主孜孜不倦研究内核网络啊,又被我看到了,呵呵

|
如果你是发给本机IP的话是不会经过设备的,这个lo还是有点区别。
你可以尝试发送到192.168.4.xx(只要不是你设的自身IP),就应该会经过设备的。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下dev_queue_xmit和netif_rx前截取网络数据


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3