local-node: update STA RRM capabilites
authorDavid Bauer <mail@david-bauer.net>
Mon, 25 Oct 2021 13:09:52 +0000 (15:09 +0200)
committerDavid Bauer <mail@david-bauer.net>
Thu, 25 Nov 2021 22:04:48 +0000 (23:04 +0100)
Save the RRM capabilities of STAs when updating clients from hostapd.

This is required to determine which measurement modes a STA supports.

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

index c237b2fd2c9fbdebaeb2fd55a59b31b19f2478f6..3a6b6314e02b2c4d35f0d807a8a08f0247f90d24 100644 (file)
@@ -180,6 +180,31 @@ usteer_local_node_assoc_update(struct sta_info *si, struct blob_attr *data)
                si->sta->seen_5ghz = 1;
 }
 
+static void
+usteer_local_node_update_sta_rrm(const uint8_t *addr, struct blob_attr *client_attr)
+{
+       static const struct blobmsg_policy rrm_policy = {
+               .name = "rrm",
+               .type = BLOBMSG_TYPE_ARRAY,
+       };
+       struct blob_attr *sta_blob = NULL;
+       struct sta *sta;
+
+       if (!addr)
+               return;
+
+       /* Don't create the STA */
+       sta = usteer_sta_get(addr, false);
+       if (!sta)
+               return;
+
+       blobmsg_parse(&rrm_policy, 1, &sta_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr));
+       if (!sta_blob)
+               return;
+
+       sta->rrm = blobmsg_get_u32(blobmsg_data(sta_blob));
+}
+
 static void
 usteer_local_node_set_assoc(struct usteer_local_node *ln, struct blob_attr *cl)
 {
@@ -218,6 +243,9 @@ usteer_local_node_set_assoc(struct usteer_local_node *ln, struct blob_attr *cl)
                        si->last_connected = current_time;
                        n_assoc++;
                }
+
+               /* Read RRM information */
+               usteer_local_node_update_sta_rrm(addr, cur);
        }
 
        node->n_assoc = n_assoc;
index cd83c78605c36f5163e89ecc38502d43f79d22da..694e492b8eae176f9af45d8c624d61c04769f40a 100644 (file)
--- a/usteer.h
+++ b/usteer.h
@@ -242,6 +242,8 @@ struct sta {
        uint8_t seen_5ghz : 1;
 
        uint8_t addr[6];
+
+       uint8_t rrm;
 };
 
 extern struct ubus_context *ubus_ctx;