netif_rx(skb)成功,但无法收到数据包是怎么回事呀我用dummy做为模板,想在里面实现接收功能,就是类似loopba
netif_rx(skb)成功,但无法收到数据包是怎么回事呀
我用dummy做为模板,想在里面实现接收功能,就是类似loopback,接到网络层的数据包后,原封不动的把这个数据包返回给网络层,具体的实现代码如下:
环境:VMware+ubuntu_2.6.32.46
C/C++ codestatic 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),就应该会经过设备的。