[PATCH v3] P2P: Ignore the DEAUTH event from cfg80211 incase of locally generated disconnect

Jouni Malinen j
Sat Jul 20 06:12:54 PDT 2013


On Thu, May 30, 2013 at 08:39:47AM +0530, jithu Jance wrote:
> Thanks for your suggestions. I have made the changes accordingly. Please
> find the patch below.

Thanks, applied with some changes:

> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> @@ -4892,12 +4892,15 @@ nla_put_failure:
>  static int wpa_driver_nl80211_disconnect(struct wpa_driver_nl80211_data

>  	wpa_printf(MSG_DEBUG, "%s(reason_code=%d)", __func__, reason_code);
>  	nl80211_mark_disconnected(drv);
> -	drv->ignore_next_local_disconnect = 0;
>  	/* Disconnect command doesn't need BSSID - it uses cached value */
> -	return wpa_driver_nl80211_mlme(drv, NULL, NL80211_CMD_DISCONNECT,
> +	ret = wpa_driver_nl80211_mlme(drv, NULL, NL80211_CMD_DISCONNECT,
>  				       reason_code, 0);
> +	if (ret)
> +		drv->ignore_next_local_disconnect = 0;
>  }

This needs to end with "return ret" to avoid compiler warnings and
semi-random behavior on error code.

> wpa_driver_nl80211_deauthenticate(struct i802_bss *bss,
>  					     const u8 *addr, int reason_code)
>  {
>  	struct wpa_driver_nl80211_data *drv = bss->drv;
> -	if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME))
> +	if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME)) {
> +		/*
> +		 * For locally generated disconnect, supplicant already
> +		 * generates a DEAUTH event. So ignore the event from NL80211.
> +		 */
> +		drv->ignore_next_local_disconnect = 1;
>  		return wpa_driver_nl80211_disconnect(drv, reason_code);
> +	}

I moved ignore_next_local_disconnect setting into
wpa_driver_nl80211_disconnect() so that this is more consistent between
both callers.

-- 
Jouni Malinen                                            PGP id EFC895FA



More information about the Hostap mailing list