[PATCH v3] P2P: Ignore the DEAUTH event from cfg80211 incase of locally generated disconnect
jithu Jance
jithu
Wed May 29 20:09:47 PDT 2013
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