summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-09-02 21:48:08 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-10-24 14:18:16 +0900
commite272b62136e49f84307ce5b2e54568c88be9764d (patch)
tree934cc7d03e2d01572f4796bf869946ece5767d86
parent7f06b3e1b96004f5950f9cc97e2c98181f787e35 (diff)
downloadsystemd-e272b62136e49f84307ce5b2e54568c88be9764d.tar.gz
network: also reload .netdev files
-rw-r--r--src/network/netdev/netdev.c12
-rw-r--r--src/network/netdev/netdev.h2
-rw-r--r--src/network/networkd-manager-bus.c4
-rw-r--r--src/network/networkd-manager.c2
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;