diff options
author | Jeff Barnhill <0xeffeff@gmail.com> | 2018-11-02 20:23:57 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-11-02 23:54:56 -0700 |
commit | 2384d02520ff2a916169b2fd85ea50e923ed56c2 (patch) | |
tree | bfad5bc2bff6bc70d8455db794c7b779cc81e9f1 /include/net/addrconf.h | |
parent | 7b900ead6cc66b2ee873cb042dfba169aa68b56c (diff) | |
download | linux-2384d02520ff2a916169b2fd85ea50e923ed56c2.tar.gz linux-2384d02520ff2a916169b2fd85ea50e923ed56c2.tar.bz2 linux-2384d02520ff2a916169b2fd85ea50e923ed56c2.zip |
net/ipv6: Add anycast addresses to a global hashtable
icmp6_send() function is expensive on systems with a large number of
interfaces. Every time it’s called, it has to verify that the source
address does not correspond to an existing anycast address by looping
through every device and every anycast address on the device. This can
result in significant delays for a CPU when there are a large number of
neighbors and ND timers are frequently timing out and calling
neigh_invalidate().
Add anycast addresses to a global hashtable to allow quick searching for
matching anycast addresses. This is based on inet6_addr_lst in addrconf.c.
Signed-off-by: Jeff Barnhill <0xeffeff@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/addrconf.h')
-rw-r--r-- | include/net/addrconf.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 14b789a123e7..1656c5978498 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h @@ -317,6 +317,8 @@ bool ipv6_chk_acast_addr(struct net *net, struct net_device *dev, const struct in6_addr *addr); bool ipv6_chk_acast_addr_src(struct net *net, struct net_device *dev, const struct in6_addr *addr); +int ipv6_anycast_init(void); +void ipv6_anycast_cleanup(void); /* Device notifier */ int register_inet6addr_notifier(struct notifier_block *nb); |