local-node: fetch bss-transition-management support

Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
David Bauer
2022-02-19 00:03:51 +01:00
parent c5242dda4d
commit f462de04e4
2 changed files with 31 additions and 6 deletions

View File

@@ -344,14 +344,20 @@ usteer_local_node_assoc_update(struct sta_info *si, struct blob_attr *data)
} }
static void static void
usteer_local_node_update_sta_rrm(const uint8_t *addr, struct blob_attr *client_attr) usteer_local_node_update_sta_rrm_wnm(const uint8_t *addr, struct blob_attr *client_attr)
{ {
static const struct blobmsg_policy rrm_policy = { static const struct blobmsg_policy rrm_policy = {
.name = "rrm", .name = "rrm",
.type = BLOBMSG_TYPE_ARRAY, .type = BLOBMSG_TYPE_ARRAY,
}; };
struct blob_attr *sta_blob = NULL; static const struct blobmsg_policy ext_capa_policy = {
.name = "extended_capabilities",
.type = BLOBMSG_TYPE_ARRAY,
};
struct blob_attr *rrm_blob = NULL, *wnm_blob = NULL, *cur;
struct sta *sta; struct sta *sta;
int rem;
int i = 0;
if (!addr) if (!addr)
return; return;
@@ -361,11 +367,29 @@ usteer_local_node_update_sta_rrm(const uint8_t *addr, struct blob_attr *client_a
if (!sta) if (!sta)
return; return;
blobmsg_parse(&rrm_policy, 1, &sta_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr)); /* RRM */
if (!sta_blob) blobmsg_parse(&rrm_policy, 1, &rrm_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr));
if (!rrm_blob)
return; return;
sta->rrm = blobmsg_get_u32(blobmsg_data(sta_blob)); sta->rrm = blobmsg_get_u32(blobmsg_data(rrm_blob));
/* Extended Capabilities / WNM */
blobmsg_parse(&ext_capa_policy, 1, &wnm_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr));
if (!wnm_blob)
return;
blobmsg_for_each_attr(cur, wnm_blob, rem) {
if (blobmsg_type(cur) != BLOBMSG_TYPE_INT32)
return;
if (i == 2) {
if (blobmsg_get_u32(cur) & (1 << 3))
sta->bss_transition = true;
}
i++;
}
} }
static void static void
@@ -408,7 +432,7 @@ usteer_local_node_set_assoc(struct usteer_local_node *ln, struct blob_attr *cl)
} }
/* Read RRM information */ /* Read RRM information */
usteer_local_node_update_sta_rrm(addr, cur); usteer_local_node_update_sta_rrm_wnm(addr, cur);
} }
node->n_assoc = n_assoc; node->n_assoc = n_assoc;

View File

@@ -269,6 +269,7 @@ struct sta {
uint8_t addr[6]; uint8_t addr[6];
uint8_t rrm; uint8_t rrm;
bool bss_transition;
}; };
struct usteer_beacon_report { struct usteer_beacon_report {