Commit d9872db7 authored by Hans Dedecker's avatar Hans Dedecker

interface: fix removal of dynamic interfaces

Set config state to remove for dynamic interfaces in the following cases :
-interface is set as not available
-interface is set as down
-interface is set as having no link state
This will trigger an interface delete upon the next call of interface_handle_config_change

Before this change you could end up with lingering inactive dynamic
interfaces in case the aliased interface went down as before a dynamic
interface was only removed when set down via ubus
Signed-off-by: default avatarHans Dedecker <dedeckeh@gmail.com>
parent 2f7ef7dc
......@@ -284,6 +284,12 @@ mark_interface_down(struct interface *iface)
system_flush_routes();
}
static inline void
__set_config_state(struct interface *iface, enum interface_config_state s)
{
iface->config_state = s;
}
static void
__interface_set_down(struct interface *iface, bool force)
{
......@@ -292,6 +298,9 @@ __interface_set_down(struct interface *iface, bool force)
case IFS_UP:
case IFS_SETUP:
iface->state = IFS_TEARDOWN;
if (iface->dynamic)
__set_config_state(iface, IFC_REMOVE);
if (state == IFS_UP)
interface_event(iface, IFEV_DOWN);
......@@ -334,6 +343,9 @@ interface_check_state(struct interface *iface)
case IFS_SETUP:
if (!iface->enabled || !link_state) {
interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, false);
if (iface->dynamic)
__set_config_state(iface, IFC_REMOVE);
mark_interface_down(iface);
}
break;
......@@ -697,8 +709,6 @@ interface_handle_config_change(struct interface *iface)
}
if (iface->autostart)
interface_set_up(iface);
else if (iface->dynamic)
set_config_state(iface, IFC_REMOVE);
}
static void
......@@ -1120,7 +1130,7 @@ interface_start_pending(void)
static void
set_config_state(struct interface *iface, enum interface_config_state s)
{
iface->config_state = s;
__set_config_state(iface, s);
if (iface->state == IFS_DOWN)
interface_handle_config_change(iface);
else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment