]> git.ipfire.org Git - thirdparty/hostap.git/blobdiff - wpa_supplicant/bss.c
EAP: Increase the maximum number of message exchanges
[thirdparty/hostap.git] / wpa_supplicant / bss.c
index 37ac84475dbb7ad65629ac22b841d33c89c53d5d..441529cb0fd536fdf7cce20731d3bb8cdae2f6fd 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * BSS table
- * Copyright (c) 2009-2015, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2009-2019, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -102,6 +102,8 @@ static struct wpa_bss_anqp * wpa_bss_anqp_clone(struct wpa_bss_anqp *anqp)
        ANQP_DUP(hs20_connection_capability);
        ANQP_DUP(hs20_operating_class);
        ANQP_DUP(hs20_osu_providers_list);
+       ANQP_DUP(hs20_operator_icon_metadata);
+       ANQP_DUP(hs20_osu_providers_nai_list);
 #endif /* CONFIG_HS20 */
 #undef ANQP_DUP
 
@@ -185,6 +187,8 @@ static void wpa_bss_anqp_free(struct wpa_bss_anqp *anqp)
        wpabuf_free(anqp->hs20_connection_capability);
        wpabuf_free(anqp->hs20_operating_class);
        wpabuf_free(anqp->hs20_osu_providers_list);
+       wpabuf_free(anqp->hs20_operator_icon_metadata);
+       wpabuf_free(anqp->hs20_osu_providers_nai_list);
 #endif /* CONFIG_HS20 */
 
        os_free(anqp);
@@ -269,9 +273,9 @@ struct wpa_bss * wpa_bss_get(struct wpa_supplicant *wpa_s, const u8 *bssid,
 }
 
 
-static void calculate_update_time(const struct os_reltime *fetch_time,
-                                 unsigned int age_ms,
-                                 struct os_reltime *update_time)
+void calculate_update_time(const struct os_reltime *fetch_time,
+                          unsigned int age_ms,
+                          struct os_reltime *update_time)
 {
        os_time_t usec;
 
@@ -427,6 +431,7 @@ static struct wpa_bss * wpa_bss_add(struct wpa_supplicant *wpa_s,
                                    struct os_reltime *fetch_time)
 {
        struct wpa_bss *bss;
+       char extra[50];
 
        bss = os_zalloc(sizeof(*bss) + res->ie_len + res->beacon_ie_len);
        if (bss == NULL)
@@ -452,10 +457,15 @@ static struct wpa_bss * wpa_bss_add(struct wpa_supplicant *wpa_s,
        dl_list_add_tail(&wpa_s->bss, &bss->list);
        dl_list_add_tail(&wpa_s->bss_id, &bss->list_id);
        wpa_s->num_bss++;
+       if (!is_zero_ether_addr(bss->hessid))
+               os_snprintf(extra, sizeof(extra), " HESSID " MACSTR,
+                           MAC2STR(bss->hessid));
+       else
+               extra[0] = '\0';
        wpa_dbg(wpa_s, MSG_DEBUG, "BSS: Add new id %u BSSID " MACSTR
-               " SSID '%s' freq %d",
+               " SSID '%s' freq %d%s",
                bss->id, MAC2STR(bss->bssid), wpa_ssid_txt(ssid, ssid_len),
-               bss->freq);
+               bss->freq, extra);
        wpas_notify_bss_added(wpa_s, bss->bssid, bss->id);
        return bss;
 }
@@ -1317,3 +1327,26 @@ int wpa_bss_get_bit_rates(const struct wpa_bss *bss, u8 **rates)
        *rates = r;
        return len;
 }
+
+
+#ifdef CONFIG_FILS
+const u8 * wpa_bss_get_fils_cache_id(struct wpa_bss *bss)
+{
+       const u8 *ie;
+
+       if (bss) {
+               ie = wpa_bss_get_ie(bss, WLAN_EID_FILS_INDICATION);
+               if (ie && ie[1] >= 4 && WPA_GET_LE16(ie + 2) & BIT(7))
+                       return ie + 4;
+       }
+
+       return NULL;
+}
+#endif /* CONFIG_FILS */
+
+
+int wpa_bss_ext_capab(const struct wpa_bss *bss, unsigned int capab)
+{
+       return ieee802_11_ext_capab(wpa_bss_get_ie(bss, WLAN_EID_EXT_CAPAB),
+                                   capab);
+}