Interworking: Do not reconnect if already connected
If we are already connected to the selected AP with a network block that was created based on the selected credential, do not force a reconnection or network block update. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
dd6f538ea5
commit
d28f4e44f1
2 changed files with 40 additions and 0 deletions
|
@ -145,6 +145,7 @@ extern "C" {
|
||||||
|
|
||||||
#define INTERWORKING_AP "INTERWORKING-AP "
|
#define INTERWORKING_AP "INTERWORKING-AP "
|
||||||
#define INTERWORKING_NO_MATCH "INTERWORKING-NO-MATCH "
|
#define INTERWORKING_NO_MATCH "INTERWORKING-NO-MATCH "
|
||||||
|
#define INTERWORKING_ALREADY_CONNECTED "INTERWORKING-ALREADY-CONNECTED "
|
||||||
|
|
||||||
#define GAS_RESPONSE_INFO "GAS-RESPONSE-INFO "
|
#define GAS_RESPONSE_INFO "GAS-RESPONSE-INFO "
|
||||||
|
|
||||||
|
|
|
@ -750,6 +750,26 @@ static int set_root_nai(struct wpa_ssid *ssid, const char *imsi, char prefix)
|
||||||
#endif /* INTERWORKING_3GPP */
|
#endif /* INTERWORKING_3GPP */
|
||||||
|
|
||||||
|
|
||||||
|
static int already_connected(struct wpa_supplicant *wpa_s,
|
||||||
|
struct wpa_cred *cred, struct wpa_bss *bss)
|
||||||
|
{
|
||||||
|
struct wpa_ssid *ssid;
|
||||||
|
|
||||||
|
if (wpa_s->wpa_state < WPA_ASSOCIATED || wpa_s->current_ssid == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ssid = wpa_s->current_ssid;
|
||||||
|
if (ssid->parent_cred != cred)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ssid->ssid_len != bss->ssid_len ||
|
||||||
|
os_memcmp(ssid->ssid, bss->ssid, bss->ssid_len) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int interworking_set_hs20_params(struct wpa_supplicant *wpa_s,
|
static int interworking_set_hs20_params(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_ssid *ssid)
|
struct wpa_ssid *ssid)
|
||||||
{
|
{
|
||||||
|
@ -785,6 +805,12 @@ static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s,
|
||||||
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR " (3GPP)",
|
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR " (3GPP)",
|
||||||
MAC2STR(bss->bssid));
|
MAC2STR(bss->bssid));
|
||||||
|
|
||||||
|
if (already_connected(wpa_s, cred, bss)) {
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, INTERWORKING_ALREADY_CONNECTED MACSTR,
|
||||||
|
MAC2STR(bss->bssid));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ssid = wpa_config_add_network(wpa_s->conf);
|
ssid = wpa_config_add_network(wpa_s->conf);
|
||||||
if (ssid == NULL)
|
if (ssid == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1144,6 +1170,12 @@ static int interworking_connect_roaming_consortium(
|
||||||
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR " based on "
|
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR " based on "
|
||||||
"roaming consortium match", MAC2STR(bss->bssid));
|
"roaming consortium match", MAC2STR(bss->bssid));
|
||||||
|
|
||||||
|
if (already_connected(wpa_s, cred, bss)) {
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, INTERWORKING_ALREADY_CONNECTED MACSTR,
|
||||||
|
MAC2STR(bss->bssid));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ssid = wpa_config_add_network(wpa_s->conf);
|
ssid = wpa_config_add_network(wpa_s->conf);
|
||||||
if (ssid == NULL)
|
if (ssid == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1279,6 +1311,13 @@ int interworking_connect(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
|
||||||
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR,
|
wpa_printf(MSG_DEBUG, "Interworking: Connect with " MACSTR,
|
||||||
MAC2STR(bss->bssid));
|
MAC2STR(bss->bssid));
|
||||||
|
|
||||||
|
if (already_connected(wpa_s, cred, bss)) {
|
||||||
|
wpa_msg(wpa_s, MSG_INFO, INTERWORKING_ALREADY_CONNECTED MACSTR,
|
||||||
|
MAC2STR(bss->bssid));
|
||||||
|
nai_realm_free(realm, count);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ssid = wpa_config_add_network(wpa_s->conf);
|
ssid = wpa_config_add_network(wpa_s->conf);
|
||||||
if (ssid == NULL) {
|
if (ssid == NULL) {
|
||||||
nai_realm_free(realm, count);
|
nai_realm_free(realm, count);
|
||||||
|
|
Loading…
Reference in a new issue