mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:59:25 +01:00
station: handle NETDEV_RESULT_DISCONNECTED
This new event is sent during a connection if netdev recieves a disconnect event. This patch cleans up station to handle this case and leave the existing NETDEV_EVENT_DISCONNECTED_BY_{AP,SME} handling only for CONNECTED, NETCONFIG, and FW_ROAMING states.
This commit is contained in:
parent
38c36ff145
commit
906afefbf3
@ -3311,6 +3311,7 @@ static void station_connect_cb(struct netdev *netdev, enum netdev_result result,
|
|||||||
{
|
{
|
||||||
struct station *station = user_data;
|
struct station *station = user_data;
|
||||||
bool continue_autoconnect;
|
bool continue_autoconnect;
|
||||||
|
uint16_t reason = MMPDU_REASON_CODE_UNSPECIFIED;
|
||||||
|
|
||||||
l_debug("%u, result: %d", netdev_get_ifindex(station->netdev), result);
|
l_debug("%u, result: %d", netdev_get_ifindex(station->netdev), result);
|
||||||
|
|
||||||
@ -3320,9 +3321,22 @@ static void station_connect_cb(struct netdev *netdev, enum netdev_result result,
|
|||||||
station_connect_ok(station);
|
station_connect_ok(station);
|
||||||
return;
|
return;
|
||||||
case NETDEV_RESULT_DISCONNECTED:
|
case NETDEV_RESULT_DISCONNECTED:
|
||||||
|
reason = l_get_u16(event_data);
|
||||||
|
|
||||||
|
iwd_notice(IWD_NOTICE_DISCONNECT_INFO, "reason: %u", reason);
|
||||||
|
|
||||||
|
/* Disconnected while connecting */
|
||||||
|
network_blacklist_add(station->connected_network,
|
||||||
|
station->connected_bss);
|
||||||
|
if (station_try_next_bss(station))
|
||||||
|
return;
|
||||||
|
|
||||||
|
break;
|
||||||
case NETDEV_RESULT_HANDSHAKE_FAILED:
|
case NETDEV_RESULT_HANDSHAKE_FAILED:
|
||||||
|
reason = l_get_u16(event_data);
|
||||||
|
|
||||||
/* reason code in this case */
|
/* reason code in this case */
|
||||||
if (station_retry_with_reason(station, l_get_u16(event_data)))
|
if (station_retry_with_reason(station, reason))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -3383,17 +3397,12 @@ static void station_disconnect_event(struct station *station, void *event_data)
|
|||||||
/*
|
/*
|
||||||
* If we're connecting, AP deauthenticated us, most likely because
|
* If we're connecting, AP deauthenticated us, most likely because
|
||||||
* we provided the wrong password or otherwise failed authentication
|
* we provided the wrong password or otherwise failed authentication
|
||||||
* during the handshaking phase. Treat this as a connection failure
|
* during the handshaking phase. Connection failures should be handled
|
||||||
|
* within station_connect_cb/station_reassociate_cb apart from netconfig
|
||||||
|
* and FW roams.
|
||||||
*/
|
*/
|
||||||
switch (station->state) {
|
switch (station->state) {
|
||||||
case STATION_STATE_CONNECTING:
|
|
||||||
case STATION_STATE_CONNECTING_AUTO:
|
|
||||||
station_connect_cb(station->netdev,
|
|
||||||
NETDEV_RESULT_HANDSHAKE_FAILED,
|
|
||||||
event_data, station);
|
|
||||||
return;
|
|
||||||
case STATION_STATE_CONNECTED:
|
case STATION_STATE_CONNECTED:
|
||||||
case STATION_STATE_FT_ROAMING:
|
|
||||||
case STATION_STATE_FW_ROAMING:
|
case STATION_STATE_FW_ROAMING:
|
||||||
case STATION_STATE_NETCONFIG:
|
case STATION_STATE_NETCONFIG:
|
||||||
iwd_notice(IWD_NOTICE_DISCONNECT_INFO, "reason: %u",
|
iwd_notice(IWD_NOTICE_DISCONNECT_INFO, "reason: %u",
|
||||||
|
Loading…
Reference in New Issue
Block a user