Lines Matching refs:bss

25 void wpa_bss_remove(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,  in wpa_bss_remove()  argument
31 if (wpa_s->last_scan_res[i] == bss) { in wpa_bss_remove()
41 dl_list_del(&bss->list); in wpa_bss_remove()
42 dl_list_del(&bss->list_id); in wpa_bss_remove()
45 " SSID '%s' due to %s", bss->id, MAC2STR(bss->bssid), in wpa_bss_remove()
46 wpa_ssid_txt(bss->ssid, bss->ssid_len), reason); in wpa_bss_remove()
47 os_free(bss); in wpa_bss_remove()
62 struct wpa_bss *bss; in wpa_bss_get() local
63 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_get()
64 if (os_memcmp(bss->bssid, bssid, ETH_ALEN) == 0 && in wpa_bss_get()
65 bss->ssid_len == ssid_len && in wpa_bss_get()
66 os_memcmp(bss->ssid, ssid, ssid_len) == 0) in wpa_bss_get()
67 return bss; in wpa_bss_get()
108 static int wpa_bss_known(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) in wpa_bss_known() argument
114 if (ssid->len == bss->ssid_len && in wpa_bss_known()
115 os_memcmp(ssid->ssid, bss->ssid, ssid->len) == 0) in wpa_bss_known()
121 static int wpa_bss_in_use(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) in wpa_bss_in_use() argument
123 if (bss == wpa_s->current_bss) in wpa_bss_in_use()
128 (bss->ssid_len != wpa_s->current_bss->ssid_len || in wpa_bss_in_use()
129 os_memcmp(bss->ssid, wpa_s->current_bss->ssid, in wpa_bss_in_use()
130 bss->ssid_len) != 0)) in wpa_bss_in_use()
133 return !is_zero_ether_addr(bss->bssid) && wpa_s->current_bss->bssid && in wpa_bss_in_use()
134 (os_memcmp(bss->bssid, wpa_s->current_bss->bssid, ETH_ALEN) == 0); in wpa_bss_in_use()
142 struct wpa_bss *bss; in wpa_bss_remove_oldest_unknown() local
144 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_remove_oldest_unknown()
145 if (!wpa_bss_known(wpa_s, bss)) { in wpa_bss_remove_oldest_unknown()
146 wpa_bss_remove(wpa_s, bss, __func__); in wpa_bss_remove_oldest_unknown()
156 struct wpa_bss *bss; in wpa_bss_remove_oldest() local
168 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_remove_oldest()
169 if (!wpa_bss_in_use(wpa_s, bss)) { in wpa_bss_remove_oldest()
170 wpa_bss_remove(wpa_s, bss, __func__); in wpa_bss_remove_oldest()
183 struct wpa_bss *bss; in wpa_bss_add() local
192 bss = os_zalloc(sizeof(*bss) + res->ie_len + res->beacon_ie_len); in wpa_bss_add()
193 if (bss == NULL) in wpa_bss_add()
195 bss->id = wpa_s->bss_next_id++; in wpa_bss_add()
196 bss->last_update_idx = wpa_s->bss_update_idx; in wpa_bss_add()
197 wpa_bss_copy_res(bss, res, fetch_time); in wpa_bss_add()
198 os_memcpy(bss->ssid, ssid, ssid_len); in wpa_bss_add()
199 bss->ssid_len = ssid_len; in wpa_bss_add()
200 bss->ie_len = res->ie_len; in wpa_bss_add()
201 bss->beacon_ie_len = res->beacon_ie_len; in wpa_bss_add()
202 os_memcpy(bss->ies, res + 1, res->ie_len + res->beacon_ie_len); in wpa_bss_add()
204 dl_list_add_tail(&wpa_s->bss, &bss->list); in wpa_bss_add()
205 dl_list_add_tail(&wpa_s->bss_id, &bss->list_id); in wpa_bss_add()
209 bss->id, MAC2STR(bss->bssid), wpa_ssid_txt(ssid, ssid_len), in wpa_bss_add()
210 bss->channel); in wpa_bss_add()
211 return bss; in wpa_bss_add()
215 wpa_bss_update(struct wpa_supplicant *wpa_s, struct wpa_bss *bss, in wpa_bss_update() argument
218 if (bss->last_update_idx == wpa_s->bss_update_idx) { in wpa_bss_update()
230 MAC2STR(bss->bssid)); in wpa_bss_update()
236 bss->last_update_idx = wpa_s->bss_update_idx; in wpa_bss_update()
237 wpa_bss_copy_res(bss, res, fetch_time); in wpa_bss_update()
239 dl_list_del(&bss->list); in wpa_bss_update()
240 if (bss->ie_len + bss->beacon_ie_len >= in wpa_bss_update()
242 os_memcpy(bss->ies, res + 1, res->ie_len + res->beacon_ie_len); in wpa_bss_update()
243 bss->ie_len = res->ie_len; in wpa_bss_update()
244 bss->beacon_ie_len = res->beacon_ie_len; in wpa_bss_update()
247 struct dl_list *prev = bss->list_id.prev; in wpa_bss_update()
248 dl_list_del(&bss->list_id); in wpa_bss_update()
249 nbss = os_realloc(bss, sizeof(*bss) + res->ie_len + in wpa_bss_update()
254 if (wpa_s->last_scan_res[i] == bss) { in wpa_bss_update()
259 if (wpa_s->current_bss == bss) in wpa_bss_update()
261 bss = nbss; in wpa_bss_update()
262 os_memcpy(bss->ies, res + 1, in wpa_bss_update()
264 bss->ie_len = res->ie_len; in wpa_bss_update()
265 bss->beacon_ie_len = res->beacon_ie_len; in wpa_bss_update()
267 dl_list_add(prev, &bss->list_id); in wpa_bss_update()
269 dl_list_add_tail(&wpa_s->bss, &bss->list); in wpa_bss_update()
271 return bss; in wpa_bss_update()
308 struct wpa_bss *bss; in wpa_bss_update_scan_res() local
325 bss = wpa_bss_get(wpa_s, res->bssid, ssid + 2, ssid[1]); in wpa_bss_update_scan_res()
326 if (bss == NULL) in wpa_bss_update_scan_res()
327 bss = wpa_bss_add(wpa_s, ssid + 2, ssid[1], res, fetch_time); in wpa_bss_update_scan_res()
329 bss = wpa_bss_update(wpa_s, bss, res, fetch_time); in wpa_bss_update_scan_res()
333 if (bss == wpa_s->last_scan_res[i]) { in wpa_bss_update_scan_res()
341 if (bss == NULL) in wpa_bss_update_scan_res()
359 wpa_s->last_scan_res[wpa_s->last_scan_res_used++] = bss; in wpa_bss_update_scan_res()
388 dl_list_init(&wpa_s->bss); in wpa_bss_init()
400 struct wpa_bss *bss, *n; in wpa_bss_flush() local
402 if (wpa_s->bss.next == NULL) in wpa_bss_flush()
405 dl_list_for_each_safe(bss, n, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_flush()
406 if (wpa_bss_in_use(wpa_s, bss)) in wpa_bss_flush()
408 wpa_bss_remove(wpa_s, bss, __func__); in wpa_bss_flush()
432 struct wpa_bss *bss; in wpa_bss_get_bssid() local
433 dl_list_for_each_reverse(bss, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_get_bssid()
434 if (os_memcmp(bss->bssid, bssid, ETH_ALEN) == 0) in wpa_bss_get_bssid()
435 return bss; in wpa_bss_get_bssid()
450 struct wpa_bss *bss; in wpa_bss_get_next_bss() local
453 return dl_list_first(&wpa_s->bss, struct wpa_bss, list); in wpa_bss_get_next_bss()
454 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in wpa_bss_get_next_bss()
455 if (os_memcmp(bss->bssid, prev_bss->bssid, ETH_ALEN) == 0) in wpa_bss_get_next_bss()
456 return dl_list_entry(bss->list.next, struct wpa_bss, list); in wpa_bss_get_next_bss()
470 const u8 * wpa_bss_get_ie(const struct wpa_bss *bss, u8 ie) in wpa_bss_get_ie() argument
472 return get_ie((const u8 *) (bss + 1), bss->ie_len, ie); in wpa_bss_get_ie()
484 const u8 * wpa_bss_get_vendor_ie(const struct wpa_bss *bss, u32 vendor_type) in wpa_bss_get_vendor_ie() argument
489 ies = wpa_bss_ie_ptr(bss); in wpa_bss_get_vendor_ie()
491 for_each_element_id(elem, WLAN_EID_VENDOR_SPECIFIC, ies, bss->ie_len) { in wpa_bss_get_vendor_ie()
500 int wpa_bss_ext_capab(const struct wpa_bss *bss, unsigned int capab) in wpa_bss_ext_capab() argument
502 return ieee802_11_ext_capab(wpa_bss_get_ie(bss, WLAN_EID_EXT_CAPAB), in wpa_bss_ext_capab()