add local_mode config option
authorFelix Fietkau <nbd@nbd.name>
Thu, 17 Mar 2022 09:00:12 +0000 (10:00 +0100)
committerFelix Fietkau <nbd@nbd.name>
Thu, 17 Mar 2022 09:05:56 +0000 (10:05 +0100)
This prevents communication with other usteer nodes and allows it to be
used for purely local band steering / load balancing

Signed-off-by: Felix Fietkau <nbd@nbd.name>
openwrt/usteer/files/etc/config/usteer
openwrt/usteer/files/etc/init.d/usteer
remote.c
ubus.c
usteer.h

index 534031dab6ffea0c9888cecce266f20fe26d79be..38c0e7749abb0651b69c497fb69b45a9113051aa 100644 (file)
@@ -5,6 +5,9 @@ config usteer
        # Log messages to syslog (0/1)
        option 'syslog' '1'
 
+       # Disable network communication (0/1)
+       option local_mode '0'
+
        # Use IPv6 for remote exchange
        option 'ipv6' '0'
 
index 29a43a208c8dc9f5259793f13bf67232d2da00b2..22273ef6aeaad0242558dd6fd197fe535decbb6d 100755 (executable)
@@ -66,6 +66,7 @@ uci_usteer() {
 
        uci_option_to_json_bool "$cfg" syslog
        uci_option_to_json_bool "$cfg" ipv6
+       uci_option_to_json_bool "$cfg" local_mode
        uci_option_to_json_bool "$cfg" load_kick_enabled
        uci_option_to_json_bool "$cfg" assoc_steering
        uci_option_to_json_string "$cfg" node_up_script
index f000e687efd581e6b91a73ba182b86dc1d206bee..9b753e6e7e7a15068f207e275afd2ac4f30c3162 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -315,6 +315,9 @@ interface_recv_msg(struct interface *iface, char *addr_str, void *buf, int len)
        struct blob_attr *cur;
        int rem;
 
+       if (config.local_mode)
+               return;
+
        if (blob_pad_len(data) != len) {
                MSG(DEBUG, "Invalid message length (header: %d, real: %d)\n", blob_pad_len(data), len);
                return;
@@ -606,7 +609,7 @@ usteer_check_timeout(void)
        int timeout = config.remote_node_timeout;
 
        list_for_each_entry_safe(node, tmp, &remote_nodes, list) {
-               if (node->check++ > timeout)
+               if (config.local_mode || node->check++ > timeout)
                        remote_node_free(node);
        }
 }
@@ -653,7 +656,8 @@ usteer_send_update_timer(struct uloop_timeout *t)
        usteer_update_time();
        uloop_timeout_set(t, config.remote_update_interval);
 
-       if (!avl_is_empty(&local_nodes) || host_info_blob) {
+       if (!config.local_mode &&
+           (!avl_is_empty(&local_nodes) || host_info_blob)) {
                c = usteer_update_init();
                for_each_local_node(node)
                        usteer_send_node(node, NULL);
diff --git a/ubus.c b/ubus.c
index 27b363f40337be4246c3fbfa15611bbcac90eb63..7e764ffdf50378acffdd433d19298470cbad6704 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -149,6 +149,7 @@ struct cfg_item {
        _cfg(BOOL, syslog), \
        _cfg(U32, debug_level), \
        _cfg(BOOL, ipv6), \
+       _cfg(BOOL, local_mode), \
        _cfg(U32, sta_block_timeout), \
        _cfg(U32, local_sta_timeout), \
        _cfg(U32, local_sta_update), \
index 095a76e703c0d2beef0492d9894deaef72b4d7c8..e0c28917ec29250cbc20c3e8fc1334d05d58bf72 100644 (file)
--- a/usteer.h
+++ b/usteer.h
@@ -149,6 +149,7 @@ struct usteer_config {
        uint32_t debug_level;
 
        bool ipv6;
+       bool local_mode;
 
        uint32_t sta_block_timeout;
        uint32_t local_sta_timeout;