aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/addrconf.c
diff options
context:
space:
mode:
authorBen Greear <greearb@candelatech.com>2014-06-25 17:44:53 -0400
committerDavid S. Miller <davem@davemloft.net>2014-07-01 15:16:24 -0400
commitd93331965729850303f6111381c1a4a9e9b8ae5a (patch)
treea2d5fbd89ff16883d860fff197cf50f4abed26ae /net/ipv6/addrconf.c
parentf2a762d8a97032e58c09c5798832e25268e1c111 (diff)
ipv6: Allow accepting RA from local IP addresses.
This can be used in virtual networking applications, and may have other uses as well. The option is disabled by default. A specific use case is setting up virtual routers, bridges, and hosts on a single OS without the use of network namespaces or virtual machines. With proper use of ip rules, routing tables, veth interface pairs and/or other virtual interfaces, and applications that can bind to interfaces and/or IP addresses, it is possibly to create one or more virtual routers with multiple hosts attached. The host interfaces can act as IPv6 systems, with radvd running on the ports in the virtual routers. With the option provided in this patch enabled, those hosts can now properly obtain IPv6 addresses from the radvd. Signed-off-by: Ben Greear <greearb@candelatech.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r--net/ipv6/addrconf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 5667b3003af9..358edd2272ac 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -186,6 +186,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
186 .max_desync_factor = MAX_DESYNC_FACTOR, 186 .max_desync_factor = MAX_DESYNC_FACTOR,
187 .max_addresses = IPV6_MAX_ADDRESSES, 187 .max_addresses = IPV6_MAX_ADDRESSES,
188 .accept_ra_defrtr = 1, 188 .accept_ra_defrtr = 1,
189 .accept_ra_from_local = 0,
189 .accept_ra_pinfo = 1, 190 .accept_ra_pinfo = 1,
190#ifdef CONFIG_IPV6_ROUTER_PREF 191#ifdef CONFIG_IPV6_ROUTER_PREF
191 .accept_ra_rtr_pref = 1, 192 .accept_ra_rtr_pref = 1,
@@ -222,6 +223,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
222 .max_desync_factor = MAX_DESYNC_FACTOR, 223 .max_desync_factor = MAX_DESYNC_FACTOR,
223 .max_addresses = IPV6_MAX_ADDRESSES, 224 .max_addresses = IPV6_MAX_ADDRESSES,
224 .accept_ra_defrtr = 1, 225 .accept_ra_defrtr = 1,
226 .accept_ra_from_local = 0,
225 .accept_ra_pinfo = 1, 227 .accept_ra_pinfo = 1,
226#ifdef CONFIG_IPV6_ROUTER_PREF 228#ifdef CONFIG_IPV6_ROUTER_PREF
227 .accept_ra_rtr_pref = 1, 229 .accept_ra_rtr_pref = 1,
@@ -4321,6 +4323,7 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
4321 array[DEVCONF_FORCE_TLLAO] = cnf->force_tllao; 4323 array[DEVCONF_FORCE_TLLAO] = cnf->force_tllao;
4322 array[DEVCONF_NDISC_NOTIFY] = cnf->ndisc_notify; 4324 array[DEVCONF_NDISC_NOTIFY] = cnf->ndisc_notify;
4323 array[DEVCONF_SUPPRESS_FRAG_NDISC] = cnf->suppress_frag_ndisc; 4325 array[DEVCONF_SUPPRESS_FRAG_NDISC] = cnf->suppress_frag_ndisc;
4326 array[DEVCONF_ACCEPT_RA_FROM_LOCAL] = cnf->accept_ra_from_local;
4324} 4327}
4325 4328
4326static inline size_t inet6_ifla6_size(void) 4329static inline size_t inet6_ifla6_size(void)
@@ -5168,6 +5171,13 @@ static struct addrconf_sysctl_table
5168 .proc_handler = proc_dointvec 5171 .proc_handler = proc_dointvec
5169 }, 5172 },
5170 { 5173 {
5174 .procname = "accept_ra_from_local",
5175 .data = &ipv6_devconf.accept_ra_from_local,
5176 .maxlen = sizeof(int),
5177 .mode = 0644,
5178 .proc_handler = proc_dointvec,
5179 },
5180 {
5171 /* sentinel */ 5181 /* sentinel */
5172 } 5182 }
5173 }, 5183 },