Lines Matching refs:bss

25 #include "bss.h"
63 static void wpa_bss_remove(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
65 dl_list_del(&bss->list);
66 dl_list_del(&bss->list_id);
69 bss->id, MAC2STR(bss->bssid),
70 wpa_ssid_txt(bss->ssid, bss->ssid_len));
71 wpas_notify_bss_removed(wpa_s, bss->bssid, bss->id);
72 os_free(bss);
79 struct wpa_bss *bss;
80 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
81 if (os_memcmp(bss->bssid, bssid, ETH_ALEN) == 0 &&
82 bss->ssid_len == ssid_len &&
83 os_memcmp(bss->ssid, ssid, ssid_len) == 0)
84 return bss;
119 struct wpa_bss *bss;
121 bss = os_zalloc(sizeof(*bss) + res->ie_len + res->beacon_ie_len);
122 if (bss == NULL)
124 bss->id = wpa_s->bss_next_id++;
125 bss->last_update_idx = wpa_s->bss_update_idx;
126 wpa_bss_copy_res(bss, res);
127 os_memcpy(bss->ssid, ssid, ssid_len);
128 bss->ssid_len = ssid_len;
129 bss->ie_len = res->ie_len;
130 bss->beacon_ie_len = res->beacon_ie_len;
131 os_memcpy(bss + 1, res + 1, res->ie_len + res->beacon_ie_len);
133 dl_list_add_tail(&wpa_s->bss, &bss->list);
134 dl_list_add_tail(&wpa_s->bss_id, &bss->list_id);
137 bss->id, MAC2STR(bss->bssid), wpa_ssid_txt(ssid, ssid_len));
138 wpas_notify_bss_added(wpa_s, bss->bssid, bss->id);
141 wpa_bss_remove(wpa_s, dl_list_first(&wpa_s->bss,
174 wpa_printf(MSG_DEBUG, "bss: %s: cannot compare IEs", __func__);
241 const struct wpa_bss *bss)
244 wpas_notify_bss_freq_changed(wpa_s, bss->id);
247 wpas_notify_bss_signal_changed(wpa_s, bss->id);
250 wpas_notify_bss_privacy_changed(wpa_s, bss->id);
253 wpas_notify_bss_mode_changed(wpa_s, bss->id);
256 wpas_notify_bss_wpaie_changed(wpa_s, bss->id);
259 wpas_notify_bss_rsnie_changed(wpa_s, bss->id);
262 wpas_notify_bss_wps_changed(wpa_s, bss->id);
265 wpas_notify_bss_ies_changed(wpa_s, bss->id);
268 wpas_notify_bss_rates_changed(wpa_s, bss->id);
272 static void wpa_bss_update(struct wpa_supplicant *wpa_s, struct wpa_bss *bss,
277 changes = wpa_bss_compare_res(bss, res);
278 bss->scan_miss_count = 0;
279 bss->last_update_idx = wpa_s->bss_update_idx;
280 wpa_bss_copy_res(bss, res);
282 dl_list_del(&bss->list);
283 if (bss->ie_len + bss->beacon_ie_len >=
285 os_memcpy(bss + 1, res + 1, res->ie_len + res->beacon_ie_len);
286 bss->ie_len = res->ie_len;
287 bss->beacon_ie_len = res->beacon_ie_len;
290 struct dl_list *prev = bss->list_id.prev;
291 dl_list_del(&bss->list_id);
292 nbss = os_realloc(bss, sizeof(*bss) + res->ie_len +
295 bss = nbss;
296 os_memcpy(bss + 1, res + 1,
298 bss->ie_len = res->ie_len;
299 bss->beacon_ie_len = res->beacon_ie_len;
301 dl_list_add(prev, &bss->list_id);
303 dl_list_add_tail(&wpa_s->bss, &bss->list);
305 notify_bss_changes(wpa_s, changes, bss);
309 static int wpa_bss_in_use(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
311 return bss == wpa_s->current_bss ||
312 os_memcmp(bss->bssid, wpa_s->bssid, ETH_ALEN) == 0 ||
313 os_memcmp(bss->bssid, wpa_s->pending_bssid, ETH_ALEN) == 0;
329 struct wpa_bss *bss;
345 bss = wpa_bss_get(wpa_s, res->bssid, ssid + 2, ssid[1]);
346 if (bss == NULL)
349 wpa_bss_update(wpa_s, bss, res);
353 static int wpa_bss_included_in_scan(const struct wpa_bss *bss,
365 if (bss->freq == info->freqs[i]) {
379 (s->ssid_len == bss->ssid_len &&
380 os_memcmp(s->ssid, bss->ssid, bss->ssid_len) ==
397 struct wpa_bss *bss, *n;
402 dl_list_for_each_safe(bss, n, &wpa_s->bss, struct wpa_bss, list) {
403 if (wpa_bss_in_use(wpa_s, bss))
405 if (!wpa_bss_included_in_scan(bss, info))
407 if (bss->last_update_idx < wpa_s->bss_update_idx)
408 bss->scan_miss_count++;
409 if (bss->scan_miss_count >= WPA_BSS_EXPIRATION_SCAN_COUNT) {
411 "match in scan", bss->id);
412 wpa_bss_remove(wpa_s, bss);
421 struct wpa_bss *bss, *n;
424 if (dl_list_empty(&wpa_s->bss))
430 dl_list_for_each_safe(bss, n, &wpa_s->bss, struct wpa_bss, list) {
431 if (wpa_bss_in_use(wpa_s, bss))
434 if (os_time_before(&bss->last_update, &t)) {
436 bss->id);
437 wpa_bss_remove(wpa_s, bss);
448 dl_list_init(&wpa_s->bss);
458 struct wpa_bss *bss, *n;
460 if (wpa_s->bss.next == NULL)
462 dl_list_for_each_safe(bss, n, &wpa_s->bss, struct wpa_bss, list)
463 wpa_bss_remove(wpa_s, bss);
470 struct wpa_bss *bss;
471 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
472 if (os_memcmp(bss->bssid, bssid, ETH_ALEN) == 0)
473 return bss;
481 struct wpa_bss *bss;
482 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) {
483 if (bss->id == id)
484 return bss;
490 const u8 * wpa_bss_get_ie(const struct wpa_bss *bss, u8 ie)
494 pos = (const u8 *) (bss + 1);
495 end = pos + bss->ie_len;
509 const u8 * wpa_bss_get_vendor_ie(const struct wpa_bss *bss, u32 vendor_type)
513 pos = (const u8 *) (bss + 1);
514 end = pos + bss->ie_len;
529 struct wpabuf * wpa_bss_get_vendor_ie_multi(const struct wpa_bss *bss,
535 buf = wpabuf_alloc(bss->ie_len);
539 pos = (const u8 *) (bss + 1);
540 end = pos + bss->ie_len;
560 int wpa_bss_get_max_rate(const struct wpa_bss *bss)
566 ie = wpa_bss_get_ie(bss, WLAN_EID_SUPP_RATES);
572 ie = wpa_bss_get_ie(bss, WLAN_EID_EXT_SUPP_RATES);
582 int wpa_bss_get_bit_rates(const struct wpa_bss *bss, u8 **rates)
589 ie = wpa_bss_get_ie(bss, WLAN_EID_SUPP_RATES);
590 ie2 = wpa_bss_get_ie(bss, WLAN_EID_EXT_SUPP_RATES);