> -----Original Message----- > From: Stephen Hemminger [mailto:[EMAIL PROTECTED] > Sent: Wednesday, November 07, 2007 9:37 AM > To: Templin, Fred L > Cc: netdev@vger.kernel.org > Subject: Re: [PATCH 03/05] ipv6: RFC4214 Support > > On Tue, 6 Nov 2007 17:16:07 -0800 > "Templin, Fred L" <[EMAIL PROTECTED]> wrote: > > > From: Fred L. Templin <[EMAIL PROTECTED]> > > > > This is experimental support for the Intra-Site Automatic > > Tunnel Addressing Protocol (ISATAP) per RFC4214. It uses > > the SIT module, and is configured using the unmodified > > "ip" utility with device names beginning with: "isatap". > > > > The following diffs are specific to the Linux 2.6.23 > > kernel distribution. > > > > Signed-off-by: Fred L. Templin <[EMAIL PROTECTED]> > > > > --- > > > > --- linux-2.6.23/net/ipv6/addrconf.c.orig 2007-10-09 > > 13:31:38.000000000 -0700 > > +++ linux-2.6.23/net/ipv6/addrconf.c 2007-10-31 > 13:08:45.000000000 > > -0700 > > @@ -73,7 +73,11 @@ > > #include <net/tcp.h> > > #include <net/ip.h> > > #include <net/netlink.h> > > +#if defined(CONFIG_IPV6_ISATAP) > > +#include <net/ipip.h> > > +#else > > #include <linux/if_tunnel.h> > > +#endif > > That seems odd, changing includes used based on config option.
The change was to remove the conditional and simply include <net/ipip.h>, since it also includes <linux/if_tunnel.h>. > > #include <linux/rtnetlink.h> > > > > #ifdef CONFIG_IPV6_PRIVACY > > @@ -1426,6 +1430,11 @@ static int ipv6_generate_eui64(u8 *eui, > > return addrconf_ifid_arcnet(eui, dev); > > case ARPHRD_INFINIBAND: > > return addrconf_ifid_infiniband(eui, dev); > > +#if defined(CONFIG_IPV6_ISATAP) > > + case ARPHRD_SIT: > > + if (dev->priv_flags&IFF_ISATAP) > > + return ipv6_isatap_eui64(eui, (__be32 *)dev->dev_addr); > > +#endif > Missing indentation Fixed. > > } > > return -1; > > } > > @@ -2138,7 +2147,6 @@ static void addrconf_add_linklocal(struc > > addr_flags |= IFA_F_OPTIMISTIC; > > #endif > > > > - > > avoid random whitespace changes Fixed. > > ifp = ipv6_add_addr(idev, addr, 64, IFA_LINK, addr_flags); > > if (!IS_ERR(ifp)) { > > addrconf_prefix_route(&ifp->addr, ifp->prefix_len, > > idev->dev, 0, 0); > > @@ -2192,6 +2200,32 @@ static void addrconf_sit_config(struct n > > return; > > } > > > > +#if defined(CONFIG_IPV6_ISATAP) > > + /* ISATAP (RFC4214) - configure as NBMA link */ > > + if (dev->priv_flags&IFF_ISATAP) { > > missing spaces around & operator Fixed. > > + struct in6_addr addr; > > + > > + addrconf_add_lroute(dev); > > + > > + addr.s6_addr32[0] = htonl(0xFE800000); > > shouldn't this be defined somewhere rather than hardcoded > magic constant? Well, I see this occurring elsewhere within addrconf.c. I did however change: - addr.s6_addr32[0] = htonl(0xFE800000); - addr.s6_addr32[1] = 0; to: + ipv6_addr_set(&addr, htonl(0xFE800000), 0, 0, 0); (Similar change occurred in 2 other places.) > > + addr.s6_addr32[1] = 0; > > + > > + if (ipv6_generate_eui64(addr.s6_addr + 8, dev) == 0) { > > + struct inet6_ifaddr *ifp; > > + > > + if (!IS_ERR(ifp = ipv6_add_addr(idev, &addr, 64, > > + IFA_LINK, IFA_F_PERMANENT))) { > > split assignment and conditional please Fixed. > > + addrconf_prefix_route(&ifp->addr, > > ifp->prefix_len, > > + idev->dev, 0, 0); > > + addrconf_dad_start(ifp, 0); > > + in6_ifa_put(ifp); > > + } > > + } > > + > > + return; > > + } > > +#endif > > + > > sit_add_v4_addrs(idev); > > > > if (dev->flags&IFF_POINTOPOINT) { > > @@ -2521,6 +2555,16 @@ static void addrconf_rs_timer(unsigned l > > * Announcement received after solicitation > > * was sent > > */ > > +#if defined(CONFIG_IPV6_ISATAP) > > + /* ISATAP (RFC4214) - Re-DAD to trigger new RS/RA */ > > + if (ifp->idev->dev->priv_flags & IFF_ISATAP) { > > + spin_lock(&ifp->lock); > > + ifp->probes = 0; > > + ifp->idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD); > > + addrconf_mod_timer(ifp, AC_DAD, HZ*120); > > + spin_unlock(&ifp->lock); > > + } > > +#endif > > goto out; > > } > > > > @@ -2535,10 +2579,32 @@ static void addrconf_rs_timer(unsigned l > > ifp->idev->cnf.rtr_solicit_interval); > > spin_unlock(&ifp->lock); > > > > +#if defined(CONFIG_IPV6_ISATAP) > > + /* ISATAP (RFC4214) - unicast RS */ > > + if (ifp->idev->dev->priv_flags & IFF_ISATAP) { > > + struct ip_tunnel *t = netdev_priv(ifp->idev->dev); > > Please follow kernel indentation standard of tabs (not 4 spaces). Fixed everywhere in addrconf.c, and also in sit.c. Fred [EMAIL PROTECTED] > > + __be32 rtr = t->parms.i_key; > > + > > + if (!rtr) goto out; > > + > > + all_routers.s6_addr32[0] = htonl(0xFE800000); > > + all_routers.s6_addr32[1] = 0; > > + ipv6_isatap_eui64(all_routers.s6_addr + 8, &rtr); > > + > > + } else > > +#endif > > ipv6_addr_all_routers(&all_routers); > > > > ndisc_send_rs(ifp->idev->dev, &ifp->addr, &all_routers); > > } else { > > +#if defined(CONFIG_IPV6_ISATAP) > > + /* ISATAP (RFC4214) - Re-DAD to trigger new RS/RA */ > > + if (ifp->idev->dev->priv_flags & IFF_ISATAP) { > > + ifp->probes = 0; > > + ifp->idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD); > > + addrconf_mod_timer(ifp, AC_DAD, HZ*120); > > + } > > +#endif > > spin_unlock(&ifp->lock); > > /* > > * Note: we do not support deprecated "all on-link" > > @@ -2584,6 +2650,9 @@ static void addrconf_dad_start(struct in > > spin_lock_bh(&ifp->lock); > > > > if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || > > +#if defined(CONFIG_IPV6_ISATAP) > > + dev->priv_flags&IFF_ISATAP || > > +#endif > > !(ifp->flags&IFA_F_TENTATIVE) || > > ifp->flags & IFA_F_NODAD) { > > ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC); > > @@ -2680,6 +2749,20 @@ static void addrconf_dad_completed(struc > > (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) { > > struct in6_addr all_routers; > > > > +#if defined(CONFIG_IPV6_ISATAP) > > + /* ISATAP (RFC4214) - unicast RS */ > > + if (ifp->idev->dev->priv_flags & IFF_ISATAP) { > > + struct ip_tunnel *t = netdev_priv(ifp->idev->dev); > > + __be32 rtr = t->parms.i_key; > > + > > + if (!rtr) return; > > + > > + all_routers.s6_addr32[0] = htonl(0xFE800000); > > + all_routers.s6_addr32[1] = 0; > > + ipv6_isatap_eui64(all_routers.s6_addr + 8, &rtr); > > + > > + } else > > +#endif > > ipv6_addr_all_routers(&all_routers); > > > > /* > > - > > To unsubscribe from this list: send the line "unsubscribe netdev" in > > the body of a message to [EMAIL PROTECTED] > > More majordomo info at http://vger.kernel.org/majordomo-info.html > > > -- > Stephen Hemminger <[EMAIL PROTECTED]> > - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html