TDLS: Declare tdls_testing as extern in a header file
[mech_eap.git] / wpa_supplicant / bss.h
index 2b41948..f7f72f3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * BSS table
- * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2009-2015, Jouni Malinen <j@w1.fi>
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -19,6 +19,12 @@ struct wpa_scan_res;
 #define WPA_BSS_ASSOCIATED             BIT(5)
 #define WPA_BSS_ANQP_FETCH_TRIED       BIT(6)
 
+struct wpa_bss_anqp_elem {
+       struct dl_list list;
+       u16 infoid;
+       struct wpabuf *payload;
+};
+
 /**
  * struct wpa_bss_anqp - ANQP data for a BSS entry (struct wpa_bss)
  */
@@ -26,6 +32,7 @@ struct wpa_bss_anqp {
        /** Number of BSS entries referring to this ANQP data instance */
        unsigned int users;
 #ifdef CONFIG_INTERWORKING
+       struct wpabuf *capability_list;
        struct wpabuf *venue_name;
        struct wpabuf *network_auth_type;
        struct wpabuf *roaming_consortium;
@@ -33,12 +40,15 @@ struct wpa_bss_anqp {
        struct wpabuf *nai_realm;
        struct wpabuf *anqp_3gpp;
        struct wpabuf *domain_name;
+       struct dl_list anqp_elems; /* list of struct wpa_bss_anqp_elem */
 #endif /* CONFIG_INTERWORKING */
 #ifdef CONFIG_HS20
+       struct wpabuf *hs20_capability_list;
        struct wpabuf *hs20_operator_friendly_name;
        struct wpabuf *hs20_wan_metrics;
        struct wpabuf *hs20_connection_capability;
        struct wpabuf *hs20_operating_class;
+       struct wpabuf *hs20_osu_providers_list;
 #endif /* CONFIG_HS20 */
 };
 
@@ -66,7 +76,7 @@ struct wpa_bss {
        /** HESSID */
        u8 hessid[ETH_ALEN];
        /** SSID */
-       u8 ssid[32];
+       u8 ssid[SSID_MAX_LEN];
        /** Length of SSID */
        size_t ssid_len;
        /** Frequency of the channel in MHz (e.g., 2412 = channel 1) */
@@ -84,7 +94,11 @@ struct wpa_bss {
        /** Timestamp of last Beacon/Probe Response frame */
        u64 tsf;
        /** Time of the last update (i.e., Beacon or Probe Response RX) */
-       struct os_time last_update;
+       struct os_reltime last_update;
+       /** Estimated throughput in kbps */
+       unsigned int est_throughput;
+       /** Signal-to-noise ratio in dB */
+       int snr;
        /** ANQP data */
        struct wpa_bss_anqp *anqp;
        /** Length of the following IE field in octets (from Probe Response) */
@@ -98,7 +112,7 @@ struct wpa_bss {
 void wpa_bss_update_start(struct wpa_supplicant *wpa_s);
 void wpa_bss_update_scan_res(struct wpa_supplicant *wpa_s,
                             struct wpa_scan_res *res,
-                            struct os_time *fetch_time);
+                            struct os_reltime *fetch_time);
 void wpa_bss_update_end(struct wpa_supplicant *wpa_s, struct scan_info *info,
                        int new_scan);
 int wpa_bss_init(struct wpa_supplicant *wpa_s);
@@ -118,6 +132,8 @@ struct wpa_bss * wpa_bss_get_id_range(struct wpa_supplicant *wpa_s,
                                      unsigned int idf, unsigned int idl);
 const u8 * wpa_bss_get_ie(const struct wpa_bss *bss, u8 ie);
 const u8 * wpa_bss_get_vendor_ie(const struct wpa_bss *bss, u32 vendor_type);
+const u8 * wpa_bss_get_vendor_ie_beacon(const struct wpa_bss *bss,
+                                       u32 vendor_type);
 struct wpabuf * wpa_bss_get_vendor_ie_multi(const struct wpa_bss *bss,
                                            u32 vendor_type);
 struct wpabuf * wpa_bss_get_vendor_ie_multi_beacon(const struct wpa_bss *bss,
@@ -127,4 +143,26 @@ int wpa_bss_get_bit_rates(const struct wpa_bss *bss, u8 **rates);
 struct wpa_bss_anqp * wpa_bss_anqp_alloc(void);
 int wpa_bss_anqp_unshare_alloc(struct wpa_bss *bss);
 
+static inline int bss_is_dmg(const struct wpa_bss *bss)
+{
+       return bss->freq > 45000;
+}
+
+/**
+ * Test whether a BSS is a PBSS.
+ * This checks whether a BSS is a DMG-band PBSS. PBSS is used for P2P DMG
+ * network.
+ */
+static inline int bss_is_pbss(struct wpa_bss *bss)
+{
+       return bss_is_dmg(bss) &&
+               (bss->caps & IEEE80211_CAP_DMG_MASK) == IEEE80211_CAP_DMG_PBSS;
+}
+
+static inline void wpa_bss_update_level(struct wpa_bss *bss, int new_level)
+{
+       if (bss != NULL && new_level < 0)
+               bss->level = new_level;
+}
+
 #endif /* BSS_H */