Commit bba24896 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

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: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1d4c8c29
...@@ -248,6 +248,13 @@ static inline struct inet6_dev *in6_dev_get(const struct net_device *dev) ...@@ -248,6 +248,13 @@ static inline struct inet6_dev *in6_dev_get(const struct net_device *dev)
return idev; return idev;
} }
static inline struct neigh_parms *__in6_dev_nd_parms_get_rcu(const struct net_device *dev)
{
struct inet6_dev *idev = __in6_dev_get(dev);
return idev ? idev->nd_parms : NULL;
}
void in6_dev_finish_destroy(struct inet6_dev *idev); void in6_dev_finish_destroy(struct inet6_dev *idev);
static inline void in6_dev_put(struct inet6_dev *idev) static inline void in6_dev_put(struct inet6_dev *idev)
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/log2.h> #include <linux/log2.h>
#include <linux/inetdevice.h> #include <linux/inetdevice.h>
#include <net/addrconf.h>
#define DEBUG #define DEBUG
#define NEIGH_DEBUG 1 #define NEIGH_DEBUG 1
...@@ -2819,8 +2820,12 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write, ...@@ -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, static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
int family) int family)
{ {
if (family == AF_INET) switch (family) {
case AF_INET:
return __in_dev_arp_parms_get_rcu(dev); return __in_dev_arp_parms_get_rcu(dev);
case AF_INET6:
return __in6_dev_nd_parms_get_rcu(dev);
}
return NULL; return NULL;
} }
......
...@@ -834,6 +834,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, ...@@ -834,6 +834,8 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr,
goto out; goto out;
} }
neigh_parms_data_state_setall(idev->nd_parms);
ifa->addr = *addr; ifa->addr = *addr;
if (peer_addr) if (peer_addr)
ifa->peer_addr = *peer_addr; ifa->peer_addr = *peer_addr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment