]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Handle port authorized event
authorAvraham Stern <avraham.stern@intel.com>
Sun, 28 Jan 2018 12:45:36 +0000 (14:45 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 17 Feb 2018 16:44:08 +0000 (18:44 +0200)
Indicate that the connection is authorized when receiving a port
authorized event from the driver.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
src/drivers/driver_nl80211_event.c

index 66a3667fefd6f701e0013816f913b06162ba0635..dd9b001e4fd6422fabe5224718ff37d200f20a49 100644 (file)
@@ -2220,6 +2220,32 @@ static void nl80211_external_auth(struct wpa_driver_nl80211_data *drv,
        wpa_supplicant_event(drv->ctx, EVENT_EXTERNAL_AUTH, &event);
 }
 
+
+static void nl80211_port_authorized(struct wpa_driver_nl80211_data *drv,
+                                   struct nlattr **tb)
+{
+       const u8 *addr;
+
+       if (!tb[NL80211_ATTR_MAC] ||
+           nla_len(tb[NL80211_ATTR_MAC]) != ETH_ALEN) {
+               wpa_printf(MSG_DEBUG,
+                          "nl80211: Ignore port authorized event without BSSID");
+               return;
+       }
+
+       addr = nla_data(tb[NL80211_ATTR_MAC]);
+       if (os_memcmp(addr, drv->bssid, ETH_ALEN) != 0) {
+               wpa_printf(MSG_DEBUG,
+                          "nl80211: Ignore port authorized event for " MACSTR
+                          " (not the currently connected BSSID " MACSTR ")",
+                          MAC2STR(addr), MAC2STR(drv->bssid));
+               return;
+       }
+
+       wpa_supplicant_event(drv->ctx, EVENT_PORT_AUTHORIZED, NULL);
+}
+
+
 static void do_process_drv_event(struct i802_bss *bss, int cmd,
                                 struct nlattr **tb)
 {
@@ -2418,6 +2444,9 @@ static void do_process_drv_event(struct i802_bss *bss, int cmd,
        case NL80211_CMD_NEW_PEER_CANDIDATE:
                nl80211_new_peer_candidate(drv, tb);
                break;
+       case NL80211_CMD_PORT_AUTHORIZED:
+               nl80211_port_authorized(drv, tb);
+               break;
        default:
                wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
                        "(cmd=%d)", cmd);