chiark / gitweb /
networkd: add basic bonding support
[elogind.git] / src / network / networkd-manager.c
index c630ed7ed91aa6bae261a7ae5f3694a01aa5b4b6..7b93c5b5e8ee3e8130afa0a845f0b3007dc83084 100644 (file)
@@ -70,8 +70,8 @@ int manager_new(Manager **ret) {
         if (!m->links)
                 return -ENOMEM;
 
-        m->bridges = hashmap_new(string_hash_func, string_compare_func);
-        if (!m->bridges)
+        m->netdevs = hashmap_new(string_hash_func, string_compare_func);
+        if (!m->netdevs)
                 return -ENOMEM;
 
         LIST_HEAD_INIT(m->networks);
@@ -84,7 +84,7 @@ int manager_new(Manager **ret) {
 
 void manager_free(Manager *m) {
         Network *network;
-        Bridge *bridge;
+        Netdev *netdev;
         Link *link;
 
         udev_monitor_unref(m->udev_monitor);
@@ -100,9 +100,9 @@ void manager_free(Manager *m) {
                 link_free(link);
         hashmap_free(m->links);
 
-        while ((bridge = hashmap_first(m->bridges)))
-                bridge_free(bridge);
-        hashmap_free(m->bridges);
+        while ((netdev = hashmap_first(m->netdevs)))
+                netdev_free(netdev);
+        hashmap_free(m->netdevs);
 
         sd_rtnl_unref(m->rtnl);
 
@@ -115,7 +115,7 @@ int manager_load_config(Manager *m) {
         /* update timestamp */
         paths_check_timestamp(network_dirs, &m->network_dirs_ts_usec, true);
 
-        r = bridge_load(m);
+        r = netdev_load(m);
         if (r < 0)
                 return r;
 
@@ -325,6 +325,7 @@ int manager_update_resolv_conf(Manager *m) {
         Link *link;
         Iterator i;
         unsigned count = 0;
+        const char *domainname = NULL;
         int r;
 
         assert(m);
@@ -350,12 +351,20 @@ int manager_update_resolv_conf(Manager *m) {
                         struct in_addr *nameservers;
                         size_t nameservers_size;
 
-                        r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
-                        if (r >= 0) {
-                                unsigned j;
+                        if (link->network->dhcp_dns) {
+                                r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
+                                if (r >= 0) {
+                                        unsigned j;
 
-                                for (j = 0; j < nameservers_size; j++)
-                                        append_dns(f, &nameservers[j], AF_INET, &count);
+                                        for (j = 0; j < nameservers_size; j++)
+                                                append_dns(f, &nameservers[j], AF_INET, &count);
+                                }
+                        }
+
+                        if (link->network->dhcp_domainname && !domainname) {
+                                r = sd_dhcp_client_get_domainname(link->dhcp, &domainname);
+                                if (r >= 0)
+                                       fprintf(f, "domain %s\n", domainname);
                         }
                 }
         }