diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/addrconf.c | 19 | ||||
-rw-r--r-- | net/ipv6/ndisc.c | 3 |
2 files changed, 21 insertions, 1 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 631b51d0ccbc..51edba5fea26 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -167,6 +167,9 @@ struct ipv6_devconf ipv6_devconf = { | |||
167 | .max_addresses = IPV6_MAX_ADDRESSES, | 167 | .max_addresses = IPV6_MAX_ADDRESSES, |
168 | .accept_ra_defrtr = 1, | 168 | .accept_ra_defrtr = 1, |
169 | .accept_ra_pinfo = 1, | 169 | .accept_ra_pinfo = 1, |
170 | #ifdef CONFIG_IPV6_ROUTER_PREF | ||
171 | .accept_ra_rtr_pref = 1, | ||
172 | #endif | ||
170 | }; | 173 | }; |
171 | 174 | ||
172 | static struct ipv6_devconf ipv6_devconf_dflt = { | 175 | static struct ipv6_devconf ipv6_devconf_dflt = { |
@@ -190,6 +193,9 @@ static struct ipv6_devconf ipv6_devconf_dflt = { | |||
190 | .max_addresses = IPV6_MAX_ADDRESSES, | 193 | .max_addresses = IPV6_MAX_ADDRESSES, |
191 | .accept_ra_defrtr = 1, | 194 | .accept_ra_defrtr = 1, |
192 | .accept_ra_pinfo = 1, | 195 | .accept_ra_pinfo = 1, |
196 | #ifdef CONFIG_IPV6_ROUTER_PREF | ||
197 | .accept_ra_rtr_pref = 1, | ||
198 | #endif | ||
193 | }; | 199 | }; |
194 | 200 | ||
195 | /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ | 201 | /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ |
@@ -3122,6 +3128,9 @@ static void inline ipv6_store_devconf(struct ipv6_devconf *cnf, | |||
3122 | array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses; | 3128 | array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses; |
3123 | array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr; | 3129 | array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr; |
3124 | array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo; | 3130 | array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo; |
3131 | #ifdef CONFIG_IPV6_ROUTER_PREF | ||
3132 | array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref; | ||
3133 | #endif | ||
3125 | } | 3134 | } |
3126 | 3135 | ||
3127 | static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, | 3136 | static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev, |
@@ -3590,6 +3599,16 @@ static struct addrconf_sysctl_table | |||
3590 | .mode = 0644, | 3599 | .mode = 0644, |
3591 | .proc_handler = &proc_dointvec, | 3600 | .proc_handler = &proc_dointvec, |
3592 | }, | 3601 | }, |
3602 | #ifdef CONFIG_IPV6_ROUTER_PREF | ||
3603 | { | ||
3604 | .ctl_name = NET_IPV6_ACCEPT_RA_RTR_PREF, | ||
3605 | .procname = "accept_ra_rtr_pref", | ||
3606 | .data = &ipv6_devconf.accept_ra_rtr_pref, | ||
3607 | .maxlen = sizeof(int), | ||
3608 | .mode = 0644, | ||
3609 | .proc_handler = &proc_dointvec, | ||
3610 | }, | ||
3611 | #endif | ||
3593 | { | 3612 | { |
3594 | .ctl_name = 0, /* sentinel */ | 3613 | .ctl_name = 0, /* sentinel */ |
3595 | } | 3614 | } |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 966ab6b3022e..f4462ee33024 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1090,7 +1090,8 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1090 | #ifdef CONFIG_IPV6_ROUTER_PREF | 1090 | #ifdef CONFIG_IPV6_ROUTER_PREF |
1091 | pref = ra_msg->icmph.icmp6_router_pref; | 1091 | pref = ra_msg->icmph.icmp6_router_pref; |
1092 | /* 10b is handled as if it were 00b (medium) */ | 1092 | /* 10b is handled as if it were 00b (medium) */ |
1093 | if (pref == ICMPV6_ROUTER_PREF_INVALID) | 1093 | if (pref == ICMPV6_ROUTER_PREF_INVALID || |
1094 | in6_dev->cnf.accept_ra_rtr_pref) | ||
1094 | pref = ICMPV6_ROUTER_PREF_MEDIUM; | 1095 | pref = ICMPV6_ROUTER_PREF_MEDIUM; |
1095 | #endif | 1096 | #endif |
1096 | 1097 | ||