diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-09-02 21:48:08 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-10-24 14:18:16 +0900 |
commit | e272b62136e49f84307ce5b2e54568c88be9764d (patch) | |
tree | 934cc7d03e2d01572f4796bf869946ece5767d86 | |
parent | 7f06b3e1b96004f5950f9cc97e2c98181f787e35 (diff) | |
download | systemd-e272b62136e49f84307ce5b2e54568c88be9764d.tar.gz |
network: also reload .netdev files
-rw-r--r-- | src/network/netdev/netdev.c | 12 | ||||
-rw-r--r-- | src/network/netdev/netdev.h | 2 | ||||
-rw-r--r-- | src/network/networkd-manager-bus.c | 4 | ||||
-rw-r--r-- | src/network/networkd-manager.c | 2 |
4 files changed, 13 insertions, 7 deletions
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 7853e197f1..9b5d3c0df3 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -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) diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h index 989dd64ffc..77cd15d8bf 100644 --- a/src/network/netdev/netdev.h +++ b/src/network/netdev/netdev.h @@ -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); diff --git a/src/network/networkd-manager-bus.c b/src/network/networkd-manager-bus.c index 6bc2c22f07..7a23f70093 100644 --- a/src/network/networkd-manager-bus.c +++ b/src/network/networkd-manager-bus.c @@ -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; diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 36481bcde6..40fbf14743 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -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; |