chiark / gitweb /
hashmap: introduce hash_ops to make struct Hashmap smaller
[elogind.git] / src / network / networkd-network.c
index 6538abe419cf923e2fb3927a34cb1b3c79a0dfb4..aad99236c4a4c93c51cb1992ddfa8ebfd87552d2 100644 (file)
@@ -63,15 +63,15 @@ static int network_load_one(Manager *manager, const char *filename) {
         LIST_HEAD_INIT(network->static_addresses);
         LIST_HEAD_INIT(network->static_routes);
 
-        network->stacked_netdevs = hashmap_new(string_hash_func, string_compare_func);
+        network->stacked_netdevs = hashmap_new(&string_hash_ops);
         if (!network->stacked_netdevs)
                 return log_oom();
 
-        network->addresses_by_section = hashmap_new(NULL, NULL);
+        network->addresses_by_section = hashmap_new(NULL);
         if (!network->addresses_by_section)
                 return log_oom();
 
-        network->routes_by_section = hashmap_new(NULL, NULL);
+        network->routes_by_section = hashmap_new(NULL);
         if (!network->routes_by_section)
                 return log_oom();
 
@@ -85,6 +85,7 @@ static int network_load_one(Manager *manager, const char *filename) {
         network->dhcp_hostname = true;
         network->dhcp_routes = true;
         network->dhcp_sendhost = true;
+        network->dhcp_route_metric = DHCP_ROUTE_METRIC;
 
         network->llmnr = LLMNR_SUPPORT_YES;
 
@@ -172,8 +173,10 @@ void network_free(Network *network) {
 
         netdev_unref(network->bond);
 
-        HASHMAP_FOREACH(netdev, network->stacked_netdevs, i)
+        HASHMAP_FOREACH(netdev, network->stacked_netdevs, i) {
+                hashmap_remove(network->stacked_netdevs, netdev->ifname);
                 netdev_unref(netdev);
+        }
         hashmap_free(network->stacked_netdevs);
 
         while ((route = network->static_routes))
@@ -365,13 +368,20 @@ int config_parse_domains(const char *unit,
         strv_uniq(*domains);
         network->wildcard_domain = !!strv_find(*domains, "*");
 
-        STRV_FOREACH(domain, *domains)
-                if (is_localhost(*domain) || !hostname_is_valid(*domain) || streq(*domain, "*")) {
-                        strv_remove(*domains, *domain);
+        STRV_FOREACH(domain, *domains) {
+                if (is_localhost(*domain))
+                        log_syntax(unit, LOG_ERR, filename, line, EINVAL, "'localhost' domain names may not be configured, ignoring assignment: %s", *domain);
+                else if (!hostname_is_valid(*domain)) {
+                        if (!streq(*domain, "*"))
+                                log_syntax(unit, LOG_ERR, filename, line, EINVAL, "domain name is not valid, ignoring assignment: %s", *domain);
+                } else
+                        continue;
 
-                        /* We removed one entry, make sure we don't skip the next one */
-                        domain--;
-                }
+                strv_remove(*domains, *domain);
+
+                /* We removed one entry, make sure we don't skip the next one */
+                domain--;
+        }
 
         return 0;
 }