summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2013-12-07 22:26:57 +0400
committerDavid S. Miller <davem@davemloft.net>2013-12-10 05:56:12 +0400
commitbba24896f022d4d239494bebf18e713cd8aec7a5 (patch)
tree03fc9ec1ff30dcc822c1a7ff421b69b1e9228502 /net
parent1d4c8c29841b9991cdf3c7cc4ba7f96a94f104ca (diff)
downloadlinux-bba24896f022d4d239494bebf18e713cd8aec7a5.tar.xz
neigh: ipv6: respect default values set before an address is assigned to device
Make the behaviour similar to ipv4. This will allow user to set sysctl default neigh param values and these values will be respected even by devices registered before (that ones what do not have address set yet). Signed-off-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/neighbour.c7
-rw-r--r--net/ipv6/addrconf.c2
2 files changed, 8 insertions, 1 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index c4a7879bfb15..ce2b77515a9e 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -39,6 +39,7 @@
#include <linux/string.h>
#include <linux/log2.h>
#include <linux/inetdevice.h>
+#include <net/addrconf.h>
#define DEBUG
#define NEIGH_DEBUG 1
@@ -2819,8 +2820,12 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write,
static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
int family)
{
- if (family == AF_INET)
+ switch (family) {
+ case AF_INET:
return __in_dev_arp_parms_get_rcu(dev);
+ case AF_INET6:
+ return __in6_dev_nd_parms_get_rcu(dev);
+ }
return NULL;
}
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index ea8a475fa8c5..be4dbbd17d3b 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -834,6 +834,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
goto out;
}
+ neigh_parms_data_state_setall(idev->nd_parms);
+
ifa->addr = *addr;
if (peer_addr)
ifa->peer_addr = *peer_addr;