diff --git a/src/common.c b/src/common.c index 8f5093d3..04d2cfe8 100644 --- a/src/common.c +++ b/src/common.c @@ -82,7 +82,8 @@ bool security_from_str(const char *str, enum security *security) IE_RSN_AKM_SUITE_FILS_SHA256 | \ IE_RSN_AKM_SUITE_FILS_SHA384 | \ IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA256 | \ - IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384) \ + IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384 | \ + IE_RSN_AKM_SUITE_OSEN) \ ) enum security security_determine(uint16_t bss_capability, diff --git a/src/ie.c b/src/ie.c index c4edeab3..251b26a7 100644 --- a/src/ie.c +++ b/src/ie.c @@ -34,6 +34,7 @@ static const uint8_t ieee_oui[3] = { 0x00, 0x0f, 0xac }; static const uint8_t microsoft_oui[3] = { 0x00, 0x50, 0xf2 }; +static const uint8_t wifi_alliance_oui[3] = { 0x50, 0x6f, 0x9a }; void ie_tlv_iter_init(struct ie_tlv_iter *iter, const unsigned char *tlv, unsigned int len) @@ -839,6 +840,8 @@ static bool ie_build_rsn_akm_suite(uint8_t *data, enum ie_rsn_akm_suite suite) RETURN_AKM(data, ieee_oui, 17); case IE_RSN_AKM_SUITE_OWE: RETURN_AKM(data, ieee_oui, 18); + case IE_RSN_AKM_SUITE_OSEN: + RETURN_AKM(data, wifi_alliance_oui, 1); } return false; diff --git a/src/ie.h b/src/ie.h index d610a079..1bf1c7d5 100644 --- a/src/ie.h +++ b/src/ie.h @@ -272,6 +272,7 @@ enum ie_rsn_akm_suite { IE_RSN_AKM_SUITE_FILS_SHA384 = 0x8000, IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA256 = 0x10000, IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384 = 0x20000, + IE_RSN_AKM_SUITE_OSEN = 0x40000, }; #define IE_AKM_IS_SAE(akm) \ diff --git a/src/netdev.c b/src/netdev.c index c71493e4..c4f94423 100644 --- a/src/netdev.c +++ b/src/netdev.c @@ -1744,6 +1744,8 @@ static unsigned int ie_rsn_akm_suite_to_nl80211(enum ie_rsn_akm_suite akm) return CRYPTO_AKM_FT_OVER_FILS_SHA384; case IE_RSN_AKM_SUITE_OWE: return CRYPTO_AKM_OWE; + case IE_RSN_AKM_SUITE_OSEN: + return CRYPTO_AKM_OSEN; } return 0;