+ -
当前位置:首页 → 问答吧 → 有没有用 ck-sources-2.6.19-ck2-r3 同时用 IPv6 的兄弟?[问题已解决]

有没有用 ck-sources-2.6.19-ck2-r3 同时用 IPv6 的兄弟?[问题已解决]

时间:2007-01-15

来源:互联网

我 ck2-r2 和 ck2-r3 用同样的一个 .config 编译的,结果 ck2-r2 能正常接收 radvd 广播的 IPv6 前缀并配置 IPv6 地址和路由,同时使用 IPv6 网络正常;但是 ck2-r3 就不能配置 IPv6 地址和路由信息,表现为没有配置“可聚集全球单点传送地址”和默认路由,但是链路本地地址显示配置正常,ping6 ::1 则正常。

请问有没有人出现相关或相似问题?

附: IPv4 连接一切正常;ck-sources emerge 后只手工打过 reiser4 的 patch,但是查看过 reiser4 的 patch 未发现对网络部分的代码 patch。

作者: yuxans   发布时间: 2007-01-15

用 radvdump 检测,能发现 radvd 广播的地址前缀及路由信息。

对比 genpatches-2.6.19-4.base.tar.bz2 genpatches-2.6.19-5.base.tar.bz2 发现 genpatches-2.6.19-5.base.tar.bz2 里关于网络部分比 genpatches-2.6.19-4.base.tar.bz2 多了 1001_linux-2.6.19.2.patch 里的一段:

代码:
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index b312a5f..4b3ffc6 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -413,8 +413,6 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
 if (netif_carrier_ok(dev))
 ndev->if_flags |= IF_READY;

- /* protected by rtnl_lock */
- rcu_assign_pointer(dev->ip6_ptr, ndev);

 ipv6_mc_init_dev(ndev);
 ndev->tstamp = jiffies;
@@ -425,6 +423,8 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
 NULL);
 addrconf_sysctl_register(ndev, &ndev->cnf);
 #endif
+ /* protected by rtnl_lock */
+ rcu_assign_pointer(dev->ip6_ptr, ndev);
 return ndev;
 }

作者: yuxans   发布时间: 2007-01-15

仔细分析 patch 会发现这个 patch 就是把 rcu_assign_pointer(dev->ip6_ptr, ndev); 这个函数的调用改动了位置(另一行是注释),把 addrconf.c 的 patch 撤销;重新编译 kernel,IPv6 功能正常了。

作者: yuxans   发布时间: 2007-01-15