[PATCH] 4addr: fix reconnecting client on connection lost

Matthias May matthias.may at neratec.com
Sun Jul 24 14:03:30 PDT 2016



On 07/23/2016 08:01 PM, Jouni Malinen wrote:
> On Tue, Jul 05, 2016 at 03:00:43PM +0200, Matthias May wrote:
>> When a 4addr client suddenly looses its connection (no deauth/deassoc)
>> the AP still thinks it is connected.
>> If the client reconnects before the AP timeoutes the client, traffic
>> cannot flow.
>>
>> Fix this by making sure the WLAN_STA_WDS flag is unset in the sta->flags
>> when the client completes association.
> 
>> diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
>> @@ -2829,6 +2829,7 @@ static void handle_assoc_cb(struct hostapd_data *hapd,
>>  		new_assoc = 0;
>>  	sta->flags |= WLAN_STA_ASSOC;
>>  	sta->flags &= ~WLAN_STA_WNM_SLEEP_MODE;
>> +	sta->flags &= ~WLAN_STA_WDS;
> 
> This looks a bit strange taken into account this same handle_assoc_cb()
> function is using the WLAN_STA_WDS flag just below this:
> 
>     if (sta->flags & WLAN_STA_WDS) {
> 	int ret;
> 	char ifname_wds[IFNAMSIZ + 1];
> 
> 	ret = hostapd_set_wds_sta(hapd, ifname_wds, sta->addr,
> 		      sta->aid, 1);
> 	if (!ret)
> 	    hostapd_set_wds_encryption(hapd, sta, ifname_wds);
>     }
> 
> 
> All that would become dead code if this patch were applied. Is this code
> really supposed to be removed? If so, these lines should be deleted as
> well. If not, this issue would likely need to be fixed in some other
> manner.
>  
> 

Yes this looks a bit strange.

ieee802_11_rx_from_unknown is the function which sets WLAN_STA_WDS bit
once the WLAN_STA_ASSOC is set.
Wouldn't this mean that this is already dead code now?

BR
Matthias



More information about the Hostap mailing list