network: do not touch kernel-created multicast route
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 9 Jul 2019 15:30:27 +0000 (00:30 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 Jul 2019 13:08:49 +0000 (22:08 +0900)
Fixes #6088.

src/network/networkd-link.c

index 8ca4583..17829fc 100644 (file)
@@ -2416,6 +2416,15 @@ static int link_drop_foreign_config(Link *link) {
                 if (route->protocol == RTPROT_KERNEL)
                         continue;
 
+                /* do not touch multicast route added by kernel */
+                /* FIXME: Why the kernel adds this route with protocol RTPROT_BOOT??? We need to investigate that.
+                 * https://tools.ietf.org/html/rfc4862#section-5.4 may explain why. */
+                if (route->protocol == RTPROT_BOOT &&
+                    route->family == AF_INET6 &&
+                    route->dst_prefixlen == 8 &&
+                    in_addr_equal(AF_INET6, &route->dst, &(union in_addr_union) { .in6 = {{{ 0xff,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }}} }))
+                        continue;
+
                 if (route->protocol == RTPROT_STATIC &&
                     FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC))
                         continue;