ipv4: Cache source address in nexthop entries.
When doing output route lookups, we have to select the source address if the user has not specified an explicit one. First, if the route has an explicit preferred source address specified, then we use that. Otherwise we search the route's outgoing interface for a suitable address. This search can be precomputed and cached at route insertion time. The only missing part is that we have to refresh this precomputed value any time addresses are added or removed from the interface, and this is accomplished by fib_update_nh_saddrs(). Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -890,10 +890,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
|
||||
#ifdef CONFIG_IP_ROUTE_MULTIPATH
|
||||
fib_sync_up(dev);
|
||||
#endif
|
||||
fib_update_nh_saddrs(dev);
|
||||
rt_cache_flush(dev_net(dev), -1);
|
||||
break;
|
||||
case NETDEV_DOWN:
|
||||
fib_del_ifaddr(ifa);
|
||||
fib_update_nh_saddrs(dev);
|
||||
if (ifa->ifa_dev->ifa_list == NULL) {
|
||||
/* Last address was deleted from this interface.
|
||||
* Disable IP.
|
||||
|
Reference in New Issue
Block a user