hostapd: ubus: add driver information to client list
authorDavid Bauer <mail@david-bauer.net>
Sun, 11 Oct 2020 15:45:01 +0000 (17:45 +0200)
committerDavid Bauer <mail@david-bauer.net>
Wed, 28 Oct 2020 10:58:21 +0000 (11:58 +0100)
This adds information from mac80211 to hostapd get_client ubus function.
This way, TX as well as RX status information as well as the signal can
be determined.

Signed-off-by: David Bauer <mail@david-bauer.net>
package/network/services/hostapd/src/src/ap/ubus.c

index d9d2beefbffe93917c009ffe47a359dc0a6608ea..dc9f75310df61c46576fbb59c95a3d0f5514b3e3 100644 (file)
@@ -215,6 +215,7 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj,
                        struct blob_attr *msg)
 {
        struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
+       struct hostap_sta_driver_data sta_driver_data;
        struct sta_info *sta;
        void *list, *c;
        char mac_buf[20];
@@ -241,6 +242,9 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj,
                void *r;
                int i;
 
+               if (hostapd_drv_read_sta_data(hapd, &sta_driver_data, sta->addr) < 0)
+                       continue;
+
                sprintf(mac_buf, MACSTR, MAC2STR(sta->addr));
                c = blobmsg_open_table(&b, mac_buf);
                for (i = 0; i < ARRAY_SIZE(sta_flags); i++)
@@ -257,6 +261,27 @@ hostapd_bss_get_clients(struct ubus_context *ctx, struct ubus_object *obj,
                if (retrieve_sta_taxonomy(hapd, sta, r, 1024) > 0)
                        blobmsg_add_string_buffer(&b);
 #endif
+
+               /* Driver information */
+               r = blobmsg_open_table(&b, "bytes");
+               blobmsg_add_u64(&b, "rx", sta_driver_data.rx_bytes);
+               blobmsg_add_u64(&b, "tx", sta_driver_data.tx_bytes);
+               blobmsg_close_table(&b,r);
+               r = blobmsg_open_table(&b, "airtime");
+               blobmsg_add_u64(&b, "rx", sta_driver_data.rx_airtime);
+               blobmsg_add_u64(&b, "tx", sta_driver_data.tx_airtime);
+               blobmsg_close_table(&b,r);
+               r = blobmsg_open_table(&b, "packets");
+               blobmsg_add_u32(&b, "rx", sta_driver_data.rx_packets);
+               blobmsg_add_u32(&b, "tx", sta_driver_data.tx_packets);
+               blobmsg_close_table(&b,r);
+               r = blobmsg_open_table(&b, "current_rate");
+               /* Rate in kbits */
+               blobmsg_add_u32(&b, "rx", sta_driver_data.current_rx_rate * 100);
+               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);
+
                blobmsg_close_table(&b, c);
        }
        blobmsg_close_array(&b, list);