- Disassociation Timer will run a countdown before disassociate the station if roam_kick_delay is longer than validity_period (actually fixed to 100 beacon intervals) - Supporting multiple transisiton requests if validity period is run out
Signed-off-by: Nils Hendrik Rottgardt <n.rottga...@gmail.com> --- band_steering.c | 23 ++++++++++++----------- policy.c | 10 +++++++--- usteer.h | 1 + 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/band_steering.c b/band_steering.c index d680d02..17eca32 100644 --- a/band_steering.c +++ b/band_steering.c @@ -83,8 +83,6 @@ void usteer_band_steering_perform_steer(struct usteer_local_node *ln) ln->band_steering_interval = 0; list_for_each_entry(si, &ln->node.sta_info, node_list) { - /* TODO: Steer only if Client supports > 4000 Frequency */ - /* Check if client is eligable to be steerd */ if (!usteer_policy_can_perform_roam(si)) continue; @@ -95,17 +93,20 @@ void usteer_band_steering_perform_steer(struct usteer_local_node *ln) continue; } + /* Skip if in validity period */ + if (current_time < si->roam_transition_request_validity_end) + continue; + if (si->bss_transition) { - if (!si->kick_time && si->sta->aggressive) { - si->kick_time = current_time + config.roam_kick_delay; - validity_period = 10000 / usteer_local_node_get_beacon_interval(ln); /* ~ 10 seconds */ + si->roam_transition_request_validity_end = current_time + 10000; + validity_period = 10000 / usteer_local_node_get_beacon_interval(ln); /* ~ 10 seconds */ + if (si->sta->aggressive) { + if (!si->kick_time) + si->kick_time = current_time + config.roam_kick_delay; disassoc_timer = (si->kick_time - current_time) / usteer_local_node_get_beacon_interval(ln); - - if (si->sta->aggressive) - usteer_ubus_band_steering_request(si, 0, true, disassoc_timer, true, validity_period); - else - usteer_ubus_band_steering_request(si, 0, false, 0, true, validity_period); - } + usteer_ubus_band_steering_request(si, 0, true, disassoc_timer, true, validity_period); + } else + usteer_ubus_band_steering_request(si, 0, false, 0, true, validity_period); } si->band_steering.below_snr = false; diff --git a/policy.c b/policy.c index b3af22b..b6b393f 100644 --- a/policy.c +++ b/policy.c @@ -373,11 +373,11 @@ usteer_roam_trigger_sm(struct usteer_local_node *ln, struct sta_info *si) break; } - if (!si->kick_time && si->sta->aggressive) - si->kick_time = current_time + config.roam_kick_delay; - + si->roam_transition_request_validity_end = current_time + 10000; validity_period = 10000 / usteer_local_node_get_beacon_interval(ln); /* ~ 10 seconds */ if (si->sta->aggressive) { + if (!si->kick_time) + si->kick_time = current_time + config.roam_kick_delay; disassoc_timer = (si->kick_time - current_time) / usteer_local_node_get_beacon_interval(ln); usteer_ubus_bss_transition_request(si, 1, true, disassoc_timer, true, validity_period, candidate->node); } else { @@ -401,6 +401,10 @@ bool usteer_policy_can_perform_roam(struct sta_info *si) if (si->kick_time && si->kick_time <= current_time) return false; + /* Skip if in validity period */ + if (current_time < si->roam_transition_request_validity_end) + return false; + /* Skip on rejected transition */ if (si->bss_transition_response.status_code && current_time - si->bss_transition_response.timestamp < config.steer_reject_timeout) return false; diff --git a/usteer.h b/usteer.h index 7a399db..ec6e251 100644 --- a/usteer.h +++ b/usteer.h @@ -258,6 +258,7 @@ struct sta_info { enum roam_trigger_state roam_state; uint8_t roam_tries; uint64_t roam_event; + uint64_t roam_transition_request_validity_end; uint64_t roam_kick; uint64_t roam_scan_start; uint64_t roam_scan_timeout_start; -- 2.39.5 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel