diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2015-03-18 16:54:48 +0100 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2015-03-19 16:27:11 +0100 |
commit | 60f57b2bfb87c463fc271a9c3e8e1f97feaecdca (patch) | |
tree | ce52bb7a5b8ea01df3957bf9a25567c05770c637 | |
parent | 45fd905c980e56b20770d4b34556749fbca53fcc (diff) |
netifd:Make sure interface device config is also cached
Fixes issue interface device config is not applied in some cases.
As the interface device config was applied but not always cached;
an interface device config diff was not always detected.
Simplify device config setting by exposing as api only device_apply_config
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
-rw-r--r-- | config.c | 2 | ||||
-rw-r--r-- | device.c | 2 | ||||
-rw-r--r-- | device.h | 3 | ||||
-rw-r--r-- | interface.c | 6 | ||||
-rw-r--r-- | tunnel.c | 2 |
5 files changed, 6 insertions, 9 deletions
@@ -137,7 +137,7 @@ config_parse_interface(struct uci_section *s, bool alias) return; if (iface->device_config || dev->settings.flags) - device_set_config(dev, dev->type, b.head); + device_apply_config(dev, dev->type, b.head); return; error_free_config: free(config); @@ -596,7 +596,7 @@ device_init_pending(void) } } -enum dev_change_type +static enum dev_change_type device_set_config(struct device *dev, const struct device_type *type, struct blob_attr *attr) { @@ -194,9 +194,6 @@ void device_init_settings(struct device *dev, struct blob_attr **tb); void device_init_pending(void); enum dev_change_type -device_set_config(struct device *dev, const struct device_type *type, - struct blob_attr *attr); -enum dev_change_type device_apply_config(struct device *dev, const struct device_type *type, struct blob_attr *config); diff --git a/interface.c b/interface.c index 72599e6..444f3ac 100644 --- a/interface.c +++ b/interface.c @@ -918,11 +918,11 @@ interface_handle_link(struct interface *iface, const char *name, bool add, bool } if (add) { - device_set_present(dev, true); if (iface->device_config && dev->default_config) - device_set_config(dev, dev->type, iface->config); + device_apply_config(dev, dev->type, iface->config); + + device_set_present(dev, true); - system_if_apply_settings(dev, &dev->settings, dev->settings.flags); ret = interface_add_link(iface, dev, link_ext); } else { ret = interface_remove_link(iface, dev); @@ -72,7 +72,7 @@ tunnel_create(const char *name, struct blob_attr *attr) device_init(dev, &tunnel_device_type, name); tun->set_state = dev->set_state; dev->set_state = tunnel_set_state; - device_set_config(dev, &tunnel_device_type, attr); + device_apply_config(dev, &tunnel_device_type, attr); device_set_present(dev, true); return dev; |