Netdev List
 help / color / mirror / Atom feed
* [PATCH 03/05] ipv6: RFC4214 Support
@ 2007-11-07  1:16 Templin, Fred L
  2007-11-07 17:37 ` Stephen Hemminger
  0 siblings, 1 reply; 3+ messages in thread
From: Templin, Fred L @ 2007-11-07  1:16 UTC (permalink / raw)
  To: netdev

From: Fred L. Templin <fred.l.templin@boeing.com>

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 <fred.l.templin@boeing.com>

---

--- 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
 #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
 	}
 	return -1;
 }
@@ -2138,7 +2147,6 @@ static void addrconf_add_linklocal(struc
 		addr_flags |= IFA_F_OPTIMISTIC;
 #endif
 
-
 	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) {
+		struct in6_addr addr;
+
+		addrconf_add_lroute(dev);
+
+		addr.s6_addr32[0] = htonl(0xFE800000);
+		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))) {
+			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);
+		    __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);
 
 		/*

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 03/05] ipv6: RFC4214 Support
  2007-11-07  1:16 [PATCH 03/05] ipv6: RFC4214 Support Templin, Fred L
@ 2007-11-07 17:37 ` Stephen Hemminger
  2007-11-07 18:21   ` Templin, Fred L
  0 siblings, 1 reply; 3+ messages in thread
From: Stephen Hemminger @ 2007-11-07 17:37 UTC (permalink / raw)
  To: Templin, Fred L; +Cc: netdev

On Tue, 6 Nov 2007 17:16:07 -0800
"Templin, Fred L" <Fred.L.Templin@boeing.com> wrote:

> From: Fred L. Templin <fred.l.templin@boeing.com>
> 
> 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 <fred.l.templin@boeing.com>
> 
> ---
> 
> --- 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.


>  #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


>  	}
>  	return -1;
>  }
> @@ -2138,7 +2147,6 @@ static void addrconf_add_linklocal(struc
>  		addr_flags |= IFA_F_OPTIMISTIC;
>  #endif
>  
> -

avoid random whitespace changes

>  	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

> +		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?

> +		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


> +			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).

> +		    __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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Stephen Hemminger <shemminger@linux-foundation.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: [PATCH 03/05] ipv6: RFC4214 Support
  2007-11-07 17:37 ` Stephen Hemminger
@ 2007-11-07 18:21   ` Templin, Fred L
  0 siblings, 0 replies; 3+ messages in thread
From: Templin, Fred L @ 2007-11-07 18:21 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev

 

> -----Original Message-----
> From: Stephen Hemminger [mailto:shemminger@linux-foundation.org] 
> 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" <Fred.L.Templin@boeing.com> wrote:
> 
> > From: Fred L. Templin <fred.l.templin@boeing.com>
> > 
> > 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 <fred.l.templin@boeing.com>
> > 
> > ---
> > 
> > --- 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
fred.l.templin@boeing.com

 
> > +		    __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 majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> -- 
> Stephen Hemminger <shemminger@linux-foundation.org>
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-11-07 18:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-07  1:16 [PATCH 03/05] ipv6: RFC4214 Support Templin, Fred L
2007-11-07 17:37 ` Stephen Hemminger
2007-11-07 18:21   ` Templin, Fred L

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox