xlhl3 发表于 2015-05-03 17:21

最新稳定版本内核3.14中网络子系统改变了好多!?

我的模块在linux-2.6.30系统上都能够成功的编译通过,但是在3.14版本上却无法通过!
查看了下原因:在3.14内核版本的skbuff.h文件中的sk_buff结构体做了改动,
在旧版本中sk_buff结构体中有关于路由的结构体    union {    struct dst_entry*dst;
                                                                              struct rtable *rtable;
                                                                        };
但在新版本中却没有呀!而我的模块中要用到这结构体,这该怎么改呀?不知道有人遇到这个问题没?求大神指导呀?

mrpre 发表于 2015-05-03 19:12

编译不过是好事......碰到强转的编译器不报错,就等着panic吧

philarlala 发表于 2015-05-03 19:39

可以看看skb_dst函数的实现,不管怎么改,应该都有对应的成员来记录路由相关的信息的
static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
{
      /* If refdst was not refcounted, check we still are in a
         * rcu_read_lock section
         */
      WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
                !rcu_read_lock_held() &&
                !rcu_read_lock_bh_held());
      return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
}
在3.14的内核是用成员_skb_refdst来记录路由信息的,源码那里也有注释说明这个参数的

xlhl3 发表于 2015-05-03 22:27

回复 3# philarlala
嗯嗯, 谢谢你的回复,我再好好看一下3.14内核中关于路由的实现,到时候有问题再来讨论讨论。
页: [1]
查看完整版本: 最新稳定版本内核3.14中网络子系统改变了好多!?