]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce network_adjust_radv()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 15 Oct 2020 07:06:47 +0000 (16:06 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 19 Oct 2020 01:09:38 +0000 (10:09 +0900)
src/network/networkd-network.c
src/network/networkd-radv.c
src/network/networkd-radv.h

index d31b7bca4c12470e142e5378c2471ffe3d79a255..2a433f96defd9a7f5179add71587e38b21e3729a 100644 (file)
@@ -214,14 +214,6 @@ int network_verify(Network *network) {
         if (network->link_local < 0)
                 network->link_local = network->bridge ? ADDRESS_FAMILY_NO : ADDRESS_FAMILY_IPV6;
 
-        if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) {
-                if (network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE) {
-                        log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link local addressing is disabled. "
-                                    "Disabling IPv6PrefixDelegation=.", network->filename);
-                        network->router_prefix_delegation = RADV_PREFIX_DELEGATION_NONE;
-                }
-        }
-
         if (FLAGS_SET(network->link_local, ADDRESS_FAMILY_FALLBACK_IPV4) &&
             !FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV4)) {
                 log_warning("%s: fallback assignment of IPv4 link local address is enabled but DHCPv4 is disabled. "
@@ -235,6 +227,7 @@ int network_verify(Network *network) {
 
         network_adjust_ipv6_accept_ra(network);
         network_adjust_dhcp(network);
+        network_adjust_radv(network);
 
         if (network->mtu > 0 && network->dhcp_use_mtu) {
                 log_warning("%s: MTUBytes= in [Link] section and UseMTU= in [DHCP] section are set. "
index fca6fa2c97e5a7c4d940993fc9e786a6db33fdf8..4fc207dce585b8aa893bbd85f3a28de4f2229c21 100644 (file)
@@ -180,6 +180,26 @@ void network_drop_invalid_route_prefixes(Network *network) {
                         route_prefix_free(prefix);
 }
 
+void network_adjust_radv(Network *network) {
+        assert(network);
+
+        if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) {
+                if (network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE)
+                        log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link local addressing is disabled. "
+                                    "Disabling IPv6PrefixDelegation=.", network->filename);
+
+                network->router_prefix_delegation = RADV_PREFIX_DELEGATION_NONE;
+        }
+
+        if (network->router_prefix_delegation == RADV_PREFIX_DELEGATION_NONE) {
+                network->n_router_dns = 0;
+                network->router_dns = mfree(network->router_dns);
+                network->router_search_domains = ordered_set_free(network->router_search_domains);
+                network->prefixes_by_section = hashmap_free_with_destructor(network->prefixes_by_section, prefix_free);
+                network->route_prefixes_by_section = hashmap_free_with_destructor(network->route_prefixes_by_section, route_prefix_free);
+        }
+}
+
 int config_parse_prefix(
                 const char *unit,
                 const char *filename,
index fbb93a9accccc1b76894f639a97b546f05b06003..75c606d15e2afdebe7a4a05ef9ceef5fd8736c57 100644 (file)
@@ -47,6 +47,7 @@ RoutePrefix *route_prefix_free(RoutePrefix *prefix);
 
 void network_drop_invalid_prefixes(Network *network);
 void network_drop_invalid_route_prefixes(Network *network);
+void network_adjust_radv(Network *network);
 
 int radv_emit_dns(Link *link);
 int radv_configure(Link *link);