diff options
author | Hannes Frederic Sowa <hannes@stressinduktion.org> | 2012-11-06 11:46:20 -0500 |
---|---|---|
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) |
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 6ba4b54a550a..f41853bca428 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, | |||
1572 | { | 1572 | { |
1573 | struct net_device *dev = ptr; | 1573 | struct net_device *dev = ptr; |
1574 | struct net *net = dev_net(dev); | 1574 | struct net *net = dev_net(dev); |
1575 | struct inet6_dev *idev; | ||
1575 | 1576 | ||
1576 | switch (event) { | 1577 | switch (event) { |
1577 | case NETDEV_CHANGEADDR: | 1578 | case NETDEV_CHANGEADDR: |
1578 | neigh_changeaddr(&nd_tbl, dev); | 1579 | neigh_changeaddr(&nd_tbl, dev); |
1579 | fib6_run_gc(~0UL, net); | 1580 | fib6_run_gc(~0UL, net); |
1581 | idev = in6_dev_get(dev); | ||
1582 | if (!idev) | ||
1583 | break; | ||
1584 | if (idev->cnf.ndisc_notify) | ||
1585 | ndisc_send_unsol_na(dev); | ||
1586 | in6_dev_put(idev); | ||
1580 | break; | 1587 | break; |
1581 | case NETDEV_DOWN: | 1588 | case NETDEV_DOWN: |
1582 | neigh_ifdown(&nd_tbl, dev); | 1589 | neigh_ifdown(&nd_tbl, dev); |