From a97297d83e427685d316a170b769922083c02794 Mon Sep 17 00:00:00 2001 From: Hans dedecker Date: Mon, 1 Apr 2019 10:34:26 +0200 Subject: 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 --- interface.c | 4 ++-- 1 file 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: -- cgit v1.2.1