hostapd
bss.h
1 /*
2  * BSS table
3  * Copyright (c) 2009-2015, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8 
9 #ifndef BSS_H
10 #define BSS_H
11 
12 struct wpa_scan_res;
13 
14 #define WPA_BSS_QUAL_INVALID BIT(0)
15 #define WPA_BSS_NOISE_INVALID BIT(1)
16 #define WPA_BSS_LEVEL_INVALID BIT(2)
17 #define WPA_BSS_LEVEL_DBM BIT(3)
18 #define WPA_BSS_AUTHENTICATED BIT(4)
19 #define WPA_BSS_ASSOCIATED BIT(5)
20 #define WPA_BSS_ANQP_FETCH_TRIED BIT(6)
21 
23  struct dl_list list;
24  u16 infoid;
25  struct wpabuf *payload;
26 };
27 
31 struct wpa_bss_anqp {
33  unsigned int users;
34 #ifdef CONFIG_INTERWORKING
35  struct wpabuf *capability_list;
36  struct wpabuf *venue_name;
37  struct wpabuf *network_auth_type;
38  struct wpabuf *roaming_consortium;
39  struct wpabuf *ip_addr_type_availability;
40  struct wpabuf *nai_realm;
41  struct wpabuf *anqp_3gpp;
42  struct wpabuf *domain_name;
43  struct wpabuf *fils_realm_info;
44  struct dl_list anqp_elems; /* list of struct wpa_bss_anqp_elem */
45 #endif /* CONFIG_INTERWORKING */
46 #ifdef CONFIG_HS20
47  struct wpabuf *hs20_capability_list;
48  struct wpabuf *hs20_operator_friendly_name;
49  struct wpabuf *hs20_wan_metrics;
50  struct wpabuf *hs20_connection_capability;
51  struct wpabuf *hs20_operating_class;
52  struct wpabuf *hs20_osu_providers_list;
53 #endif /* CONFIG_HS20 */
54 };
55 
62 struct wpa_bss {
64  struct dl_list list;
66  struct dl_list list_id;
68  unsigned int id;
70  unsigned int scan_miss_count;
72  unsigned int last_update_idx;
74  unsigned int flags;
76  u8 bssid[ETH_ALEN];
78  u8 hessid[ETH_ALEN];
80  u8 ssid[SSID_MAX_LEN];
82  size_t ssid_len;
84  int freq;
88  u16 caps;
90  int qual;
92  int noise;
94  int level;
96  u64 tsf;
98  struct os_reltime last_update;
100  unsigned int est_throughput;
102  int snr;
106  size_t ie_len;
109  /* followed by ie_len octets of IEs */
110  /* followed by beacon_ie_len octets of IEs */
111 };
112 
113 void wpa_bss_update_start(struct wpa_supplicant *wpa_s);
114 void wpa_bss_update_scan_res(struct wpa_supplicant *wpa_s,
115  struct wpa_scan_res *res,
116  struct os_reltime *fetch_time);
117 void wpa_bss_remove(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
118  const char *reason);
119 void wpa_bss_update_end(struct wpa_supplicant *wpa_s, struct scan_info *info,
120  int new_scan);
121 int wpa_bss_init(struct wpa_supplicant *wpa_s);
122 void wpa_bss_deinit(struct wpa_supplicant *wpa_s);
123 void wpa_bss_flush(struct wpa_supplicant *wpa_s);
124 void wpa_bss_flush_by_age(struct wpa_supplicant *wpa_s, int age);
125 struct wpa_bss * wpa_bss_get(struct wpa_supplicant *wpa_s, const u8 *bssid,
126  const u8 *ssid, size_t ssid_len);
127 struct wpa_bss * wpa_bss_get_bssid(struct wpa_supplicant *wpa_s,
128  const u8 *bssid);
129 struct wpa_bss * wpa_bss_get_bssid_latest(struct wpa_supplicant *wpa_s,
130  const u8 *bssid);
131 struct wpa_bss * wpa_bss_get_p2p_dev_addr(struct wpa_supplicant *wpa_s,
132  const u8 *dev_addr);
133 struct wpa_bss * wpa_bss_get_id(struct wpa_supplicant *wpa_s, unsigned int id);
134 struct wpa_bss * wpa_bss_get_id_range(struct wpa_supplicant *wpa_s,
135  unsigned int idf, unsigned int idl);
136 const u8 * wpa_bss_get_ie(const struct wpa_bss *bss, u8 ie);
137 const u8 * wpa_bss_get_vendor_ie(const struct wpa_bss *bss, u32 vendor_type);
138 const u8 * wpa_bss_get_vendor_ie_beacon(const struct wpa_bss *bss,
139  u32 vendor_type);
140 struct wpabuf * wpa_bss_get_vendor_ie_multi(const struct wpa_bss *bss,
141  u32 vendor_type);
142 struct wpabuf * wpa_bss_get_vendor_ie_multi_beacon(const struct wpa_bss *bss,
143  u32 vendor_type);
144 int wpa_bss_get_max_rate(const struct wpa_bss *bss);
145 int wpa_bss_get_bit_rates(const struct wpa_bss *bss, u8 **rates);
146 struct wpa_bss_anqp * wpa_bss_anqp_alloc(void);
147 int wpa_bss_anqp_unshare_alloc(struct wpa_bss *bss);
148 
149 static inline int bss_is_dmg(const struct wpa_bss *bss)
150 {
151  return bss->freq > 45000;
152 }
153 
159 static inline int bss_is_pbss(struct wpa_bss *bss)
160 {
161  return bss_is_dmg(bss) &&
162  (bss->caps & IEEE80211_CAP_DMG_MASK) == IEEE80211_CAP_DMG_PBSS;
163 }
164 
165 static inline void wpa_bss_update_level(struct wpa_bss *bss, int new_level)
166 {
167  if (bss != NULL && new_level < 0)
168  bss->level = new_level;
169 }
170 
171 void calculate_update_time(const struct os_reltime *fetch_time,
172  unsigned int age_ms,
173  struct os_reltime *update_time);
174 
175 #endif /* BSS_H */
unsigned int scan_miss_count
Number of counts without seeing this BSS.
Definition: bss.h:70
u16 caps
Capability information field in host byte order.
Definition: bss.h:88
u8 bssid[ETH_ALEN]
BSSID.
Definition: bss.h:76
unsigned int last_update_idx
Index of the last scan update.
Definition: bss.h:72
unsigned int flags
Information flags about the BSS/IBSS (WPA_BSS_*)
Definition: bss.h:74
int qual
Signal quality.
Definition: bss.h:90
Definition: wpabuf.h:20
u16 beacon_int
Beacon interval in TUs (host byte order)
Definition: bss.h:86
struct wpa_scan_res - Scan result for an BSS/IBSS : information flags about the BSS/IBSS (WPA_SCAN_*)...
Definition: driver.h:259
size_t ssid_len
Length of SSID.
Definition: bss.h:82
struct wpa_bss_anqp - ANQP data for a BSS entry (struct wpa_bss)
Definition: bss.h:31
Definition: os.h:26
struct wpa_bss_anqp * anqp
ANQP data.
Definition: bss.h:104
int freq
Frequency of the channel in MHz (e.g., 2412 = channel 1)
Definition: bss.h:84
u8 ssid[SSID_MAX_LEN]
SSID.
Definition: bss.h:80
int level
Signal level.
Definition: bss.h:94
struct dl_list - Doubly-linked list
Definition: list.h:15
size_t beacon_ie_len
Length of the following Beacon IE field in octets.
Definition: bss.h:108
unsigned int users
Number of BSS entries referring to this ANQP data instance.
Definition: bss.h:33
struct wpa_bss - BSS table
Definition: bss.h:62
size_t ie_len
Length of the following IE field in octets (from Probe Response)
Definition: bss.h:106
u64 tsf
Timestamp of last Beacon/Probe Response frame.
Definition: bss.h:96
int noise
Noise level.
Definition: bss.h:92
struct wpa_supplicant - Internal data for wpa_supplicant interface
Definition: wpa_supplicant_i.h:472
int snr
Signal-to-noise ratio in dB.
Definition: bss.h:102
unsigned int id
Unique identifier for this BSS entry.
Definition: bss.h:68
unsigned int est_throughput
Estimated throughput in kbps.
Definition: bss.h:100
Definition: bss.h:22
Definition: interworking.c:337