chiark / gitweb /
logind: always kill session when termination is requested
[elogind.git] / src / network / networkd-manager.c
index 7b93c5b5e8ee3e8130afa0a845f0b3007dc83084..fb3360db0a7375616e9ff2f7f68d2fdbd51284f5 100644 (file)
@@ -25,6 +25,7 @@
 #include "networkd.h"
 #include "libudev-private.h"
 #include "udev-util.h"
+#include "rtnl-util.h"
 #include "mkdir.h"
 
 const char* const network_dirs[] = {
@@ -84,7 +85,7 @@ int manager_new(Manager **ret) {
 
 void manager_free(Manager *m) {
         Network *network;
-        Netdev *netdev;
+        NetDev *netdev;
         Link *link;
 
         udev_monitor_unref(m->udev_monitor);
@@ -244,15 +245,31 @@ int manager_udev_listen(Manager *m) {
 static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, void *userdata) {
         Manager *m = userdata;
         Link *link;
+        const char *name;
         uint64_t ifindex_64;
         int r, ifindex;
 
         r = sd_rtnl_message_link_get_ifindex(message, &ifindex);
-        if (r < 0) {
+        if (r < 0 || ifindex <= 0) {
                 log_debug("received RTM_NEWLINK message without valid ifindex");
                 return 0;
         }
 
+        r = rtnl_message_link_get_ifname(message, &name);
+        if (r < 0)
+                log_debug("received RTM_NEWLINK message without valid IFLA_IFNAME");
+        else {
+                NetDev *netdev;
+
+                r = netdev_get(m, name, &netdev);
+                if (r >= 0) {
+                        r = netdev_set_ifindex(netdev, ifindex);
+                        if (r < 0)
+                                log_debug("could not set ifindex of netdev '%s' to %d: %s",
+                                          name, ifindex, strerror(-r));
+                }
+        }
+
         ifindex_64 = ifindex;
         link = hashmap_get(m->links, &ifindex_64);
         if (!link) {
@@ -347,12 +364,12 @@ int manager_update_resolv_conf(Manager *m) {
               "# static file or a different symlink.\n\n", f);
 
         HASHMAP_FOREACH(link, m->links, i) {
-                if (link->dhcp) {
+                if (link->dhcp_lease) {
                         struct in_addr *nameservers;
                         size_t nameservers_size;
 
                         if (link->network->dhcp_dns) {
-                                r = sd_dhcp_client_get_dns(link->dhcp, &nameservers, &nameservers_size);
+                                r = sd_dhcp_lease_get_dns(link->dhcp_lease, &nameservers, &nameservers_size);
                                 if (r >= 0) {
                                         unsigned j;
 
@@ -362,7 +379,7 @@ int manager_update_resolv_conf(Manager *m) {
                         }
 
                         if (link->network->dhcp_domainname && !domainname) {
-                                r = sd_dhcp_client_get_domainname(link->dhcp, &domainname);
+                                r = sd_dhcp_lease_get_domainname(link->dhcp_lease, &domainname);
                                 if (r >= 0)
                                        fprintf(f, "domain %s\n", domainname);
                         }