local-node: update STA RRM capabilites

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>
This commit is contained in:
David Bauer
2021-10-25 15:09:52 +02:00
parent 5ec713b8f3
commit abc6fe047f
2 changed files with 30 additions and 0 deletions

View 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;

View File

@@ -242,6 +242,8 @@ struct sta {
uint8_t seen_5ghz : 1;
uint8_t addr[6];
uint8_t rrm;
};
extern struct ubus_context *ubus_ctx;