diff options
author | Hannes Frederic Sowa <hannes@stressinduktion.org> | 2012-11-06 16:46:20 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-13 14:27:45 -0500 |
commit | 5cb04436eef62aa8f5c482f8ec8deba391dea465 (patch) | |
tree | 068d69d9f28c14ae515c1a6a02bcfdc04093d248 /net/ipv6/ndisc.c | |
parent | 24a372cd0b87c15f8d98275d045326249155af55 (diff) | |
download | op-kernel-dev-5cb04436eef62aa8f5c482f8ec8deba391dea465.zip op-kernel-dev-5cb04436eef62aa8f5c482f8ec8deba391dea465.tar.gz |
ipv6: add knob to send unsolicited ND on link-layer address change
This patch introduces a new knob ndisc_notify. If enabled, the kernel
will transmit an unsolicited neighbour advertisement on link-layer address
change to update the neighbour tables of the corresponding hosts more quickly.
This is the equivalent to arp_notify in ipv4 world.
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 6ba4b54..f41853b 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1572,11 +1572,18 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, { struct net_device *dev = ptr; struct net *net = dev_net(dev); + struct inet6_dev *idev; switch (event) { case NETDEV_CHANGEADDR: neigh_changeaddr(&nd_tbl, dev); fib6_run_gc(~0UL, net); + idev = in6_dev_get(dev); + if (!idev) + break; + if (idev->cnf.ndisc_notify) + ndisc_send_unsol_na(dev); + in6_dev_put(idev); break; case NETDEV_DOWN: neigh_ifdown(&nd_tbl, dev); |