summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHans dedecker <dedeckeh@gmail.com>2019-04-01 10:34:26 +0200
committerHans Dedecker <dedeckeh@gmail.com>2019-04-01 22:55:46 +0200
commita97297d83e427685d316a170b769922083c02794 (patch)
tree25959c9c07a4cdd1ec23cdd8b055eff932f82802
parent34a70b62694cdaf9acb70202e3910bf23e0ab81a (diff)
interface: set interface in TEARDOWN state when checking link state
When launching PROTO_CMD_TEARDOWN in interface_check_state() the interface was set in IFS_DOWN state. In case an interface is now brought into IFS_SETUP state in __interface_set_up() it will launch PROTO_CMD_SETUP trying to bring the proto shell handler in S_SETUP state which will fail as the proto shell handler is still in the S_TEARDOWN state. Fix this by setting the interface in IFS_TEARDOWN state when the PROTO_CMD_TEARDOWN event is launched which will prevent the interface being brought into IFS_SETUP state as long as it's not in the IFS_DOWN state. Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
-rw-r--r--interface.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/interface.c b/interface.c
index b8c4ae2..fd7a826 100644
--- a/interface.c
+++ b/interface.c
@@ -342,11 +342,11 @@ interface_check_state(struct interface *iface)
case IFS_UP:
case IFS_SETUP:
if (!iface->enabled || !link_state) {
- interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, false);
+ iface->state = IFS_TEARDOWN;
if (iface->dynamic)
__set_config_state(iface, IFC_REMOVE);
- mark_interface_down(iface);
+ interface_proto_event(iface->proto, PROTO_CMD_TEARDOWN, false);
}
break;
case IFS_DOWN: