summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2006-03-20 17:06:24 -0800
committerDavid S. Miller <davem@davemloft.net>2006-03-20 17:06:24 -0800
commit70ceb4f53929f73746be72f73707cd9f8753e2fc (patch)
treee562929b0c800b0243e203587065e05323baba59 /include
parent52e1635631b342803aecaf81a362c1464e3da2e5 (diff)
downloadlwn-70ceb4f53929f73746be72f73707cd9f8753e2fc.tar.gz
lwn-70ceb4f53929f73746be72f73707cd9f8753e2fc.zip
[IPV6]: ROUTE: Add experimental support for Route Information Option in RA (RFC4191).
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/ipv6_route.h2
-rw-r--r--include/net/ip6_route.h21
-rw-r--r--include/net/ndisc.h2
3 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/ipv6_route.h b/include/linux/ipv6_route.h
index f4b085c91608..b323ff577967 100644
--- a/include/linux/ipv6_route.h
+++ b/include/linux/ipv6_route.h
@@ -23,6 +23,8 @@
#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */
#define RTF_EXPIRES 0x00400000
+#define RTF_ROUTEINFO 0x00800000 /* route information - RA */
+
#define RTF_CACHE 0x01000000 /* cache entry */
#define RTF_FLOW 0x02000000 /* flow significant route */
#define RTF_POLICY 0x04000000 /* policy route */
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index 50161322b828..a398ae5e30f9 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -7,6 +7,23 @@
#define IP6_RT_PRIO_KERN 512
#define IP6_RT_FLOW_MASK 0x00ff
+struct route_info {
+ __u8 type;
+ __u8 length;
+ __u8 prefix_len;
+#if defined(__BIG_ENDIAN_BITFIELD)
+ __u8 reserved_h:3,
+ route_pref:2,
+ reserved_l:3;
+#elif defined(__LITTLE_ENDIAN_BITFIELD)
+ __u8 reserved_l:3,
+ route_pref:2,
+ reserved_h:3;
+#endif
+ __u32 lifetime;
+ __u8 prefix[0]; /* 0,8 or 16 */
+};
+
#ifdef __KERNEL__
#include <net/flow.h>
@@ -92,6 +109,10 @@ extern struct rt6_info * rt6_add_dflt_router(struct in6_addr *gwaddr,
extern void rt6_purge_dflt_routers(void);
+extern int rt6_route_rcv(struct net_device *dev,
+ u8 *opt, int len,
+ struct in6_addr *gwaddr);
+
extern void rt6_redirect(struct in6_addr *dest,
struct in6_addr *saddr,
struct neighbour *neigh,
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index bbac87eeb422..91fa271a0064 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -22,6 +22,8 @@ enum {
ND_OPT_PREFIX_INFO = 3, /* RFC2461 */
ND_OPT_REDIRECT_HDR = 4, /* RFC2461 */
ND_OPT_MTU = 5, /* RFC2461 */
+ __ND_OPT_ARRAY_MAX,
+ ND_OPT_ROUTE_INFO = 24, /* RFC4191 */
__ND_OPT_MAX
};