node: add methods to access nodes by bssid
authorDavid Bauer <mail@david-bauer.net>
Wed, 29 Dec 2021 20:14:25 +0000 (21:14 +0100)
committerDavid Bauer <mail@david-bauer.net>
Thu, 3 Feb 2022 21:44:14 +0000 (22:44 +0100)
Add methods which returns a given node for a provided BSSID. This is
required to retrieve the node object from information available with
a neighbor report.

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

index e4412661699a8b6511acf1ba60519e66bae64d81..e69ec2157585d471c09bbbbe3822bcced15d1533 100644 (file)
@@ -79,6 +79,19 @@ usteer_free_node(struct ubus_context *ctx, struct usteer_local_node *ln)
        free(ln);
 }
 
+struct usteer_local_node *usteer_local_node_by_bssid(uint8_t *bssid) {
+       struct usteer_local_node *ln;
+       struct usteer_node *n;
+
+       for_each_local_node(n) {
+               ln = container_of(n, struct usteer_local_node, node);
+               if (!memcmp(n->bssid, bssid, 6))
+                       return ln;
+       }
+
+       return NULL;
+}
+
 static void
 usteer_handle_remove(struct ubus_context *ctx, struct ubus_subscriber *s,
                    uint32_t id)
diff --git a/node.c b/node.c
index 8fd10696e4d98ca8920e048067f5492b6cc24763..02dd30aecb476b7b6766dae1dc5c79ca3173bc69 100644 (file)
--- a/node.c
+++ b/node.c
 #include "node.h"
 #include "usteer.h"
 
+struct usteer_remote_node *usteer_remote_node_by_bssid(uint8_t *bssid) {
+       struct usteer_remote_node *rn;
+
+       for_each_remote_node(rn) {
+               if (!memcmp(rn->node.bssid, bssid, 6))
+                       return rn;
+       }
+
+       return NULL;
+}
+
+struct usteer_node *usteer_node_by_bssid(uint8_t *bssid) {
+       struct usteer_remote_node *rn;
+       struct usteer_local_node *ln;
+
+       rn = usteer_remote_node_by_bssid(bssid);
+       if (rn)
+               return &rn->node;
+
+       ln = usteer_local_node_by_bssid(bssid);
+       if (ln)
+               return &ln->node;
+
+       return NULL;
+}
+
 void usteer_node_set_blob(struct blob_attr **dest, struct blob_attr *val)
 {
        int new_len;
index 23c9e4120a08a3d674eaee8dd5a434719ec509b9..0ad9499c9c0a995e090d2c8e9a575ac96e1c036e 100644 (file)
--- a/usteer.h
+++ b/usteer.h
@@ -307,6 +307,10 @@ static inline const char *usteer_node_name(struct usteer_node *node)
 }
 void usteer_node_set_blob(struct blob_attr **dest, struct blob_attr *val);
 
+struct usteer_local_node *usteer_local_node_by_bssid(uint8_t *bssid);
+struct usteer_remote_node *usteer_remote_node_by_bssid(uint8_t *bssid);
+struct usteer_node *usteer_node_by_bssid(uint8_t *bssid);
+
 struct usteer_node *usteer_node_get_next_neighbor(struct usteer_node *current_node, struct usteer_node *last);
 bool usteer_check_request(struct sta_info *si, enum usteer_event_type type);