]> git.ipfire.org Git - thirdparty/iw.git/blobdiff - scan.c
wowlan: Use MAX_NL80211_ATTR instead of NUM in nla_parse
[thirdparty/iw.git] / scan.c
diff --git a/scan.c b/scan.c
index a621813a590d4812886676cfed0887e8806cc8e5..ca7dbc6d36c95194de99ce0e74038dd494393b18 100644 (file)
--- a/scan.c
+++ b/scan.c
@@ -808,6 +808,36 @@ static void print_auth(const uint8_t *data)
                case 7:
                        printf("TDLS/TPK");
                        break;
+               case 8:
+                       printf("SAE");
+                       break;
+               case 9:
+                       printf("FT/SAE");
+                       break;
+               case 11:
+                       printf("IEEE 802.1X/SUITE-B");
+                       break;
+               case 12:
+                       printf("IEEE 802.1X/SUITE-B-192");
+                       break;
+               case 13:
+                       printf("FT/IEEE 802.1X/SHA-384");
+                       break;
+               case 14:
+                       printf("FILS/SHA-256");
+                       break;
+               case 15:
+                       printf("FILS/SHA-384");
+                       break;
+               case 16:
+                       printf("FT/FILS/SHA-256");
+                       break;
+               case 17:
+                       printf("FT/FILS/SHA-384");
+                       break;
+               case 18:
+                       printf("OWE");
+                       break;
                default:
                        printf("%.02x-%.02x-%.02x:%d",
                                data[0], data[1] ,data[2], data[3]);
@@ -818,6 +848,9 @@ static void print_auth(const uint8_t *data)
                case 1:
                        printf("OSEN");
                        break;
+               case 2:
+                       printf("DPP");
+                       break;
                default:
                        printf("%.02x-%.02x-%.02x:%d",
                                data[0], data[1] ,data[2], data[3]);
@@ -1917,10 +1950,39 @@ static inline void print_hs20_ind(const uint8_t type, uint8_t len,
                printf("\t\tUnexpected length: %i\n", len);
 }
 
+static void print_wifi_owe_tarns(const uint8_t type, uint8_t len,
+                                const uint8_t *data,
+                                const struct print_ies_data *ie_buffer)
+{
+       char mac_addr[20];
+       int ssid_len;
+
+       printf("\n");
+       if (len < 7)
+               return;
+
+       mac_addr_n2a(mac_addr, data);
+       printf("\t\tBSSID: %s\n", mac_addr);
+
+       ssid_len = data[6];
+       if (ssid_len > len - 7)
+               return;
+       printf("\t\tSSID: ");
+       print_ssid_escaped(ssid_len, data + 7);
+       printf("\n");
+
+       /* optional elements */
+       if (len >= ssid_len + 9) {
+               printf("\t\tBand Info: %u\n", data[ssid_len + 7]);
+               printf("\t\tChannel Info: %u\n", data[ssid_len + 8]);
+       }
+}
+
 static const struct ie_print wfa_printers[] = {
        [9] = { "P2P", print_p2p, 2, 255, BIT(PRINT_SCAN), },
        [16] = { "HotSpot 2.0 Indication", print_hs20_ind, 1, 255, BIT(PRINT_SCAN), },
        [18] = { "HotSpot 2.0 OSEN", print_wifi_osen, 1, 255, BIT(PRINT_SCAN), },
+       [28] = { "OWE Transition Mode", print_wifi_owe_tarns, 7, 255, BIT(PRINT_SCAN), },
 };
 
 static void print_vendor(unsigned char len, unsigned char *data,
@@ -1941,7 +2003,8 @@ static void print_vendor(unsigned char len, unsigned char *data,
                    wifiprinters[data[3]].name &&
                    wifiprinters[data[3]].flags & BIT(ptype)) {
                        print_ie(&wifiprinters[data[3]],
-                                data[3], len - 4, data + 4, 0);
+                                data[3], len - 4, data + 4,
+                                NULL);
                        return;
                }
                if (!unknown)
@@ -1958,7 +2021,8 @@ static void print_vendor(unsigned char len, unsigned char *data,
                    wfa_printers[data[3]].name &&
                    wfa_printers[data[3]].flags & BIT(ptype)) {
                        print_ie(&wfa_printers[data[3]],
-                                data[3], len - 4, data + 4, 0);
+                                data[3], len - 4, data + 4,
+                                NULL);
                        return;
                }
                if (!unknown)