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/include/net/addrconf.h.orig 2007-10-09 13:31:38.000000000 -0700 +++ linux-2.6.23/include/net/addrconf.h 2007-10-26 10:49:40.000000000 -0700 @@ -241,6 +241,34 @@ static inline int ipv6_addr_is_ll_all_ro addr->s6_addr32[3] == htonl(0x00000002)); } +#if defined(CONFIG_IPV6_ISATAP) +static inline int ipv6_isatap_eui64(u8 *eui, __be32 *addr) +{ + __be32 ipv4 = ntohl(*addr); + + eui[0] = 0; + + /* Check for RFC3330 global address ranges */ + if (((ipv4 >= 0x01000000) && (ipv4 < 0x0a000000)) || + ((ipv4 >= 0x0b000000) && (ipv4 < 0x7f000000)) || + ((ipv4 >= 0x80000000) && (ipv4 < 0xa9fe0000)) || + ((ipv4 >= 0xa9ff0000) && (ipv4 < 0xac100000)) || + ((ipv4 >= 0xac200000) && (ipv4 < 0xc0a80000)) || + ((ipv4 >= 0xc0a90000) && (ipv4 < 0xc6120000)) || + ((ipv4 >= 0xc6140000) && (ipv4 < 0xe0000000))) eui[0] |= 0x2; + + eui[1] = 0; eui[2] = 0x5E; eui[3] = 0xFE; + memcpy (eui+4, addr, 4); + return (0); +} + +static inline int ipv6_addr_is_isatap(const struct in6_addr *addr) +{ + return (addr->s6_addr32[2] == __constant_htonl(0x02005EFE) || + addr->s6_addr32[2] == __constant_htonl(0x00005EFE)); +} +#endif + #ifdef CONFIG_PROC_FS extern int if6_proc_init(void); extern void if6_proc_exit(void); - 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