mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-02 03:17:48 +00:00
92 lines
3.1 KiB
Diff
92 lines
3.1 KiB
Diff
--- a/src/drivers/driver.h
|
|
+++ b/src/drivers/driver.h
|
|
@@ -2175,6 +2175,10 @@ struct hostap_sta_driver_data {
|
|
u8 tx_mcs;
|
|
u8 rx_vht_nss;
|
|
u8 tx_vht_nss;
|
|
+ u8 rx_hemcs;
|
|
+ u8 tx_hemcs;
|
|
+ u8 rx_he_nss;
|
|
+ u8 tx_he_nss;
|
|
};
|
|
|
|
struct hostapd_sta_add_params {
|
|
--- a/src/drivers/driver_nl80211.c
|
|
+++ b/src/drivers/driver_nl80211.c
|
|
@@ -7013,6 +7013,8 @@ static int get_sta_handler(struct nl_msg
|
|
[NL80211_RATE_INFO_VHT_MCS] = { .type = NLA_U8 },
|
|
[NL80211_RATE_INFO_SHORT_GI] = { .type = NLA_FLAG },
|
|
[NL80211_RATE_INFO_VHT_NSS] = { .type = NLA_U8 },
|
|
+ [NL80211_RATE_INFO_HE_NSS] = { .type = NLA_U8 },
|
|
+ [NL80211_RATE_INFO_HE_MCS] = { .type = NLA_U8 },
|
|
};
|
|
|
|
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
|
|
@@ -7105,6 +7107,10 @@ static int get_sta_handler(struct nl_msg
|
|
nla_get_u8(rate[NL80211_RATE_INFO_VHT_NSS]);
|
|
data->flags |= STA_DRV_DATA_TX_VHT_NSS;
|
|
}
|
|
+ if (rate[NL80211_RATE_INFO_HE_MCS])
|
|
+ data->tx_hemcs = nla_get_u8(rate[NL80211_RATE_INFO_HE_MCS]);
|
|
+ if (rate[NL80211_RATE_INFO_HE_NSS])
|
|
+ data->tx_he_nss = nla_get_u8(rate[NL80211_RATE_INFO_HE_NSS]);
|
|
}
|
|
|
|
if (stats[NL80211_STA_INFO_RX_BITRATE] &&
|
|
@@ -7135,11 +7141,16 @@ static int get_sta_handler(struct nl_msg
|
|
nla_get_u8(rate[NL80211_RATE_INFO_VHT_NSS]);
|
|
data->flags |= STA_DRV_DATA_RX_VHT_NSS;
|
|
}
|
|
+ if (rate[NL80211_RATE_INFO_HE_MCS])
|
|
+ data->rx_hemcs = nla_get_u8(rate[NL80211_RATE_INFO_HE_MCS]);
|
|
+ if (rate[NL80211_RATE_INFO_HE_NSS])
|
|
+ data->rx_he_nss = nla_get_u8(rate[NL80211_RATE_INFO_HE_NSS]);
|
|
}
|
|
|
|
if (stats[NL80211_STA_INFO_TID_STATS])
|
|
get_sta_tid_stats(data, stats[NL80211_STA_INFO_TID_STATS]);
|
|
|
|
+
|
|
return NL_SKIP;
|
|
}
|
|
|
|
--- a/src/ap/ubus.c
|
|
+++ b/src/ap/ubus.c
|
|
@@ -310,6 +310,36 @@ hostapd_bss_get_clients(struct ubus_cont
|
|
blobmsg_add_u32(&b, "tx", sta_driver_data.current_tx_rate * 100);
|
|
blobmsg_close_table(&b, r);
|
|
blobmsg_add_u32(&b, "signal", sta_driver_data.signal);
|
|
+
|
|
+ r = blobmsg_open_table(&b, "mcs");
|
|
+ if (sta_driver_data.rx_hemcs) {
|
|
+ blobmsg_add_u32(&b, "he", 1);
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_hemcs);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_hemcs);
|
|
+ } else if (sta_driver_data.rx_vhtmcs) {
|
|
+ blobmsg_add_u32(&b, "vht", 1);
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_vhtmcs);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_vhtmcs);
|
|
+ } else {
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_mcs);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_mcs);
|
|
+ }
|
|
+ blobmsg_close_table(&b, r);
|
|
+
|
|
+ r = blobmsg_open_table(&b, "nss");
|
|
+ if (sta_driver_data.rx_he_nss) {
|
|
+ blobmsg_add_u32(&b, "he", 1);
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_he_nss);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_he_nss);
|
|
+ } else if (sta_driver_data.rx_vht_nss) {
|
|
+ blobmsg_add_u32(&b, "vht", 1);
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_vht_nss);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_vht_nss);
|
|
+ } else {
|
|
+ blobmsg_add_u32(&b, "rx", sta_driver_data.rx_mcs);
|
|
+ blobmsg_add_u32(&b, "tx", sta_driver_data.tx_mcs);
|
|
+ }
|
|
+ blobmsg_close_table(&b, r);
|
|
}
|
|
|
|
hostapd_parse_capab_blobmsg(sta);
|