};
static void
-clear_interface_errors(struct interface *iface)
+interface_clear_errors(struct interface *iface)
{
struct interface_error *error, *tmp;
static void
__interface_set_down(struct interface *iface, bool force)
{
- clear_interface_errors(iface);
+ interface_clear_errors(iface);
if (iface->state == IFS_DOWN ||
iface->state == IFS_TEARDOWN)
static void
interface_cleanup(struct interface *iface)
{
+ interface_clear_errors(iface);
if (iface->main_dev.dev)
device_remove_user(&iface->main_dev);
interface_set_proto_state(iface, NULL);
blobmsg_parse(iface_attrs, IFACE_ATTR_MAX, tb,
blob_data(config), blob_len(config));
- if ((cur = tb[IFACE_ATTR_IFNAME])) {
+ if ((cur = tb[IFACE_ATTR_IFNAME]))
iface->ifname = blobmsg_data(cur);
- }
-
iface->config = config;
vlist_add(&interfaces, &iface->node);
}
if (iface->state == IFS_DOWN)
interface_handle_config_change(iface);
else
- interface_set_down(iface);
+ __interface_set_down(iface, false);
}
static void
{
struct blob_attr *old_config = if_old->config;
+ interface_clear_errors(if_old);
if_old->config = if_new->config;
if (!if_old->config_autostart && if_new->config_autostart)
if_old->autostart = true;