Lines Matching refs:bss
50 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw,
53 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw,
230 static int additional_roaming_consortiums(struct wpa_bss *bss) in additional_roaming_consortiums() argument
233 ie = wpa_bss_get_ie(bss, WLAN_EID_ROAMING_CONSORTIUM); in additional_roaming_consortiums()
248 struct wpa_bss *bss) in interworking_anqp_send_req() argument
259 MAC2STR(bss->bssid)); in interworking_anqp_send_req()
260 wpa_s->interworking_gas_bss = bss; in interworking_anqp_send_req()
268 additional_roaming_consortiums(bss))) in interworking_anqp_send_req()
284 if (wpa_bss_get_vendor_ie(bss, HS20_IE_VENDOR_TYPE)) { in interworking_anqp_send_req()
319 res = gas_query_req(wpa_s->gas, bss->bssid, bss->freq, 0, 0, buf, in interworking_anqp_send_req()
889 struct wpa_cred *cred, struct wpa_bss *bss) in already_connected() argument
901 if (ssid->ssid_len != bss->ssid_len || in already_connected()
902 os_memcmp(ssid->ssid, bss->ssid, bss->ssid_len) != 0) in already_connected()
916 struct wpa_bss *bss) in remove_duplicate_network() argument
923 if (ssid->ssid_len != bss->ssid_len || in remove_duplicate_network()
924 os_memcmp(ssid->ssid, bss->ssid, bss->ssid_len) != 0) in remove_duplicate_network()
981 struct wpa_bss *bss, int only_add) in interworking_connect_3gpp() argument
989 if (bss->anqp == NULL || bss->anqp->anqp_3gpp == NULL) in interworking_connect_3gpp()
993 " (3GPP)", MAC2STR(bss->bssid)); in interworking_connect_3gpp()
995 if (already_connected(wpa_s, cred, bss)) { in interworking_connect_3gpp()
997 MAC2STR(bss->bssid)); in interworking_connect_3gpp()
1001 remove_duplicate_network(wpa_s, cred, bss); in interworking_connect_3gpp()
1012 ssid->ssid = os_zalloc(bss->ssid_len + 1); in interworking_connect_3gpp()
1015 os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); in interworking_connect_3gpp()
1016 ssid->ssid_len = bss->ssid_len; in interworking_connect_3gpp()
1206 static int cred_no_required_oi_match(struct wpa_cred *cred, struct wpa_bss *bss) in cred_no_required_oi_match() argument
1214 ie = wpa_bss_get_ie(bss, WLAN_EID_ROAMING_CONSORTIUM); in cred_no_required_oi_match()
1217 (bss->anqp == NULL || bss->anqp->roaming_consortium == NULL)) in cred_no_required_oi_match()
1223 if (!oi_match(ie, bss->anqp ? in cred_no_required_oi_match()
1224 bss->anqp->roaming_consortium : NULL, in cred_no_required_oi_match()
1233 static int cred_excluded_ssid(struct wpa_cred *cred, struct wpa_bss *bss) in cred_excluded_ssid() argument
1242 if (bss->ssid_len == e->ssid_len && in cred_excluded_ssid()
1243 os_memcmp(bss->ssid, e->ssid, e->ssid_len) == 0) in cred_excluded_ssid()
1252 struct wpa_cred *cred, struct wpa_bss *bss) in cred_below_min_backhaul() argument
1268 if (bss->anqp == NULL || bss->anqp->hs20_wan_metrics == NULL) in cred_below_min_backhaul()
1271 wan = wpabuf_head(bss->anqp->hs20_wan_metrics); in cred_below_min_backhaul()
1293 res = interworking_home_sp_cred(wpa_s, cred, bss->anqp ? in cred_below_min_backhaul()
1294 bss->anqp->domain_name : NULL); in cred_below_min_backhaul()
1313 struct wpa_cred *cred, struct wpa_bss *bss) in cred_over_max_bss_load() argument
1321 ie = wpa_bss_get_ie(bss, WLAN_EID_BSS_LOAD); in cred_over_max_bss_load()
1325 res = interworking_home_sp_cred(wpa_s, cred, bss->anqp ? in cred_over_max_bss_load()
1326 bss->anqp->domain_name : NULL); in cred_over_max_bss_load()
1365 struct wpa_cred *cred, struct wpa_bss *bss) in cred_conn_capab_missing() argument
1376 if (bss->anqp == NULL || bss->anqp->hs20_connection_capability == NULL) in cred_conn_capab_missing()
1380 res = interworking_home_sp_cred(wpa_s, cred, bss->anqp ? in cred_conn_capab_missing()
1381 bss->anqp->domain_name : NULL); in cred_conn_capab_missing()
1385 capab = wpabuf_head(bss->anqp->hs20_connection_capability); in cred_conn_capab_missing()
1386 end = capab + wpabuf_len(bss->anqp->hs20_connection_capability); in cred_conn_capab_missing()
1411 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw, in interworking_credentials_available_roaming_consortium() argument
1419 ie = wpa_bss_get_ie(bss, WLAN_EID_ROAMING_CONSORTIUM); in interworking_credentials_available_roaming_consortium()
1420 anqp = bss->anqp ? bss->anqp->roaming_consortium : NULL; in interworking_credentials_available_roaming_consortium()
1440 cred_no_required_oi_match(cred, bss)) in interworking_credentials_available_roaming_consortium()
1447 if (!ignore_bw && cred_below_min_backhaul(wpa_s, cred, bss)) in interworking_credentials_available_roaming_consortium()
1449 if (!ignore_bw && cred_over_max_bss_load(wpa_s, cred, bss)) in interworking_credentials_available_roaming_consortium()
1451 if (!ignore_bw && cred_conn_capab_missing(wpa_s, cred, bss)) in interworking_credentials_available_roaming_consortium()
1453 if (cred_excluded_ssid(cred, bss)) { in interworking_credentials_available_roaming_consortium()
1623 struct wpa_bss *bss, int only_add) in interworking_connect_roaming_consortium() argument
1631 " based on roaming consortium match", MAC2STR(bss->bssid)); in interworking_connect_roaming_consortium()
1633 if (already_connected(wpa_s, cred, bss)) { in interworking_connect_roaming_consortium()
1635 MAC2STR(bss->bssid)); in interworking_connect_roaming_consortium()
1639 remove_duplicate_network(wpa_s, cred, bss); in interworking_connect_roaming_consortium()
1649 ssid->ssid = os_zalloc(bss->ssid_len + 1); in interworking_connect_roaming_consortium()
1652 os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); in interworking_connect_roaming_consortium()
1653 ssid->ssid_len = bss->ssid_len; in interworking_connect_roaming_consortium()
1658 ie = wpa_bss_get_ie(bss, WLAN_EID_ROAMING_CONSORTIUM); in interworking_connect_roaming_consortium()
1659 anqp = bss->anqp ? bss->anqp->roaming_consortium : NULL; in interworking_connect_roaming_consortium()
1703 int interworking_connect(struct wpa_supplicant *wpa_s, struct wpa_bss *bss, in interworking_connect() argument
1715 if (wpa_s->conf->cred == NULL || bss == NULL) in interworking_connect()
1717 if (disallowed_bssid(wpa_s, bss->bssid) || in interworking_connect()
1718 disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len)) { in interworking_connect()
1721 MACSTR, MAC2STR(bss->bssid)); in interworking_connect()
1727 MAC2STR(bss->bssid)); in interworking_connect()
1729 if (!wpa_bss_get_ie(bss, WLAN_EID_RSN)) { in interworking_connect()
1740 wpa_s, bss, 0, excl); in interworking_connect()
1749 cred = interworking_credentials_available_realm(wpa_s, bss, 0, excl); in interworking_connect()
1758 cred_3gpp = interworking_credentials_available_3gpp(wpa_s, bss, 0, in interworking_connect()
1772 wpa_s, bss, 1, excl); in interworking_connect()
1781 cred = interworking_credentials_available_realm(wpa_s, bss, 1, in interworking_connect()
1791 cred_3gpp = interworking_credentials_available_3gpp(wpa_s, bss, in interworking_connect()
1806 bss, only_add); in interworking_connect()
1810 return interworking_connect_3gpp(wpa_s, cred_3gpp, bss, in interworking_connect()
1817 MACSTR, MAC2STR(bss->bssid)); in interworking_connect()
1821 realm = nai_realm_parse(bss->anqp ? bss->anqp->nai_realm : NULL, in interworking_connect()
1826 MACSTR, MAC2STR(bss->bssid)); in interworking_connect()
1841 MACSTR, MAC2STR(bss->bssid)); in interworking_connect()
1847 MAC2STR(bss->bssid)); in interworking_connect()
1849 if (already_connected(wpa_s, cred, bss)) { in interworking_connect()
1851 MAC2STR(bss->bssid)); in interworking_connect()
1856 remove_duplicate_network(wpa_s, cred, bss); in interworking_connect()
1868 ssid->ssid = os_zalloc(bss->ssid_len + 1); in interworking_connect()
1871 os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); in interworking_connect()
1872 ssid->ssid_len = bss->ssid_len; in interworking_connect()
1989 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw, in interworking_credentials_available_3gpp() argument
1998 if (bss->anqp == NULL || bss->anqp->anqp_3gpp == NULL) { in interworking_credentials_available_3gpp()
2001 bss->anqp, bss->anqp ? bss->anqp->anqp_3gpp : NULL); in interworking_credentials_available_3gpp()
2073 MAC2STR(bss->bssid)); in interworking_credentials_available_3gpp()
2074 ret = plmn_id_match(bss->anqp->anqp_3gpp, imsi, mnc_len); in interworking_credentials_available_3gpp()
2078 if (cred_no_required_oi_match(cred, bss)) in interworking_credentials_available_3gpp()
2081 cred_below_min_backhaul(wpa_s, cred, bss)) in interworking_credentials_available_3gpp()
2084 cred_over_max_bss_load(wpa_s, cred, bss)) in interworking_credentials_available_3gpp()
2087 cred_conn_capab_missing(wpa_s, cred, bss)) in interworking_credentials_available_3gpp()
2089 if (cred_excluded_ssid(cred, bss)) { in interworking_credentials_available_3gpp()
2114 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw, in interworking_credentials_available_realm() argument
2122 if (bss->anqp == NULL || bss->anqp->nai_realm == NULL) in interworking_credentials_available_realm()
2129 MACSTR, MAC2STR(bss->bssid)); in interworking_credentials_available_realm()
2130 realm = nai_realm_parse(bss->anqp->nai_realm, &count); in interworking_credentials_available_realm()
2134 MACSTR, MAC2STR(bss->bssid)); in interworking_credentials_available_realm()
2146 if (cred_no_required_oi_match(cred, bss)) in interworking_credentials_available_realm()
2149 cred_below_min_backhaul(wpa_s, cred, bss)) in interworking_credentials_available_realm()
2152 cred_over_max_bss_load(wpa_s, cred, bss)) in interworking_credentials_available_realm()
2155 cred_conn_capab_missing(wpa_s, cred, bss)) in interworking_credentials_available_realm()
2157 if (cred_excluded_ssid(cred, bss)) { in interworking_credentials_available_realm()
2190 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int ignore_bw, in interworking_credentials_available_helper() argument
2196 if (disallowed_bssid(wpa_s, bss->bssid) || in interworking_credentials_available_helper()
2197 disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len)) { in interworking_credentials_available_helper()
2199 MACSTR, MAC2STR(bss->bssid)); in interworking_credentials_available_helper()
2203 cred = interworking_credentials_available_realm(wpa_s, bss, ignore_bw, in interworking_credentials_available_helper()
2205 cred2 = interworking_credentials_available_3gpp(wpa_s, bss, ignore_bw, in interworking_credentials_available_helper()
2218 wpa_s, bss, ignore_bw, &excluded2); in interworking_credentials_available_helper()
2236 struct wpa_supplicant *wpa_s, struct wpa_bss *bss, int *excluded) in interworking_credentials_available() argument
2242 cred = interworking_credentials_available_helper(wpa_s, bss, 0, in interworking_credentials_available()
2246 return interworking_credentials_available_helper(wpa_s, bss, 1, in interworking_credentials_available()
2366 struct wpa_bss *bss; in interworking_find_network_match() local
2369 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in interworking_find_network_match()
2374 if (ssid->ssid_len != bss->ssid_len || in interworking_find_network_match()
2375 os_memcmp(ssid->ssid, bss->ssid, ssid->ssid_len) != in interworking_find_network_match()
2409 struct wpa_bss *bss) in roaming_prio() argument
2413 if (bss->anqp == NULL || bss->anqp->domain_name == NULL) { in roaming_prio()
2418 if (interworking_home_sp_cred(wpa_s, cred, bss->anqp->domain_name) > 0) in roaming_prio()
2426 bss->anqp->domain_name)) { in roaming_prio()
2442 struct wpa_bss *bss; in pick_best_roaming_partner() local
2456 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in pick_best_roaming_partner()
2457 if (bss == selected) in pick_best_roaming_partner()
2459 cred2 = interworking_credentials_available(wpa_s, bss, NULL); in pick_best_roaming_partner()
2462 if (!wpa_bss_get_ie(bss, WLAN_EID_RSN)) in pick_best_roaming_partner()
2464 prio = roaming_prio(wpa_s, cred2, bss); in pick_best_roaming_partner()
2466 MACSTR " (cred=%d)", prio, MAC2STR(bss->bssid), in pick_best_roaming_partner()
2473 bh2 = cred_below_min_backhaul(wpa_s, cred2, bss); in pick_best_roaming_partner()
2474 load2 = cred_over_max_bss_load(wpa_s, cred2, bss); in pick_best_roaming_partner()
2475 conn2 = cred_conn_capab_missing(wpa_s, cred2, bss); in pick_best_roaming_partner()
2479 …wpa_printf(MSG_DEBUG, "Interworking: Better roaming partner " MACSTR " selected", MAC2STR(bss->bss… in pick_best_roaming_partner()
2481 selected = bss; in pick_best_roaming_partner()
2492 struct wpa_bss *bss, *selected = NULL, *selected_home = NULL; in interworking_select_network() local
2506 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in interworking_select_network()
2509 cred = interworking_credentials_available(wpa_s, bss, in interworking_select_network()
2514 if (!wpa_bss_get_ie(bss, WLAN_EID_RSN)) { in interworking_select_network()
2522 MAC2STR(bss->bssid)); in interworking_select_network()
2527 res = interworking_home_sp(wpa_s, bss->anqp ? in interworking_select_network()
2528 bss->anqp->domain_name : NULL); in interworking_select_network()
2535 bh = cred_below_min_backhaul(wpa_s, cred, bss); in interworking_select_network()
2536 bss_load = cred_over_max_bss_load(wpa_s, cred, bss); in interworking_select_network()
2537 conn_capab = cred_conn_capab_missing(wpa_s, cred, bss); in interworking_select_network()
2538 wpas_notify_interworking_ap_added(wpa_s, bss, cred, excluded, in interworking_select_network()
2550 selected2 = bss; in interworking_select_network()
2558 selected2_home = bss; in interworking_select_network()
2565 selected = bss; in interworking_select_network()
2573 selected_home = bss; in interworking_select_network()
2650 interworking_match_anqp_info(struct wpa_supplicant *wpa_s, struct wpa_bss *bss) in interworking_match_anqp_info() argument
2654 if (is_zero_ether_addr(bss->hessid)) in interworking_match_anqp_info()
2657 dl_list_for_each(other, &wpa_s->bss, struct wpa_bss, list) { in interworking_match_anqp_info()
2658 if (other == bss) in interworking_match_anqp_info()
2669 if (!ether_addr_equal(bss->hessid, other->hessid)) in interworking_match_anqp_info()
2671 if (bss->ssid_len != other->ssid_len || in interworking_match_anqp_info()
2672 os_memcmp(bss->ssid, other->ssid, bss->ssid_len) != 0) in interworking_match_anqp_info()
2678 MAC2STR(other->bssid), MAC2STR(bss->bssid)); in interworking_match_anqp_info()
2689 struct wpa_bss *bss; in interworking_next_anqp_fetch() local
2710 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) { in interworking_next_anqp_fetch()
2711 if (!(bss->caps & IEEE80211_CAP_ESS)) in interworking_next_anqp_fetch()
2713 if (!wpa_bss_ext_capab(bss, WLAN_EXT_CAPAB_INTERWORKING)) in interworking_next_anqp_fetch()
2715 if (disallowed_bssid(wpa_s, bss->bssid) || in interworking_next_anqp_fetch()
2716 disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len)) in interworking_next_anqp_fetch()
2719 if (!(bss->flags & WPA_BSS_ANQP_FETCH_TRIED)) { in interworking_next_anqp_fetch()
2720 if (bss->anqp == NULL) { in interworking_next_anqp_fetch()
2721 bss->anqp = interworking_match_anqp_info(wpa_s, in interworking_next_anqp_fetch()
2722 bss); in interworking_next_anqp_fetch()
2723 if (bss->anqp) { in interworking_next_anqp_fetch()
2727 bss->anqp = wpa_bss_anqp_alloc(); in interworking_next_anqp_fetch()
2728 if (bss->anqp == NULL) in interworking_next_anqp_fetch()
2732 bss->flags |= WPA_BSS_ANQP_FETCH_TRIED; in interworking_next_anqp_fetch()
2735 MAC2STR(bss->bssid), MAC2STR(bss->hessid)); in interworking_next_anqp_fetch()
2736 interworking_anqp_send_req(wpa_s, bss); in interworking_next_anqp_fetch()
2766 struct wpa_bss *bss; in interworking_start_fetch_anqp() local
2768 dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) in interworking_start_fetch_anqp()
2769 bss->flags &= ~WPA_BSS_ANQP_FETCH_TRIED; in interworking_start_fetch_anqp()
2812 struct wpa_bss *bss; in anqp_send_req() local
2815 bss = wpa_bss_get_bssid_latest(wpa_s, dst); in anqp_send_req()
2816 if (!bss && !freq) { in anqp_send_req()
2822 if (bss) in anqp_send_req()
2823 wpa_bss_anqp_unshare_alloc(bss); in anqp_send_req()
2824 if (bss && !freq) in anqp_send_req()
2825 freq = bss->freq; in anqp_send_req()
2844 if (!bss) { in anqp_send_req()
2852 mbo = mbo_build_anqp_buf(wpa_s, bss, mbo_subtypes); in anqp_send_req()
2947 struct wpa_bss *bss, const u8 *sa, in interworking_parse_rx_anqp_resp() argument
2957 if (bss) in interworking_parse_rx_anqp_resp()
2958 anqp = bss->anqp; in interworking_parse_rx_anqp_resp()
3084 hs20_parse_rx_hs20_anqp_resp(wpa_s, bss, sa, in interworking_parse_rx_anqp_resp()
3091 mbo_parse_rx_anqp_resp(wpa_s, bss, sa, in interworking_parse_rx_anqp_resp()
3129 struct wpa_bss *bss = NULL, *tmp; in anqp_resp_cb() local
3162 dl_list_for_each_reverse(tmp, &wpa_s->bss, struct wpa_bss, list) { in anqp_resp_cb()
3165 bss = tmp; in anqp_resp_cb()
3169 if (bss == NULL) in anqp_resp_cb()
3170 bss = wpa_bss_get_bssid_latest(wpa_s, dst); in anqp_resp_cb()
3195 interworking_parse_rx_anqp_resp(wpa_s, bss, dst, info_id, pos, in anqp_resp_cb()
3201 if (bss) in anqp_resp_cb()
3202 wpas_notify_bss_anqp_changed(wpa_s, bss->id); in anqp_resp_cb()
3279 struct wpa_bss *bss; in gas_send_request() local
3285 bss = wpa_bss_get_bssid_latest(wpa_s, dst); in gas_send_request()
3286 if (bss) in gas_send_request()
3287 freq = bss->freq; in gas_send_request()