devices: add device id for Realtek RTL8188CU and RTL8188FTV
[project/iwinfo.git] / iwinfo_lua.c
index 14211115c9881873b5a91e930a348876ffcf2bb5..ecf257d67678331425bbc2a8a496d20ba038a060 100644 (file)
@@ -61,6 +61,15 @@ static char * iwinfo_crypto_print_ciphers(int ciphers)
        if (ciphers & IWINFO_CIPHER_CCMP)
                pos += sprintf(pos, "CCMP, ");
 
+       if (ciphers & IWINFO_CIPHER_CCMP256)
+               pos += sprintf(pos, "CCMP-256, ");
+
+       if (ciphers & IWINFO_CIPHER_GCMP)
+               pos += sprintf(pos, "GCMP, ");
+
+       if (ciphers & IWINFO_CIPHER_GCMP256)
+               pos += sprintf(pos, "GCMP-256, ");
+
        if (ciphers & IWINFO_CIPHER_WRAP)
                pos += sprintf(pos, "WRAP, ");
 
@@ -89,6 +98,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/");
 
@@ -100,6 +115,8 @@ static char * iwinfo_crypto_print_suites(int suites)
 static char * iwinfo_crypto_desc(struct iwinfo_crypto_entry *c)
 {
        static char desc[512] = { 0 };
+       char *pos = desc;
+       int i, n;
 
        if (c)
        {
@@ -129,28 +146,28 @@ static char * iwinfo_crypto_desc(struct iwinfo_crypto_entry *c)
                        /* WPA */
                        else if (c->wpa_version)
                        {
-                               switch (c->wpa_version) {
-                                       case 3:
-                                               sprintf(desc, "mixed WPA/WPA2 %s (%s)",
-                                                       iwinfo_crypto_print_suites(c->auth_suites),
-                                                       iwinfo_crypto_print_ciphers(
-                                                               c->pair_ciphers | c->group_ciphers));
-                                               break;
-
-                                       case 2:
-                                               sprintf(desc, "WPA2 %s (%s)",
-                                                       iwinfo_crypto_print_suites(c->auth_suites),
-                                                       iwinfo_crypto_print_ciphers(
-                                                               c->pair_ciphers | c->group_ciphers));
-                                               break;
-
-                                       case 1:
-                                               sprintf(desc, "WPA %s (%s)",
-                                                       iwinfo_crypto_print_suites(c->auth_suites),
-                                                       iwinfo_crypto_print_ciphers(
-                                                               c->pair_ciphers | c->group_ciphers));
-                                               break;
-                               }
+                               for (i = 0, n = 0; i < 3; i++)
+                                       if (c->wpa_version & (1 << i))
+                                               n++;
+
+                               if (n > 1)
+                                       pos += sprintf(pos, "mixed ");
+
+                               for (i = 0; i < 3; i++)
+                                       if (c->wpa_version & (1 << i))
+                                       {
+                                               if (i)
+                                                       pos += sprintf(pos, "WPA%d/", i + 1);
+                                               else
+                                                       pos += sprintf(pos, "WPA/");
+                                       }
+
+                               pos--;
+
+                               sprintf(pos, " %s (%s)",
+                                       iwinfo_crypto_print_suites(c->auth_suites),
+                                       iwinfo_crypto_print_ciphers(
+                                               c->pair_ciphers | c->group_ciphers));
                        }
                        else
                        {
@@ -259,6 +276,9 @@ static void set_rateinfo(lua_State *L, struct iwinfo_rate_entry *r, bool rx)
        lua_pushboolean(L, r->is_vht);
        lua_setfield(L, -2, rx ? "rx_vht" : "tx_vht");
 
+       lua_pushboolean(L, r->is_he);
+       lua_setfield(L, -2, rx ? "rx_he" : "tx_he");
+
        lua_pushnumber(L, r->mhz);
        lua_setfield(L, -2, rx ? "rx_mhz" : "tx_mhz");
 
@@ -273,7 +293,7 @@ static void set_rateinfo(lua_State *L, struct iwinfo_rate_entry *r, bool rx)
                lua_pushboolean(L, r->is_short_gi);
                lua_setfield(L, -2, rx ? "rx_short_gi" : "tx_short_gi");
        }
-       else if (r->is_vht)
+       else if (r->is_vht || r->is_he)
        {
                lua_pushnumber(L, r->mcs);
                lua_setfield(L, -2, rx ? "rx_mcs" : "tx_mcs");
@@ -281,8 +301,18 @@ static void set_rateinfo(lua_State *L, struct iwinfo_rate_entry *r, bool rx)
                lua_pushnumber(L, r->nss);
                lua_setfield(L, -2, rx ? "rx_nss" : "tx_nss");
 
-               lua_pushboolean(L, r->is_short_gi);
-               lua_setfield(L, -2, rx ? "rx_short_gi" : "tx_short_gi");
+               if (r->is_he) {
+                       lua_pushnumber(L, r->he_gi);
+                       lua_setfield(L, -2, rx ? "rx_he_gi" : "tx_he_gi");
+
+                       lua_pushnumber(L, r->he_dcm);
+                       lua_setfield(L, -2, rx ? "rx_he_dcm" : "tx_he_dcm");
+               }
+
+               if (r->is_vht) {
+                       lua_pushboolean(L, r->is_short_gi);
+                       lua_setfield(L, -2, rx ? "rx_short_gi" : "tx_short_gi");
+               }
        }
 }
 
@@ -328,6 +358,11 @@ static int iwinfo_L_assoclist(lua_State *L, int (*func)(const char *, char *, in
                        set_rateinfo(L, &e->rx_rate, true);
                        set_rateinfo(L, &e->tx_rate, false);
 
+                       if (e->thr) {
+                               lua_pushnumber(L, e->thr);
+                               lua_setfield(L, -2, "expected_throughput");
+                       }
+
                        lua_setfield(L, -2, macstr);
                }
        }
@@ -513,6 +548,12 @@ static int iwinfo_L_hwmodelist(lua_State *L, int (*func)(const char *, int *))
                lua_pushboolean(L, hwmodes & IWINFO_80211_AC);
                lua_setfield(L, -2, "ac");
 
+               lua_pushboolean(L, hwmodes & IWINFO_80211_AD);
+               lua_setfield(L, -2, "ad");
+
+               lua_pushboolean(L, hwmodes & IWINFO_80211_AX);
+               lua_setfield(L, -2, "ax");
+
                return 1;
        }
 
@@ -737,6 +778,7 @@ LUA_WRAP_STRUCT_OP(nl80211,hardware_id)
 #endif
 
 /* Wext */
+#ifdef USE_WEXT
 LUA_WRAP_INT_OP(wext,channel)
 LUA_WRAP_INT_OP(wext,frequency)
 LUA_WRAP_INT_OP(wext,frequency_offset)
@@ -763,6 +805,7 @@ LUA_WRAP_STRUCT_OP(wext,htmodelist)
 LUA_WRAP_STRUCT_OP(wext,encryption)
 LUA_WRAP_STRUCT_OP(wext,mbssid_support)
 LUA_WRAP_STRUCT_OP(wext,hardware_id)
+#endif
 
 #ifdef USE_WL
 /* Broadcom table */
@@ -864,6 +907,7 @@ static const luaL_reg R_nl80211[] = {
 #endif
 
 /* Wext table */
+#ifdef USE_WEXT
 static const luaL_reg R_wext[] = {
        LUA_REG(wext,channel),
        LUA_REG(wext,frequency),
@@ -893,6 +937,7 @@ static const luaL_reg R_wext[] = {
        LUA_REG(wext,phyname),
        { NULL, NULL }
 };
+#endif
 
 /* Common */
 static const luaL_reg R_common[] = {
@@ -932,12 +977,14 @@ LUALIB_API int luaopen_iwinfo(lua_State *L) {
        lua_setfield(L, -2, "nl80211");
 #endif
 
+#ifdef USE_WEXT
        luaL_newmetatable(L, IWINFO_WEXT_META);
        luaL_register(L, NULL, R_common);
        luaL_register(L, NULL, R_wext);
        lua_pushvalue(L, -1);
        lua_setfield(L, -2, "__index");
        lua_setfield(L, -2, "wext");
+#endif
 
        return 1;
 }