Subject: Re: [Resend][PATCH 01/05] ipv6: RFC4214 Support (4)

From: Vlad Yasevich <[email-masked]>
Date: Mon, 12 Nov 2007 17:11:04 -0500

Hi Fred

First, are you breaking up the functionality into multiple
patches _only_ to ease review and plan to submit the final
version as a big patch?

The reason I ask, is that you Patch 02, which adds Kconfig
pieces could break compilations if the functionality is
enabled.

Templin, Fred L wrote:
>  
> 
> -----Original Message-----
> From: osprey67 [mailto:[email-masked]] 
> Sent: Monday, November 12, 2007 7:54 AM
> To: [email-masked]
> Subject: [PATCH 01/05] ipv6: RFC4214 Support (4)
> 
> From: Fred L. Templin <[email-masked]>
> 
> 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.24-rc2
> kernel distribution.
> 
> Signed-off-by: Fred L. Templin <[email-masked]>
> 
> ---
> 
> --- linux-2.6.24-rc2/include/linux/if.h.orig    2007-11-08
> 12:05:47.000000000 -0800
> +++ linux-2.6.24-rc2/include/linux/if.h 2007-11-08 08:26:44.000000000
> -0800
> @@ -61,6 +61,7 @@
>   #define IFF_MASTER_ALB 0x10            /* bonding master, balance-alb.
> */
>   #define IFF_BONDING    0x20            /* bonding master or slave
> */
>   #define IFF_SLAVE_NEEDARP 0x40         /* need ARPs for validation
> */
> +#define IFF_ISATAP     0x80            /* ISATAP interface (RFC4214)
> */
> 
>   #define IF_GET_IFACE   0x0001          /* for querying only */
>   #define IF_GET_PROTO   0x0002
> --- linux-2.6.24-rc2/include/linux/in.h.orig    2007-11-09
> 08:00:32.000000000 -0800
> +++ linux-2.6.24-rc2/include/linux/in.h 2007-11-12 07:37:05.000000000
> -0800
> @@ -253,6 +253,14 @@ struct sockaddr_in {
>   #define ZERONET(x)     (((x) & htonl(0xff000000)) ==
> htonl(0x00000000))
>   #define LOCAL_MCAST(x) (((x) & htonl(0xFFFFFF00)) ==
> htonl(0xE0000000))
> 
> +/* Special-Use IPv4 Addresses (RFC3330) */
> +#define PRIVATE_10(x)  (((x) & htonl(0xff000000)) == htonl(0x0A000000))
> +#define LINKLOCAL_169(x) (((x) & htonl(0xffff0000)) ==
> htonl(0xA9FE0000))
> +#define PRIVATE_172(x) (((x) & htonl(0xfff00000)) == htonl(0xAC100000))
> +#define TEST_192(x)    (((x) & htonl(0xffffff00)) == htonl(0xC0000200))
> +#define ANYCAST_6TO4(x)        (((x) & htonl(0xffffff00)) ==
> htonl(0xC0586300))
> +#define PRIVATE_192(x) (((x) & htonl(0xffff0000)) == htonl(0xC0A80000))
> +#define TEST_198(x)    (((x) & htonl(0xfffe0000)) == htonl(0xC6120000))
>   #endif
> 
>   #endif /* _LINUX_IN_H */
> --- linux-2.6.24-rc2/include/net/addrconf.h.orig        2007-11-08
> 12:06:17.000000000 -0800
> +++ linux-2.6.24-rc2/include/net/addrconf.h     2007-11-09
> 08:12:29.000000000 -0800
> @@ -241,6 +241,14 @@ static inline int ipv6_addr_is_ll_all_ro
>                  addr->s6_addr32[3] == htonl(0x00000002));
>   }
> 
> +#if defined(CONFIG_IPV6_ISATAP)
> +/* only for IFF_ISATAP interfaces */
> +static inline int ipv6_addr_is_isatap(const struct in6_addr *addr)
> +{
> +       return ((addr->s6_addr32[2] | htonl(0x02000000)) ==
> htonl(0x02005EFE));
> +}
> +#endif
> +

I don't see the need for the # if above.

-vlad