- 论坛徽章:
- 0
|
内核: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么?
如果有哪位仁兄知道原因,还望不吝指出。若能提供一点解决思路或是能给出一点调试思路(怎么比较方便的看到网络层查询路由的过程?),在下也万分感激。
新手第一次发贴,亟待各位相助,谢谢了!
|
|