@@ -43,7 +43,9 @@
#define IWINFO_KMGMT_NONE (1 << 0)
#define IWINFO_KMGMT_8021x (1 << 1)
#define IWINFO_KMGMT_PSK (1 << 2)
-#define IWINFO_KMGMT_COUNT 3
+#define IWINFO_KMGMT_SAE (1 << 3)
+#define IWINFO_KMGMT_OWE (1 << 4)
+#define IWINFO_KMGMT_COUNT 5
#define IWINFO_AUTH_OPEN (1 << 0)
#define IWINFO_AUTH_SHARED (1 << 1)
@@ -186,6 +186,12 @@ static char * format_enc_suites(int suites)
if (suites & IWINFO_KMGMT_8021x)
pos += sprintf(pos, "802.1X/");
+ if (suites & IWINFO_KMGMT_SAE)
+ pos += sprintf(pos, "SAE/");
+
+ if (suites & IWINFO_KMGMT_OWE)
+ pos += sprintf(pos, "OWE/");
+
if (!suites || (suites & IWINFO_KMGMT_NONE))
pos += sprintf(pos, "NONE/");
@@ -229,6 +235,12 @@ static char * format_encryption(struct iwinfo_crypto_entry *c)
else if (c->wpa_version)
{
switch (c->wpa_version) {
+ case 4:
+ snprintf(buf, sizeof(buf), "WPA3 %s (%s)",
+ format_enc_suites(c->auth_suites),
+ format_enc_ciphers(c->pair_ciphers | c->group_ciphers));
+ break;
+
case 3:
snprintf(buf, sizeof(buf), "mixed WPA/WPA2 %s (%s)",
format_enc_suites(c->auth_suites),
@@ -89,6 +89,12 @@ static char * iwinfo_crypto_print_suites(int suites)
if (suites & IWINFO_KMGMT_8021x)
pos += sprintf(pos, "802.1X/");
+ if (suites & IWINFO_KMGMT_SAE)
+ pos += sprintf(pos, "SAE/");
+
+ if (suites & IWINFO_KMGMT_OWE)
+ pos += sprintf(pos, "OWE/");
+
if (!suites || (suites & IWINFO_KMGMT_NONE))
pos += sprintf(pos, "NONE/");
@@ -130,6 +136,13 @@ static char * iwinfo_crypto_desc(struct iwinfo_crypto_entry *c)
else if (c->wpa_version)
{
switch (c->wpa_version) {
+ case 4:
+ sprintf(desc, "WPA3 %s (%s)",
+ iwinfo_crypto_print_suites(c->auth_suites),
+ iwinfo_crypto_print_ciphers(
+ c->pair_ciphers | c->group_ciphers));
+ break;
+
case 3:
sprintf(desc, "mixed WPA/WPA2 %s (%s)",
iwinfo_crypto_print_suites(c->auth_suites),
@@ -1588,6 +1588,16 @@ static int nl80211_get_encryption(const char *ifname, char *buf)
if (strstr(wpa_key_mgmt, "EAP"))
c->auth_suites |= IWINFO_KMGMT_8021x;
+ if (strstr(wpa_key_mgmt, "SAE")){
+ c->auth_suites |= IWINFO_KMGMT_SAE;
+ c->wpa_version = 4;
+ }
+
+ if (strstr(wpa_key_mgmt, "OWE")){
+ c->auth_suites |= IWINFO_KMGMT_OWE;
+ c->wpa_version = 4;
+ }
+
if (strstr(wpa_key_mgmt, "NONE"))
c->auth_suites |= IWINFO_KMGMT_NONE;
}
This patch adds support for WPA3, meaning SAE and OWE are now properly identified. This fixes iwinfo and LuCi showing WPA2 NONE for WPA3 SAE and OWE. Signed-off-by: Robert Marko <robimarko@gmail.com> --- include/iwinfo.h | 4 +++- iwinfo_cli.c | 12 ++++++++++++ iwinfo_lua.c | 13 +++++++++++++ iwinfo_nl80211.c | 10 ++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-)