IBSS RSN: Implement disconnect() callback using sta_deauth()
authorBharat Bhushan <bchakrav@qti.qualcomm.com>
Fri, 7 Jun 2013 10:07:17 +0000 (13:07 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 7 Jun 2013 10:07:17 +0000 (13:07 +0300)
This allows driver wrappers to implement disconnection of IBSS peers in
cases operations, e.g., GTK update, fail.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/driver_i.h
wpa_supplicant/ibss_rsn.c

index 847600d..332ab2a 100644 (file)
@@ -129,6 +129,16 @@ static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
        return -1;
 }
 
+static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
+                                    const u8 *addr, int reason_code)
+{
+       if (wpa_s->driver->sta_deauth) {
+               return wpa_s->driver->sta_deauth(wpa_s->drv_priv, NULL, addr,
+                                                reason_code);
+       }
+       return -1;
+}
+
 static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
                                         const u8 *addr, int reason_code)
 {
index 046f181..687c042 100644 (file)
@@ -296,6 +296,13 @@ static int auth_set_key(void *ctx, int vlan_id, enum wpa_alg alg,
 }
 
 
+static void ibss_rsn_disconnect(void *ctx, const u8 *addr, u16 reason)
+{
+       struct ibss_rsn *ibss_rsn = ctx;
+       wpa_drv_sta_deauth(ibss_rsn->wpa_s, addr, reason);
+}
+
+
 static int auth_for_each_sta(void *ctx, int (*cb)(struct wpa_state_machine *sm,
                                                  void *ctx),
                             void *cb_ctx)
@@ -386,6 +393,7 @@ static int ibss_rsn_auth_init_group(struct ibss_rsn *ibss_rsn,
        cb.get_psk = auth_get_psk;
        cb.set_key = auth_set_key;
        cb.for_each_sta = auth_for_each_sta;
+       cb.disconnect = ibss_rsn_disconnect;
 
        ibss_rsn->auth_group = wpa_init(own_addr, &conf, &cb);
        if (ibss_rsn->auth_group == NULL) {