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

Jithu Jance jithu
Tue Jun 11 06:25:42 PDT 2013


Hi Jouni,

> On Wed, May 29, 2013 at 06:28:24PM +0530, jithu Jance wrote:
> > Would the below patch be sufficient enough?
> 
> It may be. I need to do some experiments to see if I can come up with
> cases where this would be an issue.
Did you get a chance to check this?


Thanks,

Jithu

> -----Original Message-----
> From: jithu Jance [mailto:jithu at broadcom.com]
> Sent: Thursday, May 30, 2013 8:40 AM
> To: Jouni Malinen
> Cc: hostap
> Subject: Re: [PATCH v3] P2P: Ignore the DEAUTH event from cfg80211 incase
> of locally generated disconnect
> 
> Hi Jouni,
> 
> Thanks for your suggestions. I have made the changes accordingly. Please
> find the patch below.
> 
> 
> Signed-hostap: Jithu Jance <jithu at broadcom.com>
> 
> ---
>  src/drivers/driver_nl80211.c |   15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> index f403189..4f7d7e3 100644
> --- 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
> *drv,
>  					 int reason_code)
>  {
> +	int ret;
> +
>  	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;
>  }
> 
> 
> @@ -4905,8 +4908,14 @@ static int
> 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);
> +	}
>  	wpa_printf(MSG_DEBUG, "%s(addr=" MACSTR " reason_code=%d)",
>  		   __func__, MAC2STR(addr), reason_code);
>  	nl80211_mark_disconnected(drv);
> --
> 1.7.9.5
> 
> 
> 
> Thanks,
> 
> Jithu Jance
> 
> 
> 
> 
> 
> On Thu, 2013-05-30 at 00:38 +0300, Jouni Malinen wrote:
> > On Wed, May 29, 2013 at 06:28:24PM +0530, jithu Jance wrote:
> > > Would the below patch be sufficient enough?
> >
> > It may be. I need to do some experiments to see if I can come up with
> > cases where this would be an issue.
> >
> > > [PATCH] Ignore the Disconnect event that is generated as a result of
> > >  local disconnect
> > > hostap: Jithu Jance <jithu at broadcom.com>
> >
> > Could you please repost with "Signed-hostap" tag?
> >
> > > diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
> > > @@ -4892,12 +4892,15 @@ nla_put_failure:
> > > +	int ret = 0;
> >
> > No need to initialize ret here.
> >
> > > -	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,
> > > -				       reason_code, 0);
> > > +	if ((ret = wpa_driver_nl80211_mlme(drv, NULL,
> NL80211_CMD_DISCONNECT,
> > > +				       reason_code, 0)) < 0)
> > > +		drv->ignore_next_local_disconnect = 0;
> >
> > I'd prefer following style:
> >     ret = wpa_driver....;
> >     if (ret < 0)
> > 	drv->ignore_next...;
> >
> > > @@ -4905,8 +4908,10 @@ static int
> > > 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)) {
> > > +		drv->ignore_next_local_disconnect = 1;
> > >  		return wpa_driver_nl80211_disconnect(drv, reason_code);
> > > +	}
> >
> > Would be a good to add a comment here describing why this is needed.
> >




More information about the Hostap mailing list