remote: include node BSSID into messages
authorDavid Bauer <mail@david-bauer.net>
Tue, 21 Sep 2021 14:41:23 +0000 (16:41 +0200)
committerDavid Bauer <mail@david-bauer.net>
Fri, 15 Oct 2021 13:49:50 +0000 (15:49 +0200)
Add the node BSSID to messages exchanged between usteer hosts. This way,
a foreign node can determine the node reported by a STA using beacon
reports.

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

diff --git a/parse.c b/parse.c
index 0ff2dfb8d3f6a65eec0e77c3c0bbd7bc170376da..6f53b039a2e48158537b2ed51937857eeaa662a0 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -55,6 +55,7 @@ bool parse_apmsg_node(struct apmsg_node *msg, struct blob_attr *data)
 {
        static const struct blob_attr_info policy[__APMSG_NODE_MAX] = {
                [APMSG_NODE_NAME] = { .type = BLOB_ATTR_STRING },
+               [APMSG_NODE_BSSID] = { .type = BLOB_ATTR_BINARY },
                [APMSG_NODE_FREQ] = { .type = BLOB_ATTR_INT32 },
                [APMSG_NODE_N_ASSOC] = { .type = BLOB_ATTR_INT32 },
                [APMSG_NODE_MAX_ASSOC] = { .type = BLOB_ATTR_INT32 },
@@ -69,6 +70,8 @@ bool parse_apmsg_node(struct apmsg_node *msg, struct blob_attr *data)
 
        blob_parse(data, tb, policy, __APMSG_NODE_MAX);
        if (!tb[APMSG_NODE_NAME] ||
+           !tb[APMSG_NODE_BSSID] ||
+           blob_len(tb[APMSG_NODE_BSSID]) != 6 ||
            !tb[APMSG_NODE_FREQ] ||
            !tb[APMSG_NODE_N_ASSOC] ||
            !tb[APMSG_NODE_STATIONS] ||
@@ -80,6 +83,7 @@ bool parse_apmsg_node(struct apmsg_node *msg, struct blob_attr *data)
        msg->freq = blob_get_int32(tb[APMSG_NODE_FREQ]);
        msg->stations = tb[APMSG_NODE_STATIONS];
        msg->ssid = blob_data(tb[APMSG_NODE_SSID]);
+       msg->bssid = blob_data(tb[APMSG_NODE_BSSID]);
 
        msg->noise = get_int32(tb[APMSG_NODE_NOISE]);
        msg->load = get_int32(tb[APMSG_NODE_LOAD]);
index 3ca040ec498bfa994812ef8a7b47e6a967d06b3f..ac725153658a5c8c654d85a84e04cf08d53a1368 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -269,6 +269,9 @@ interface_add_node(struct usteer_remote_host *host, struct blob_attr *data)
        node->node.max_assoc = msg.max_assoc;
        node->node.noise = msg.noise;
        node->node.load = msg.load;
+
+       memcpy(node->node.bssid, msg.bssid, sizeof(node->node.bssid));
+
        snprintf(node->node.ssid, sizeof(node->node.ssid), "%s", msg.ssid);
        usteer_node_set_blob(&node->node.rrm_nr, msg.rrm_nr);
        usteer_node_set_blob(&node->node.node_info, msg.node_info);
@@ -538,6 +541,7 @@ static void usteer_send_node(struct usteer_node *node, struct sta_info *sta)
        blob_put_int32(&buf, APMSG_NODE_LOAD, node->load);
        blob_put_int32(&buf, APMSG_NODE_N_ASSOC, node->n_assoc);
        blob_put_int32(&buf, APMSG_NODE_MAX_ASSOC, node->max_assoc);
+       blob_put(&buf, APMSG_NODE_BSSID, node->bssid, sizeof(node->bssid));
        if (node->rrm_nr) {
                r = blob_nest_start(&buf, APMSG_NODE_RRM_NR);
                blobmsg_add_field(&buf, BLOBMSG_TYPE_ARRAY, "",
index 1c0123396738deb2101efcb6ede20ba5309a0218..e821de947030d46750522527291258647812774b 100644 (file)
--- a/remote.h
+++ b/remote.h
@@ -48,12 +48,14 @@ enum {
        APMSG_NODE_MAX_ASSOC,
        APMSG_NODE_RRM_NR,
        APMSG_NODE_NODE_INFO,
+       APMSG_NODE_BSSID,
        __APMSG_NODE_MAX
 };
 
 struct apmsg_node {
        const char *name;
        const char *ssid;
+       const char *bssid;
        int freq;
        int n_assoc;
        int max_assoc;