mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-02-18 00:30:47 +01:00
network: Simplify is_rsn logic
In the current version SECURITY_PSK was handled inside the is_rsn block while the SECURITY_8021X was off in its own block. This was weird and a bit misleading. Simplify the code flow through the use of a goto and decrease the nesting level. Also optimize out unnecessary use of scan_bss_get_rsn_info
This commit is contained in:
parent
5bfbdd5a01
commit
712a92cc4c
@ -512,6 +512,7 @@ int network_autoconnect(struct network *network, struct scan_bss *bss)
|
|||||||
struct station *station = network->station;
|
struct station *station = network->station;
|
||||||
struct wiphy *wiphy = station_get_wiphy(station);
|
struct wiphy *wiphy = station_get_wiphy(station);
|
||||||
enum security security = network_get_security(network);
|
enum security security = network_get_security(network);
|
||||||
|
struct ie_rsn_info rsn;
|
||||||
bool is_autoconnectable;
|
bool is_autoconnectable;
|
||||||
bool is_rsn;
|
bool is_rsn;
|
||||||
int ret;
|
int ret;
|
||||||
@ -544,27 +545,24 @@ int network_autoconnect(struct network *network, struct scan_bss *bss)
|
|||||||
if (!is_autoconnectable)
|
if (!is_autoconnectable)
|
||||||
goto close_settings;
|
goto close_settings;
|
||||||
|
|
||||||
if (is_rsn) {
|
if (!is_rsn)
|
||||||
struct ie_rsn_info rsn;
|
goto done;
|
||||||
|
|
||||||
memset(&rsn, 0, sizeof(rsn));
|
memset(&rsn, 0, sizeof(rsn));
|
||||||
scan_bss_get_rsn_info(bss, &rsn);
|
scan_bss_get_rsn_info(bss, &rsn);
|
||||||
|
|
||||||
if (!wiphy_select_cipher(wiphy, rsn.pairwise_ciphers) ||
|
if (!wiphy_select_cipher(wiphy, rsn.pairwise_ciphers) ||
|
||||||
!wiphy_select_cipher(wiphy, rsn.group_cipher)) {
|
!wiphy_select_cipher(wiphy, rsn.group_cipher)) {
|
||||||
l_debug("Cipher mis-match");
|
l_debug("Cipher mis-match");
|
||||||
ret = -ENETUNREACH;
|
ret = -ENETUNREACH;
|
||||||
goto close_settings;
|
goto close_settings;
|
||||||
}
|
|
||||||
|
|
||||||
if (security == SECURITY_PSK) {
|
|
||||||
ret = network_load_psk(network, bss_is_sae(bss));
|
|
||||||
if (ret < 0)
|
|
||||||
goto close_settings;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (security == SECURITY_8021X) {
|
if (security == SECURITY_PSK) {
|
||||||
|
ret = network_load_psk(network, __bss_is_sae(bss, &rsn));
|
||||||
|
if (ret < 0)
|
||||||
|
goto close_settings;
|
||||||
|
} else if (security == SECURITY_8021X) {
|
||||||
struct l_queue *missing_secrets = NULL;
|
struct l_queue *missing_secrets = NULL;
|
||||||
|
|
||||||
ret = eap_check_settings(network->settings, network->secrets,
|
ret = eap_check_settings(network->settings, network->secrets,
|
||||||
@ -582,6 +580,7 @@ int network_autoconnect(struct network *network, struct scan_bss *bss)
|
|||||||
goto close_settings;
|
goto close_settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
return __station_connect_network(station, network, bss);
|
return __station_connect_network(station, network, bss);
|
||||||
|
|
||||||
close_settings:
|
close_settings:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user