sta: uniform disconnect state handling
authorDavid Bauer <mail@david-bauer.net>
Sun, 28 Nov 2021 22:20:48 +0000 (23:20 +0100)
committerDavid Bauer <mail@david-bauer.net>
Sun, 9 Jan 2022 00:59:53 +0000 (01:59 +0100)
Logic for handling STA transition to disconnected state is
present multiple times. Create a new method to remove
duplicate code.

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

index fb881d1c6af129bc7ce66b2644d38441d7448fd4..eb57bfb1feb550e867aa0df44ffc5230ce0d4868 100644 (file)
@@ -249,8 +249,7 @@ usteer_local_node_set_assoc(struct usteer_local_node *ln, struct blob_attr *cl)
                if (si->connected != STA_DISCONNECTED)
                        continue;
 
-               si->connected = STA_NOT_CONNECTED;
-               usteer_sta_info_update_timeout(si, config.local_sta_timeout);
+               usteer_sta_disconnected(si);
                MSG(VERBOSE, "station "MAC_ADDR_FMT" disconnected from node %s\n",
                        MAC_ADDR_DATA(si->sta->addr), usteer_node_name(node));
        }
diff --git a/sta.c b/sta.c
index 9ddd81ebdea317bfcb93b76aeb77eaf6a7d3798e..0ec6a8a4d9c4670547c15bd9d42ae4bc31a02a61 100644 (file)
--- a/sta.c
+++ b/sta.c
@@ -105,8 +105,7 @@ usteer_sta_info_get(struct sta *sta, struct usteer_node *node, bool *create)
        *create = true;
 
        /* Node is by default not connected. */
-       si->connected = STA_NOT_CONNECTED;
-       usteer_sta_info_update_timeout(si, config.local_sta_timeout);
+       usteer_sta_disconnected(si);
 
        return si;
 }
@@ -145,6 +144,12 @@ usteer_sta_get(const uint8_t *addr, bool create)
        return sta;
 }
 
+void usteer_sta_disconnected(struct sta_info *si)
+{
+       si->connected = STA_NOT_CONNECTED;
+       usteer_sta_info_update_timeout(si, config.local_sta_timeout);
+}
+
 void
 usteer_sta_info_update(struct sta_info *si, int signal, bool avg)
 {
diff --git a/ubus.c b/ubus.c
index 1a78bbfd76a78bd3993fa88eb2d1df70eecc278b..83a7558702e4c76caeb7e3506ea73a9150913774 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -578,7 +578,7 @@ void usteer_ubus_kick_client(struct sta_info *si)
        blobmsg_add_u32(&b, "reason", config.load_kick_reason_code);
        blobmsg_add_u8(&b, "deauth", 1);
        ubus_invoke(ubus_ctx, ln->obj_id, "del_client", b.head, NULL, 0, 100);
-       si->connected = STA_NOT_CONNECTED;
+       usteer_sta_disconnected(si);
        si->roam_kick = current_time;
 }
 
index dd4ea0e7fbf2e44be96529fe6bafe670e9fa570a..53767074ee8e39429ffd2bf6436195d0fbd95b6c 100644 (file)
--- a/usteer.h
+++ b/usteer.h
@@ -275,6 +275,7 @@ struct sta_info *usteer_sta_info_get(struct sta *sta, struct usteer_node *node,
 
 bool usteer_sta_supports_beacon_measurement_mode(struct sta *sta, enum usteer_beacon_measurement_mode mode);
 
+void usteer_sta_disconnected(struct sta_info *si);
 void usteer_sta_info_update_timeout(struct sta_info *si, int timeout);
 void usteer_sta_info_update(struct sta_info *si, int signal, bool avg);