日期:2014-05-16  浏览次数:20603 次

netif_rx(skb)成功,但无法收到数据包是怎么回事呀
我用dummy做为模板,想在里面实现接收功能,就是类似loopback,接到网络层的数据包后,原封不动的把这个数据包返回给网络层,具体的实现代码如下:
环境:VMware+ubuntu_2.6.32.46 
C/C++ code

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),就应该会经过设备的。