LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 752|回复: 2

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

[复制链接]
发表于 2007-1-15 11:18:03 | 显示全部楼层 |阅读模式
我 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。

:mad: :mad: :mad: :mad:
 楼主| 发表于 2007-1-15 11:33:30 | 显示全部楼层
用 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 里的一段:
  1. diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
  2. index b312a5f..4b3ffc6 100644
  3. --- a/net/ipv6/addrconf.c
  4. +++ b/net/ipv6/addrconf.c
  5. @@ -413,8 +413,6 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
  6.     if (netif_carrier_ok(dev))
  7.         ndev->if_flags |= IF_READY;
  8. -   /* protected by rtnl_lock */
  9. -   rcu_assign_pointer(dev->ip6_ptr, ndev);
  10.     ipv6_mc_init_dev(ndev);
  11.     ndev->tstamp = jiffies;
  12. @@ -425,6 +423,8 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
  13.                   NULL);
  14.     addrconf_sysctl_register(ndev, &ndev->cnf);
  15. #endif
  16. +   /* protected by rtnl_lock */
  17. +   rcu_assign_pointer(dev->ip6_ptr, ndev);
  18.     return ndev;
  19. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-15 12:02:41 | 显示全部楼层
仔细分析 patch 会发现这个 patch 就是把 rcu_assign_pointer(dev->ip6_ptr, ndev); 这个函数的调用改动了位置(另一行是注释),把 addrconf.c 的 patch 撤销;重新编译 kernel,IPv6 功能正常了。
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表