iwinfo: add 802.11ax HE support
authorDavid Bauer <mail@david-bauer.net>
Sat, 17 Apr 2021 21:42:30 +0000 (23:42 +0200)
committerDavid Bauer <mail@david-bauer.net>
Tue, 4 May 2021 23:30:36 +0000 (01:30 +0200)
Expose 802.11ax HE rate as well as HW / HT mode information. This is
required to add 802.11ax support to LuCI.

Signed-off-by: David Bauer <mail@david-bauer.net>
iwinfo.c

index 63ff2a1cb8106ef55765997867d8ea53e588dfae..ba4fc1e4385334216e969d4d4568b5b688b478e1 100644 (file)
--- a/iwinfo.c
+++ b/iwinfo.c
@@ -260,6 +260,21 @@ rpc_iwinfo_call_htmodes(const char *name)
                if (modes & IWINFO_HTMODE_VHT160)
                        blobmsg_add_string(&buf, NULL, "VHT160");
 
+               if (modes & IWINFO_HTMODE_HE20)
+                       blobmsg_add_string(&buf, NULL, "HE20");
+
+               if (modes & IWINFO_HTMODE_HE40)
+                       blobmsg_add_string(&buf, NULL, "HE40");
+
+               if (modes & IWINFO_HTMODE_HE80)
+                       blobmsg_add_string(&buf, NULL, "HE80");
+
+               if (modes & IWINFO_HTMODE_HE80_80)
+                       blobmsg_add_string(&buf, NULL, "HE80+80");
+
+               if (modes & IWINFO_HTMODE_HE160)
+                       blobmsg_add_string(&buf, NULL, "HE160");
+
                blobmsg_close_array(&buf, c);
        }
 }
@@ -280,6 +295,9 @@ rpc_iwinfo_call_hwmodes(const char *name)
                if (modes & IWINFO_80211_AC)
                        blobmsg_add_string(&buf, NULL, "ac");
 
+               if (modes & IWINFO_80211_AX)
+                       blobmsg_add_string(&buf, NULL, "ax");
+
                if (modes & IWINFO_80211_A)
                        blobmsg_add_string(&buf, NULL, "a");
 
@@ -332,6 +350,26 @@ static void rpc_iwinfo_call_hw_ht_mode()
                        htmode_str = "VHT160";
                        hwmode_str = "ac";
                        break;
+               case IWINFO_HTMODE_HE20:
+                       htmode_str = "HE20";
+                       hwmode_str = "ax";
+                       break;
+               case IWINFO_HTMODE_HE40:
+                       htmode_str = "HE40";
+                       hwmode_str = "ax";
+                       break;
+               case IWINFO_HTMODE_HE80:
+                       htmode_str = "HE80";
+                       hwmode_str = "ax";
+                       break;
+               case IWINFO_HTMODE_HE80_80:
+                       htmode_str = "HE80+80";
+                       hwmode_str = "ax";
+                       break;
+               case IWINFO_HTMODE_HE160:
+                       htmode_str = "HE160";
+                       hwmode_str = "ax";
+                       break;
                case IWINFO_HTMODE_NOHT:
                        htmode_str = "20";
                        hwmode_str = "a/g";
@@ -491,6 +529,7 @@ rpc_iwinfo_add_rateinfo(struct iwinfo_rate_entry *r)
 {
        blobmsg_add_u8(&buf, "ht", r->is_ht);
        blobmsg_add_u8(&buf, "vht", r->is_vht);
+       blobmsg_add_u8(&buf, "he", r->is_he);
        blobmsg_add_u32(&buf, "mhz", r->mhz);
        blobmsg_add_u32(&buf, "rate", r->rate);
 
@@ -504,6 +543,12 @@ rpc_iwinfo_add_rateinfo(struct iwinfo_rate_entry *r)
                blobmsg_add_u32(&buf, "nss", r->nss);
                blobmsg_add_u8(&buf, "short_gi", r->is_short_gi);
        }
+       else if (r->is_he) {
+               blobmsg_add_u32(&buf, "mcs", r->mcs);
+               blobmsg_add_u32(&buf, "nss", r->nss);
+               blobmsg_add_u32(&buf, "he_gi", r->he_gi);
+               blobmsg_add_u32(&buf, "he_dcm", r->he_dcm);
+       }
 }
 
 static int