[PATCH usteer v3 5/9] 802.11 MBO - added reassoc_delay and reason code

Nils Hendrik Rottgardt n.rottgardt at gmail.com
Thu Nov 7 03:23:09 PST 2024


- ubus: add reason code to bss_transition request (actually static only)
- ubus: add reassociation delay to let the client know how long it should stay at the new AP dereived from station block timeout.
- main: add config option for reassociation delay

Signed-off-by: Nils Hendrik Rottgardt <n.rottgardt at gmail.com>
---
 main.c                                 | 1 +
 openwrt/usteer/files/etc/config/usteer | 3 +++
 ubus.c                                 | 5 +++++
 usteer.h                               | 1 +
 4 files changed, 10 insertions(+)

diff --git a/main.c b/main.c
index c796c3c..69e05ae 100644
--- a/main.c
+++ b/main.c
@@ -96,6 +96,7 @@ void usteer_init_defaults(void)
 	config.remote_update_interval = 1000;
 	config.initial_connect_delay = 0;
 	config.remote_node_timeout = 10;
+	config.reassociation_delay = 30;
 	config.aggressive_all = false;
 
 	config.steer_reject_timeout = 60000;
diff --git a/openwrt/usteer/files/etc/config/usteer b/openwrt/usteer/files/etc/config/usteer
index 7ef365c..9d343e7 100644
--- a/openwrt/usteer/files/etc/config/usteer
+++ b/openwrt/usteer/files/etc/config/usteer
@@ -73,6 +73,9 @@ config usteer
 	# Timeout (ms) for which a client will not be steered after rejecting a BSS-transition-request
 	#option steer_reject_timeout 60000
 
+	# Timeout (s "1024ms") a station is requested to avoid reassociation after bss transition
+	#option reassociation_delay 30
+	
 	# Use aggressive roaming to push clients to another AP for all stations (0/1)
 	#option aggressive_all 0
 
diff --git a/ubus.c b/ubus.c
index 856ea3f..bcd0ef1 100644
--- a/ubus.c
+++ b/ubus.c
@@ -689,6 +689,9 @@ int usteer_ubus_bss_transition_request(struct sta_info *si,
 	}
 	blobmsg_add_u8(&b, "abridged", abridged);
 	blobmsg_add_u32(&b, "validity_period", validity_period);
+	blobmsg_add_u32(&b, "mbo_reason", 5);
+	blobmsg_add_u32(&b, "reassoc_delay", config.reassociation_delay);
+
 	if (!target_node) {
 		// Add all known neighbors if no specific target set
 		MSG(VERBOSE, "ROAMING requested for sta=" MAC_ADDR_FMT " without target\n", MAC_ADDR_DATA(si->sta->addr));
@@ -720,6 +723,8 @@ int usteer_ubus_band_steering_request(struct sta_info *si,
 	}
 	blobmsg_add_u8(&b, "abridged", abridged);
 	blobmsg_add_u32(&b, "validity_period", validity_period);
+	blobmsg_add_u32(&b, "mbo_reason", 5);
+	blobmsg_add_u32(&b, "reassoc_delay", config.reassociation_delay);
 
 	c = blobmsg_open_array(&b, "neighbors");
 	for_each_local_node(node) {
diff --git a/usteer.h b/usteer.h
index 680981f..c9391bb 100644
--- a/usteer.h
+++ b/usteer.h
@@ -173,6 +173,7 @@ struct usteer_config {
 	bool aggressive_all;
 	struct blob_attr *aggressive_mac_list;
 	uint32_t aggressive_disassoc_timer;
+	uint32_t reassociation_delay;
 
 	int32_t min_snr;
 	uint32_t min_snr_kick_delay;
-- 
2.39.5




More information about the openwrt-devel mailing list