static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s) { struct wpa_ssid *ssid, *old_ssid; if (wpa_s->conf->ap_scan == 1 && wpa_s->current_ssid) return 0; wpa_printf(MSG_DEBUG, "Select network based on association " "information"); ssid = wpa_supplicant_get_ssid(wpa_s); if (ssid == NULL) { wpa_printf(MSG_INFO, "No network configuration found for the " "current AP"); return -1; } if (ssid->disabled) { wpa_printf(MSG_DEBUG, "Selected network is disabled"); return -1; } wpa_printf(MSG_DEBUG, "Network configuration found for the current " "AP"); if (ssid->key_mgmt & (WPA_KEY_MGMT_PSK | WPA_KEY_MGMT_IEEE8021X | WPA_KEY_MGMT_WPA_NONE | WPA_KEY_MGMT_FT_PSK | WPA_KEY_MGMT_FT_IEEE8021X | WPA_KEY_MGMT_PSK_SHA256 | WPA_KEY_MGMT_IEEE8021X_SHA256)) { u8 wpa_ie[80]; size_t wpa_ie_len = sizeof(wpa_ie); wpa_supplicant_set_suites(wpa_s, NULL, ssid, wpa_ie, &wpa_ie_len); } else { wpa_supplicant_set_non_wpa_policy(wpa_s, ssid); } if (wpa_s->current_ssid && wpa_s->current_ssid != ssid) eapol_sm_invalidate_cached_session(wpa_s->eapol); old_ssid = wpa_s->current_ssid; wpa_s->current_ssid = ssid; wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid); wpa_supplicant_initiate_eapol(wpa_s); if (old_ssid != wpa_s->current_ssid) wpas_notify_network_changed(wpa_s); return 0; }
static void wpa_supplicant_gen_assoc_event(struct wpa_supplicant *wpa_s) { struct wpa_ssid *ssid; union wpa_event_data data; ssid = wpa_supplicant_get_ssid(wpa_s); if (ssid == NULL) return; if (wpa_s->current_ssid == NULL) wpa_s->current_ssid = ssid; wpa_supplicant_initiate_eapol(wpa_s); wpa_printf(MSG_DEBUG, "Already associated with a configured network - " "generating associated event"); os_memset(&data, 0, sizeof(data)); wpa_supplicant_event(wpa_s, EVENT_ASSOC, &data); }
static void * wpa_supplicant_get_network_ctx(void *wpa_s) { return wpa_supplicant_get_ssid(wpa_s); }
static void * supp_get_network_ctx(void *ctx) { struct ibss_rsn_peer *peer = ctx; return wpa_supplicant_get_ssid(peer->ibss_rsn->wpa_s); }
static struct wpa_ssid * _wpa_supplicant_get_ssid(void *wpa_s) { return wpa_supplicant_get_ssid(wpa_s); }