diff options
| author | YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> | 2006-03-20 20:04:53 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2006-03-20 20:04:53 -0500 |
| commit | ebacaaa0fdf4402cdf4c8e569f54af36b6f0aa2d (patch) | |
| tree | 5d1cc0c6d94b5226507434bb86e6e2a69fdd4204 /include | |
| parent | 8238dd0698b480e432acd955c45f9f907b8d27de (diff) | |
[IPV6]: ROUTE: Add support for Router Preference (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/icmpv6.h | 11 | ||||
| -rw-r--r-- | include/linux/ipv6_route.h | 8 | ||||
| -rw-r--r-- | include/net/ip6_route.h | 3 |
3 files changed, 19 insertions, 3 deletions
diff --git a/include/linux/icmpv6.h b/include/linux/icmpv6.h index 0cf6c8b12caf..c771a7db9871 100644 --- a/include/linux/icmpv6.h +++ b/include/linux/icmpv6.h | |||
| @@ -40,14 +40,16 @@ struct icmp6hdr { | |||
| 40 | struct icmpv6_nd_ra { | 40 | struct icmpv6_nd_ra { |
| 41 | __u8 hop_limit; | 41 | __u8 hop_limit; |
| 42 | #if defined(__LITTLE_ENDIAN_BITFIELD) | 42 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
| 43 | __u8 reserved:6, | 43 | __u8 reserved:4, |
| 44 | router_pref:2, | ||
| 44 | other:1, | 45 | other:1, |
| 45 | managed:1; | 46 | managed:1; |
| 46 | 47 | ||
| 47 | #elif defined(__BIG_ENDIAN_BITFIELD) | 48 | #elif defined(__BIG_ENDIAN_BITFIELD) |
| 48 | __u8 managed:1, | 49 | __u8 managed:1, |
| 49 | other:1, | 50 | other:1, |
| 50 | reserved:6; | 51 | router_pref:2, |
| 52 | reserved:4; | ||
| 51 | #else | 53 | #else |
| 52 | #error "Please fix <asm/byteorder.h>" | 54 | #error "Please fix <asm/byteorder.h>" |
| 53 | #endif | 55 | #endif |
| @@ -70,8 +72,13 @@ struct icmp6hdr { | |||
| 70 | #define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed | 72 | #define icmp6_addrconf_managed icmp6_dataun.u_nd_ra.managed |
| 71 | #define icmp6_addrconf_other icmp6_dataun.u_nd_ra.other | 73 | #define icmp6_addrconf_other icmp6_dataun.u_nd_ra.other |
| 72 | #define icmp6_rt_lifetime icmp6_dataun.u_nd_ra.rt_lifetime | 74 | #define icmp6_rt_lifetime icmp6_dataun.u_nd_ra.rt_lifetime |
| 75 | #define icmp6_router_pref icmp6_dataun.u_nd_ra.router_pref | ||
| 73 | }; | 76 | }; |
| 74 | 77 | ||
| 78 | #define ICMPV6_ROUTER_PREF_LOW 0x3 | ||
| 79 | #define ICMPV6_ROUTER_PREF_MEDIUM 0x0 | ||
| 80 | #define ICMPV6_ROUTER_PREF_HIGH 0x1 | ||
| 81 | #define ICMPV6_ROUTER_PREF_INVALID 0x2 | ||
| 75 | 82 | ||
| 76 | #define ICMPV6_DEST_UNREACH 1 | 83 | #define ICMPV6_DEST_UNREACH 1 |
| 77 | #define ICMPV6_PKT_TOOBIG 2 | 84 | #define ICMPV6_PKT_TOOBIG 2 |
diff --git a/include/linux/ipv6_route.h b/include/linux/ipv6_route.h index d7c41d1d706a..f4b085c91608 100644 --- a/include/linux/ipv6_route.h +++ b/include/linux/ipv6_route.h | |||
| @@ -27,8 +27,16 @@ | |||
| 27 | #define RTF_FLOW 0x02000000 /* flow significant route */ | 27 | #define RTF_FLOW 0x02000000 /* flow significant route */ |
| 28 | #define RTF_POLICY 0x04000000 /* policy route */ | 28 | #define RTF_POLICY 0x04000000 /* policy route */ |
| 29 | 29 | ||
| 30 | #define RTF_PREF(pref) ((pref) << 27) | ||
| 31 | #define RTF_PREF_MASK 0x18000000 | ||
| 32 | |||
| 30 | #define RTF_LOCAL 0x80000000 | 33 | #define RTF_LOCAL 0x80000000 |
| 31 | 34 | ||
| 35 | #ifdef __KERNEL__ | ||
| 36 | #define IPV6_EXTRACT_PREF(flag) (((flag) & RTF_PREF_MASK) >> 27) | ||
| 37 | #define IPV6_DECODE_PREF(pref) ((pref) ^ 2) /* 1:low,2:med,3:high */ | ||
| 38 | #endif | ||
| 39 | |||
| 32 | struct in6_rtmsg { | 40 | struct in6_rtmsg { |
| 33 | struct in6_addr rtmsg_dst; | 41 | struct in6_addr rtmsg_dst; |
| 34 | struct in6_addr rtmsg_src; | 42 | struct in6_addr rtmsg_src; |
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 01acca06d6dd..50161322b828 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
| @@ -87,7 +87,8 @@ extern struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev, | |||
| 87 | extern struct rt6_info * rt6_get_dflt_router(struct in6_addr *addr, | 87 | extern struct rt6_info * rt6_get_dflt_router(struct in6_addr *addr, |
| 88 | struct net_device *dev); | 88 | struct net_device *dev); |
| 89 | extern struct rt6_info * rt6_add_dflt_router(struct in6_addr *gwaddr, | 89 | extern struct rt6_info * rt6_add_dflt_router(struct in6_addr *gwaddr, |
| 90 | struct net_device *dev); | 90 | struct net_device *dev, |
| 91 | unsigned int pref); | ||
| 91 | 92 | ||
| 92 | extern void rt6_purge_dflt_routers(void); | 93 | extern void rt6_purge_dflt_routers(void); |
| 93 | 94 | ||
