diff options
-rw-r--r-- | net/ipv4/devinet.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 6d85800daeb7..2523001f4c9a 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -345,6 +345,17 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap, | |||
345 | } | 345 | } |
346 | } | 346 | } |
347 | 347 | ||
348 | /* On promotion all secondaries from subnet are changing | ||
349 | * the primary IP, we must remove all their routes silently | ||
350 | * and later to add them back with new prefsrc. Do this | ||
351 | * while all addresses are on the device list. | ||
352 | */ | ||
353 | for (ifa = promote; ifa; ifa = ifa->ifa_next) { | ||
354 | if (ifa1->ifa_mask == ifa->ifa_mask && | ||
355 | inet_ifa_match(ifa1->ifa_address, ifa)) | ||
356 | fib_del_ifaddr(ifa, ifa1); | ||
357 | } | ||
358 | |||
348 | /* 2. Unlink it */ | 359 | /* 2. Unlink it */ |
349 | 360 | ||
350 | *ifap = ifa1->ifa_next; | 361 | *ifap = ifa1->ifa_next; |