|
@@ -228,7 +228,7 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
|
|
|
if (res.type != RTN_LOCAL || !accept_local)
|
|
|
goto e_inval;
|
|
|
}
|
|
|
- *spec_dst = FIB_RES_PREFSRC(res);
|
|
|
+ *spec_dst = FIB_RES_PREFSRC(net, res);
|
|
|
fib_combine_itag(itag, &res);
|
|
|
dev_match = false;
|
|
|
|
|
@@ -258,7 +258,7 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
|
|
|
ret = 0;
|
|
|
if (fib_lookup(net, &fl4, &res) == 0) {
|
|
|
if (res.type == RTN_UNICAST) {
|
|
|
- *spec_dst = FIB_RES_PREFSRC(res);
|
|
|
+ *spec_dst = FIB_RES_PREFSRC(net, res);
|
|
|
ret = FIB_RES_NH(res).nh_scope >= RT_SCOPE_HOST;
|
|
|
}
|
|
|
}
|
|
@@ -960,6 +960,7 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
|
|
|
{
|
|
|
struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
|
|
|
struct net_device *dev = ifa->ifa_dev->dev;
|
|
|
+ struct net *net = dev_net(dev);
|
|
|
|
|
|
switch (event) {
|
|
|
case NETDEV_UP:
|
|
@@ -967,12 +968,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);
|
|
|
+ atomic_inc(&net->ipv4.dev_addr_genid);
|
|
|
rt_cache_flush(dev_net(dev), -1);
|
|
|
break;
|
|
|
case NETDEV_DOWN:
|
|
|
fib_del_ifaddr(ifa, NULL);
|
|
|
- fib_update_nh_saddrs(dev);
|
|
|
+ atomic_inc(&net->ipv4.dev_addr_genid);
|
|
|
if (ifa->ifa_dev->ifa_list == NULL) {
|
|
|
/* Last address was deleted from this interface.
|
|
|
* Disable IP.
|
|
@@ -990,6 +991,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
|
|
|
{
|
|
|
struct net_device *dev = ptr;
|
|
|
struct in_device *in_dev = __in_dev_get_rtnl(dev);
|
|
|
+ struct net *net = dev_net(dev);
|
|
|
|
|
|
if (event == NETDEV_UNREGISTER) {
|
|
|
fib_disable_ip(dev, 2, -1);
|
|
@@ -1007,6 +1009,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
|
|
|
#ifdef CONFIG_IP_ROUTE_MULTIPATH
|
|
|
fib_sync_up(dev);
|
|
|
#endif
|
|
|
+ atomic_inc(&net->ipv4.dev_addr_genid);
|
|
|
rt_cache_flush(dev_net(dev), -1);
|
|
|
break;
|
|
|
case NETDEV_DOWN:
|