mirror of
				https://git.kernel.org/pub/scm/network/wireless/iwd.git
				synced 2025-10-31 04:57: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; | ||||
| 	bool continue_autoconnect; | ||||
| 	uint16_t reason = MMPDU_REASON_CODE_UNSPECIFIED; | ||||
| 
 | ||||
| 	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); | ||||
| 		return; | ||||
| 	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: | ||||
| 		reason = l_get_u16(event_data); | ||||
| 
 | ||||
| 		/* reason code in this case */ | ||||
| 		if (station_retry_with_reason(station, l_get_u16(event_data))) | ||||
| 		if (station_retry_with_reason(station, reason)) | ||||
| 			return; | ||||
| 
 | ||||
| 		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 | ||||
| 	 * 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) { | ||||
| 	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_FT_ROAMING: | ||||
| 	case STATION_STATE_FW_ROAMING: | ||||
| 	case STATION_STATE_NETCONFIG: | ||||
| 		iwd_notice(IWD_NOTICE_DISCONNECT_INFO, "reason: %u", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 James Prestwood
						James Prestwood