diff options
-rw-r--r-- | Documentation/networking/ip-sysctl.txt | 6 | ||||
-rw-r--r-- | include/linux/ipv6.h | 4 | ||||
-rw-r--r-- | include/linux/sysctl.h | 1 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 19 | ||||
-rw-r--r-- | net/ipv6/ndisc.c | 3 |
5 files changed, 32 insertions, 1 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index 404afacb468d..87bbd774c2b2 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -729,6 +729,12 @@ accept_ra_pinfo - BOOLEAN | |||
729 | Functional default: enabled if accept_ra is enabled. | 729 | Functional default: enabled if accept_ra is enabled. |
730 | disabled if accept_ra is disabled. | 730 | disabled if accept_ra is disabled. |
731 | 731 | ||
732 | accept_ra_rtr_pref - BOOLEAN | ||
733 | Accept Router Preference in RA. | ||
734 | |||
735 | Functional default: enabled if accept_ra is enabled. | ||
736 | disabled if accept_ra is disabled. | ||
737 | |||
732 | accept_redirects - BOOLEAN | 738 | accept_redirects - BOOLEAN |
733 | Accept Redirects. | 739 | Accept Redirects. |
734 | 740 | ||
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 2c3b799480c5..108b75dccd9f 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
@@ -147,6 +147,9 @@ struct ipv6_devconf { | |||
147 | __s32 max_addresses; | 147 | __s32 max_addresses; |
148 | __s32 accept_ra_defrtr; | 148 | __s32 accept_ra_defrtr; |
149 | __s32 accept_ra_pinfo; | 149 | __s32 accept_ra_pinfo; |
150 | #ifdef CONFIG_IPV6_ROUTER_PREF | ||
151 | __s32 accept_ra_rtr_pref; | ||
152 | #endif | ||
150 | void *sysctl; | 153 | void *sysctl; |
151 | }; | 154 | }; |
152 | 155 | ||
@@ -171,6 +174,7 @@ enum { | |||
171 | DEVCONF_FORCE_MLD_VERSION, | 174 | DEVCONF_FORCE_MLD_VERSION, |
172 | DEVCONF_ACCEPT_RA_DEFRTR, | 175 | DEVCONF_ACCEPT_RA_DEFRTR, |
173 | DEVCONF_ACCEPT_RA_PINFO, | 176 | DEVCONF_ACCEPT_RA_PINFO, |
177 | DEVCONF_ACCEPT_RA_RTR_PREF, | ||
174 | DEVCONF_MAX | 178 | DEVCONF_MAX |
175 | }; | 179 | }; |
176 | 180 | ||
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index 09378ea505bd..236f537b38d2 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -533,6 +533,7 @@ enum { | |||
533 | NET_IPV6_FORCE_MLD_VERSION=17, | 533 | NET_IPV6_FORCE_MLD_VERSION=17, |
534 | NET_IPV6_ACCEPT_RA_DEFRTR=18, | 534 | NET_IPV6_ACCEPT_RA_DEFRTR=18, |
535 | NET_IPV6_ACCEPT_RA_PINFO=19, | 535 | NET_IPV6_ACCEPT_RA_PINFO=19, |
536 | NET_IPV6_ACCEPT_RA_RTR_PREF=20, | ||
536 | __NET_IPV6_MAX | 537 | __NET_IPV6_MAX |
537 | }; | 538 | }; |
538 | 539 | ||
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 | ||