3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-22 06:29:23 +01:00

station: add additional internal state, STATION_STATE_NETCONFIG

This is still treated as "connecting" from a DBus perspective but
will allow for better handling internally for some roaming corner
cases.
This commit is contained in:
James Prestwood 2024-01-05 06:47:48 -08:00 committed by Denis Kenzior
parent 407a8a4441
commit 8f7443b0b3
4 changed files with 8 additions and 0 deletions

View File

@ -3761,6 +3761,7 @@ static void dpp_station_state_watch(enum station_state state, void *user_data)
case STATION_STATE_CONNECTING: case STATION_STATE_CONNECTING:
case STATION_STATE_CONNECTED: case STATION_STATE_CONNECTED:
case STATION_STATE_CONNECTING_AUTO: case STATION_STATE_CONNECTING_AUTO:
case STATION_STATE_NETCONFIG:
if (L_WARN_ON(dpp->role == DPP_CAPABILITY_CONFIGURATOR)) if (L_WARN_ON(dpp->role == DPP_CAPABILITY_CONFIGURATOR))
dpp_reset(dpp); dpp_reset(dpp);

View File

@ -1497,6 +1497,8 @@ static const char *station_state_to_string(enum station_state state)
return "ft-roaming"; return "ft-roaming";
case STATION_STATE_FW_ROAMING: case STATION_STATE_FW_ROAMING:
return "fw-roaming"; return "fw-roaming";
case STATION_STATE_NETCONFIG:
return "connecting (netconfig)";
} }
return "invalid"; return "invalid";
@ -1635,6 +1637,7 @@ static void station_enter_state(struct station *station,
station_set_drop_unicast_l2_multicast(station, false); station_set_drop_unicast_l2_multicast(station, false);
break; break;
case STATION_STATE_DISCONNECTING: case STATION_STATE_DISCONNECTING:
case STATION_STATE_NETCONFIG:
break; break;
case STATION_STATE_ROAMING: case STATION_STATE_ROAMING:
case STATION_STATE_FT_ROAMING: case STATION_STATE_FT_ROAMING:
@ -3342,6 +3345,7 @@ static void station_disconnect_event(struct station *station, void *event_data)
case STATION_STATE_CONNECTED: case STATION_STATE_CONNECTED:
case STATION_STATE_FT_ROAMING: case STATION_STATE_FT_ROAMING:
case STATION_STATE_FW_ROAMING: case STATION_STATE_FW_ROAMING:
case STATION_STATE_NETCONFIG:
station_disassociated(station); station_disassociated(station);
return; return;
default: default:
@ -4272,6 +4276,7 @@ static bool station_property_get_state(struct l_dbus *dbus,
break; break;
case STATION_STATE_CONNECTING: case STATION_STATE_CONNECTING:
case STATION_STATE_CONNECTING_AUTO: case STATION_STATE_CONNECTING_AUTO:
case STATION_STATE_NETCONFIG:
statestr = "connecting"; statestr = "connecting";
break; break;
case STATION_STATE_CONNECTED: case STATION_STATE_CONNECTED:

View File

@ -45,6 +45,7 @@ enum station_state {
STATION_STATE_ROAMING, /* Reassociation */ STATION_STATE_ROAMING, /* Reassociation */
STATION_STATE_FT_ROAMING, /* Fast transition */ STATION_STATE_FT_ROAMING, /* Fast transition */
STATION_STATE_FW_ROAMING, /* Firmware roamed by itself */ STATION_STATE_FW_ROAMING, /* Firmware roamed by itself */
STATION_STATE_NETCONFIG,
}; };
enum station_event { enum station_event {

View File

@ -654,6 +654,7 @@ static void wsc_check_can_connect(struct wsc_station_dbus *wsc,
case STATION_STATE_CONNECTING: case STATION_STATE_CONNECTING:
case STATION_STATE_CONNECTING_AUTO: case STATION_STATE_CONNECTING_AUTO:
case STATION_STATE_CONNECTED: case STATION_STATE_CONNECTED:
case STATION_STATE_NETCONFIG:
if (station_disconnect(wsc->station) < 0) if (station_disconnect(wsc->station) < 0)
goto error; goto error;