diff options
author | Fred L. Templin <fred.l.templin@boeing.com> | 2007-11-29 06:11:40 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:55:09 -0500 |
commit | c7dc89c0ac8e7c3796bff91becf58ccdbcaf9f18 (patch) | |
tree | e876ccadf29a90b7a211522aeccfd42255dab586 /include/net/addrconf.h | |
parent | df97c708d5e6eebdd9ded1fa588eae09acf53793 (diff) |
[IPV6]: Add RFC4214 support
This patch includes support for the Intra-Site Automatic Tunnel
Addressing Protocol (ISATAP) per RFC4214. It uses the SIT
module, and is configured using extensions to the "iproute2"
utility. The diffs are specific to the Linux 2.6.24-rc2 kernel
distribution.
This version includes the diff for ./include/linux/if.h which was
missing in the v2.4 submission and is needed to make the
patch compile. The patch has been installed, compiled and
tested in a clean 2.6.24-rc2 kernel build area.
Signed-off-by: Fred L. Templin <fred.l.templin@boeing.com>
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/addrconf.h')
-rw-r--r-- | include/net/addrconf.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index bccc2feb99da..c56827da0dee 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #define IPV6_MAX_ADDRESSES 16 | 18 | #define IPV6_MAX_ADDRESSES 16 |
19 | 19 | ||
20 | #include <linux/in.h> | ||
20 | #include <linux/in6.h> | 21 | #include <linux/in6.h> |
21 | 22 | ||
22 | struct prefix_info { | 23 | struct prefix_info { |
@@ -249,6 +250,24 @@ static inline int ipv6_addr_is_ll_all_routers(const struct in6_addr *addr) | |||
249 | addr->s6_addr32[3] == htonl(0x00000002)); | 250 | addr->s6_addr32[3] == htonl(0x00000002)); |
250 | } | 251 | } |
251 | 252 | ||
253 | static inline int ipv6_isatap_eui64(u8 *eui, __be32 addr) | ||
254 | { | ||
255 | eui[0] = (ZERONET(addr) || PRIVATE_10(addr) || LOOPBACK(addr) || | ||
256 | LINKLOCAL_169(addr) || PRIVATE_172(addr) || TEST_192(addr) || | ||
257 | ANYCAST_6TO4(addr) || PRIVATE_192(addr) || TEST_198(addr) || | ||
258 | MULTICAST(addr) || BADCLASS(addr)) ? 0x00 : 0x02; | ||
259 | eui[1] = 0; | ||
260 | eui[2] = 0x5E; | ||
261 | eui[3] = 0xFE; | ||
262 | memcpy (eui+4, &addr, 4); | ||
263 | return 0; | ||
264 | } | ||
265 | |||
266 | static inline int ipv6_addr_is_isatap(const struct in6_addr *addr) | ||
267 | { | ||
268 | return ((addr->s6_addr32[2] | htonl(0x02000000)) == htonl(0x02005EFE)); | ||
269 | } | ||
270 | |||
252 | #ifdef CONFIG_PROC_FS | 271 | #ifdef CONFIG_PROC_FS |
253 | extern int if6_proc_init(void); | 272 | extern int if6_proc_init(void); |
254 | extern void if6_proc_exit(void); | 273 | extern void if6_proc_exit(void); |