免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3534 | 回复: 4
打印 上一主题 下一主题

[网络子系统] 关于_skb_refdst,求助! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-17 18:13 |只看该作者 |倒序浏览
内核:3.3.2-1

skbuff数据结构中,有一个成员:unsigned long _skb_refdst;

结构体外有一个由这个成员获得dst_entry的操作函数:static inline struct dst_entry *skb_dst(const struct sk_buff *skb);

最近在做一个项目,其中有一个部分是虚拟网卡驱动,自定义了虚拟网卡的发送函数mydev_tx(struct sk_buff *skb, struct net_device *dev),其中有一段代码是:

if (!skb_dst(skb))     
    goto out;

在这个判断之前,没有对skb的内容进行任何修改。

成功insmod后:

ip addr add 10.0.0.1/24 dev mydev
ip link set dev mydev up
ping 10.0.0.2

kernel确实调用了mydev_tx,但是每次发送函数都在if (!skb_dst(skb))这个地方“goto out”了,总是没有发送。也就是说skb_dst(skb)的返回值是NULL(用printk打印出来是0)。

不知道为什么会出现skb的dest_entry为空的情况?网络层查询路由表之后不是会设置skb的_skb_refdst么?

如果有哪位仁兄知道原因,还望不吝指出。若能提供一点解决思路或是能给出一点调试思路(怎么比较方便的看到网络层查询路由的过程?),在下也万分感激。

新手第一次发贴,亟待各位相助,谢谢了!

论坛徽章:
0
2 [报告]
发表于 2012-05-17 18:42 |只看该作者
额,没人理我么。。。自己顶一下,求回复啊。。。

论坛徽章:
0
3 [报告]
发表于 2012-05-18 09:17 |只看该作者
额,一晚上没人理。。。再顶下,求回复

论坛徽章:
0
4 [报告]
发表于 2012-05-18 17:16 |只看该作者
不太可能 确定到xmit的数据报是 IP包 不是arp之流?

论坛徽章:
0
5 [报告]
发表于 2012-05-21 09:37 |只看该作者
是ip包,我看了skb->protocol,是ETH_P_IP。感谢你的回复~不知道有没有进一步意见?
回复 4# Arthur_


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP