network: also reload .netdev files
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 2 Sep 2019 12:48:08 +0000 (21:48 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 24 Oct 2019 05:18:16 +0000 (14:18 +0900)
src/network/netdev/netdev.c
src/network/netdev/netdev.h
src/network/networkd-manager-bus.c
src/network/networkd-manager.c

index 7853e19..9b5d3c0 100644 (file)
@@ -757,9 +757,10 @@ int netdev_load_one(Manager *manager, const char *filename) {
                 NetDev *n = hashmap_get(netdev->manager->netdevs, netdev->ifname);
 
                 assert(n);
-                log_netdev_warning_errno(netdev, r,
-                                         "The setting Name=%s in %s conflicts with the one in %s, ignoring",
-                                         netdev->ifname, netdev->filename, n->filename);
+                if (!streq(netdev->filename, n->filename))
+                        log_netdev_warning_errno(netdev, r,
+                                                 "The setting Name=%s in %s conflicts with the one in %s, ignoring",
+                                                 netdev->ifname, netdev->filename, n->filename);
 
                 /* Clear ifname before netdev_free() is called. Otherwise, the NetDev object 'n' is
                  * removed from the hashmap 'manager->netdevs'. */
@@ -828,14 +829,15 @@ int netdev_load_one(Manager *manager, const char *filename) {
         return 0;
 }
 
-int netdev_load(Manager *manager) {
+int netdev_load(Manager *manager, bool reload) {
         _cleanup_strv_free_ char **files = NULL;
         char **f;
         int r;
 
         assert(manager);
 
-        hashmap_clear_with_destructor(manager->netdevs, netdev_unref);
+        if (!reload)
+                hashmap_clear_with_destructor(manager->netdevs, netdev_unref);
 
         r = conf_files_list_strv(&files, ".netdev", NULL, 0, NETWORK_DIRS);
         if (r < 0)
index 989dd64..77cd15d 100644 (file)
@@ -156,7 +156,7 @@ extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
 /* For casting the various netdev kinds into a netdev */
 #define NETDEV(n) (&(n)->meta)
 
-int netdev_load(Manager *manager);
+int netdev_load(Manager *manager, bool reload);
 int netdev_load_one(Manager *manager, const char *filename);
 void netdev_drop(NetDev *netdev);
 
index 6bc2c22..7a23f70 100644 (file)
@@ -204,6 +204,10 @@ static int bus_method_reload(sd_bus_message *message, void *userdata, sd_bus_err
         if (r == 0)
                 return 1; /* Polkit will call us back */
 
+        r = netdev_load(manager, true);
+        if (r < 0)
+                return r;
+
         r = network_reload(manager);
         if (r < 0)
                 return r;
index 36481bc..40fbf14 100644 (file)
@@ -1856,7 +1856,7 @@ int manager_load_config(Manager *m) {
         /* update timestamp */
         paths_check_timestamp(NETWORK_DIRS, &m->network_dirs_ts_usec, true);
 
-        r = netdev_load(m);
+        r = netdev_load(m, false);
         if (r < 0)
                 return r;