Thank you to all that replied. Kernel version 2.6.20 fixes the issue. Phil
> _____________________________________________ > From: Philip Bellino > Sent: Tuesday, March 06, 2007 12:47 PM > To: Users-IPv6; Users-Usagi > Subject: Addrconf.c in 2.6.19.2 kernel > > To all; > Previously running Linux kernel 2.6.14.3: > > In addrconf.c, in the function "ipv6_add_dev",(see below in bold). > "dev->ip6_ptr = ndev" is set, then "ipv6_mc_init_dev(ndev)" is called > (mcast.c), which then calls "ipv6_dev_mc_inc" (mcast.c) for the "all > nodes address". > This sets "idev = in6_dev_get(dev)" and then tests if it is NULL. > > 2.6.14.3 code: > static struct inet6_dev * ipv6_add_dev(struct net_device *dev) > { > struct inet6_dev *ndev; > ~~~~ > ~~~ > > write_lock_bh(&addrconf_lock); > dev->ip6_ptr = ndev; > write_unlock_bh(&addrconf_lock); > > ipv6_mc_init_dev(ndev); > ndev->tstamp = jiffies; > #ifdef CONFIG_SYSCTL > neigh_sysctl_register(dev, ndev->nd_parms, NET_IPV6, > NET_IPV6_NEIGH, "ipv6", > &ndisc_ifinfo_sysctl_change, > NULL); > addrconf_sysctl_register(ndev, &ndev->cnf); > #endif > } > return ndev; > } > > "Idev is not NULL, so the all nodes address (FF02::1) is added to the > list and all is fine. > > ********************************************************************** > ******************* > > > Now in the 2.6.19.2 linux kernel, the "ipv6_add_dev" routine has > changed(see below). "dev->ip6_ptr = ndev" is no longer in the code. > "ipv6_mc_init_dev(ndev)" is called and then a new function > "rcu_assign_pointer(dev->ip6_ptr, ndev)" is used. > When this occurs, the call to "ipv6_dev_mc_inc" (in mcast.c) will set > "idev = in6_dev_get(dev)" and then test if it is NULL. > It is NULL, so it returns -EINVAL. > > 2.6.19.2 code: > static struct inet6_dev * ipv6_add_dev(struct net_device *dev) > { > struct inet6_dev *ndev; > > ~~~~ > ~~~~ > > if (netif_carrier_ok(dev)) > ndev->if_flags |= IF_READY; > > > ipv6_mc_init_dev(ndev); > ndev->tstamp = jiffies; > #ifdef CONFIG_SYSCTL > neigh_sysctl_register(dev, ndev->nd_parms, NET_IPV6, > NET_IPV6_NEIGH, "ipv6", > &ndisc_ifinfo_sysctl_change, > NULL); > addrconf_sysctl_register(ndev, &ndev->cnf); > #endif > /* protected by rtnl_lock */ > rcu_assign_pointer(dev->ip6_ptr, ndev); > return ndev; > } > > The all nodes address (FF02::1) is never added to the list. > > I have worked around the problem by moving the > "rcu_assign_pointer(dev->ip6_ptr, ndev)" before the call to > "ipv6_mc_init_dev(ndev)". > > Has anyone else seen this issue? > > Thanks, > Phil Bellino > > ============================ > Phil Bellino > MRV Communications, Inc. > Boston Product Division > 295 Foster St. > Littleton,MA 01460 > Tel: (978)952-4807 > Email: [EMAIL PROTECTED] > ============================ > _______________________________________________ Users mailing list Users@ipv6.org https://lists.ipv6.org/mailman/listinfo/users