diff --git a/src/common.c b/src/common.c index 77265994..2b16e408 100644 --- a/src/common.c +++ b/src/common.c @@ -29,6 +29,7 @@ #include "src/iwd.h" #include "src/common.h" +#include "src/ie.h" const char *security_to_str(enum security security) { @@ -61,3 +62,24 @@ bool security_from_str(const char *str, enum security *security) return true; } + +enum security security_determine(uint16_t bss_capability, + const struct ie_rsn_info *info) +{ + if (info && (info->akm_suites & IE_RSN_AKM_SUITE_PSK || + info->akm_suites & IE_RSN_AKM_SUITE_PSK_SHA256 || + info->akm_suites & IE_RSN_AKM_SUITE_FT_USING_PSK || + info->akm_suites & IE_RSN_AKM_SUITE_SAE_SHA256 || + info->akm_suites & IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256)) + return SECURITY_PSK; + + if (info && (info->akm_suites & IE_RSN_AKM_SUITE_8021X || + info->akm_suites & IE_RSN_AKM_SUITE_8021X_SHA256 || + info->akm_suites & IE_RSN_AKM_SUITE_FT_OVER_8021X)) + return SECURITY_8021X; + + if (bss_capability & IE_BSS_CAP_PRIVACY) + return SECURITY_WEP; + + return SECURITY_NONE; +} diff --git a/src/common.h b/src/common.h index 766d0bea..9db623c4 100644 --- a/src/common.h +++ b/src/common.h @@ -20,9 +20,19 @@ * */ +#include #include -enum security; +struct ie_rsn_info; + +enum security { + SECURITY_NONE, + SECURITY_WEP, + SECURITY_PSK, + SECURITY_8021X, +}; const char *security_to_str(enum security security); bool security_from_str(const char *str, enum security *security); +enum security security_determine(uint16_t bss_capability, + const struct ie_rsn_info *info); diff --git a/src/device.c b/src/device.c index 07f6a915..cf0fd8d4 100644 --- a/src/device.c +++ b/src/device.c @@ -278,9 +278,9 @@ static void process_bss(struct device *device, struct scan_bss *bss, if (r != -ENOENT) return; - security = scan_get_security(bss->capability, NULL); + security = security_determine(bss->capability, NULL); } else - security = scan_get_security(bss->capability, &info); + security = security_determine(bss->capability, &info); path = iwd_network_get_path(device, ssid, security); @@ -1092,9 +1092,9 @@ static bool device_roam_scan_notify(uint32_t wiphy_id, uint32_t ifindex, if (r != -ENOENT) goto next; - security = scan_get_security(bss->capability, NULL); + security = security_determine(bss->capability, NULL); } else - security = scan_get_security(bss->capability, &info); + security = security_determine(bss->capability, &info); if (security != orig_security) goto next; diff --git a/src/iwd.h b/src/iwd.h index 9930ee98..1d7156d6 100644 --- a/src/iwd.h +++ b/src/iwd.h @@ -24,13 +24,6 @@ struct device; -enum security { - SECURITY_NONE, - SECURITY_WEP, - SECURITY_PSK, - SECURITY_8021X, -}; - typedef void (*iwd_device_foreach_func)(struct device *, void *data); void __iwd_device_foreach(iwd_device_foreach_func func, void *user_data); diff --git a/src/scan.c b/src/scan.c index 9f3476ae..00115d8b 100644 --- a/src/scan.c +++ b/src/scan.c @@ -633,27 +633,6 @@ static bool start_next_scan_request(struct scan_context *sc) return false; } -enum security scan_get_security(enum ie_bss_capability bss_capability, - const struct ie_rsn_info *info) -{ - if (info && (info->akm_suites & IE_RSN_AKM_SUITE_PSK || - info->akm_suites & IE_RSN_AKM_SUITE_PSK_SHA256 || - info->akm_suites & IE_RSN_AKM_SUITE_FT_USING_PSK || - info->akm_suites & IE_RSN_AKM_SUITE_SAE_SHA256 || - info->akm_suites & IE_RSN_AKM_SUITE_FT_OVER_SAE_SHA256)) - return SECURITY_PSK; - - if (info && (info->akm_suites & IE_RSN_AKM_SUITE_8021X || - info->akm_suites & IE_RSN_AKM_SUITE_8021X_SHA256 || - info->akm_suites & IE_RSN_AKM_SUITE_FT_OVER_8021X)) - return SECURITY_8021X; - - if (bss_capability & IE_BSS_CAP_PRIVACY) - return SECURITY_WEP; - - return SECURITY_NONE; -} - static bool scan_parse_bss_information_elements(struct scan_bss *bss, const void *data, uint16_t len) { diff --git a/src/scan.h b/src/scan.h index 1a323655..1a8cb67b 100644 --- a/src/scan.h +++ b/src/scan.h @@ -92,8 +92,6 @@ void scan_sched_start(struct l_genl_family *nl80211, uint32_t ifindex, uint32_t scan_interval, scan_func_t callback, void *user_data); -enum security scan_get_security(enum ie_bss_capability bss_cap, - const struct ie_rsn_info *info); void scan_bss_free(struct scan_bss *bss); int scan_bss_rank_compare(const void *a, const void *b, void *user);