From 041e88424081969777bc5db76b37d2d792671fa0 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Thu, 11 Aug 2022 12:53:01 +0300 Subject: [PATCH] local_node: query client MBO support from hostapd Query client MBO support from hostapd and display it in the output of the connected_clients ubus method as "multi-band-operation". Signed-off-by: Stijn Tintel --- local_node.c | 14 +++++++++++++- ubus.c | 3 +++ usteer.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/local_node.c b/local_node.c index c79fd95..e74d945 100644 --- a/local_node.c +++ b/local_node.c @@ -388,6 +388,10 @@ usteer_local_node_assoc_update(struct sta_info *si, struct blob_attr *data) static void usteer_local_node_update_sta_rrm_wnm(struct sta_info *si, struct blob_attr *client_attr) { + static const struct blobmsg_policy mbo_policy = { + .name = "mbo", + .type = BLOBMSG_TYPE_BOOL, + }; static const struct blobmsg_policy rrm_policy = { .name = "rrm", .type = BLOBMSG_TYPE_ARRAY, @@ -396,10 +400,18 @@ usteer_local_node_update_sta_rrm_wnm(struct sta_info *si, struct blob_attr *clie .name = "extended_capabilities", .type = BLOBMSG_TYPE_ARRAY, }; - struct blob_attr *rrm_blob = NULL, *wnm_blob = NULL, *cur; + struct blob_attr *mbo_blob = NULL, *rrm_blob = NULL, *wnm_blob = NULL, *cur; int rem; int i = 0; + /* MBO */ + blobmsg_parse(&mbo_policy, 1, &mbo_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr)); + + if (mbo_blob) + si->mbo = blobmsg_get_u8(mbo_blob); + else + si->mbo = false; + /* RRM */ blobmsg_parse(&rrm_policy, 1, &rrm_blob, blobmsg_data(client_attr), blobmsg_data_len(client_attr)); if (!rrm_blob) diff --git a/ubus.c b/ubus.c index 557656e..c385870 100644 --- a/ubus.c +++ b/ubus.c @@ -442,6 +442,9 @@ usteer_ubus_get_connected_clients(struct ubus_context *ctx, struct ubus_object * /* BSS-Transition support */ blobmsg_add_u8(&b, "bss-transition-management", si->bss_transition); + /* MBO support */ + blobmsg_add_u8(&b, "multi-band-operation", si->mbo); + /* Measurements */ a = blobmsg_open_array(&b, "measurements"); list_for_each_entry(mr, &si->sta->measurements, sta_list) { diff --git a/usteer.h b/usteer.h index 01c849e..bbb7ff1 100644 --- a/usteer.h +++ b/usteer.h @@ -246,6 +246,7 @@ struct sta_info { uint8_t rrm; bool bss_transition; + bool mbo; enum roam_trigger_state roam_state; uint8_t roam_tries; -- 2.30.2