config.roam_scan_interval = 10 * 1000;
config.roam_trigger_interval = 60 * 1000;
+ config.min_snr_kick_delay = 5 * 1000;
+
config.load_kick_enabled = false;
config.load_kick_threshold = 75;
config.load_kick_delay = 10 * 1000;
# Minimum signal-to-noise ratio or signal level (dBm) to remain connected
#option min_snr 0
+ # Timeout after which a station with snr < min_snr will be kicked
+ #option min_snr_kick_delay 5000
+
# Timeout (in ms) after which a association following a disassociation is not seen
# as a roam
#option roam_process_timeout 5000
max_neighbor_reports max_retry_band seen_policy_timeout \
load_balancing_threshold band_steering_threshold \
remote_update_interval remote_node_timeout\
- min_connect_snr min_snr signal_diff_threshold \
+ min_connect_snr min_snr min_snr_kick_delay signal_diff_threshold \
initial_connect_delay roam_process_timeout\
roam_kick_delay roam_scan_tries roam_scan_timeout \
roam_scan_snr roam_scan_interval \
static void
usteer_local_node_snr_kick(struct usteer_local_node *ln)
{
+ unsigned int min_count = DIV_ROUND_UP(config.min_snr_kick_delay, config.local_sta_update);
struct uevent ev = {
.node_local = &ln->node,
};
if (si->connected != STA_CONNECTED)
continue;
- if (si->signal >= min_signal)
+ if (si->signal >= min_signal) {
+ si->below_min_snr = 0;
+ continue;
+ } else {
+ si->below_min_snr++;
+ }
+
+ if (si->below_min_snr <= min_count)
continue;
si->kick_count++;
_cfg(BOOL, assoc_steering), \
_cfg(I32, min_connect_snr), \
_cfg(I32, min_snr), \
+ _cfg(U32, min_snr_kick_delay), \
_cfg(U32, roam_process_timeout), \
_cfg(I32, roam_scan_snr), \
_cfg(U32, roam_scan_tries), \
uint32_t remote_node_timeout;
int32_t min_snr;
+ uint32_t min_snr_kick_delay;
int32_t min_connect_snr;
uint32_t signal_diff_threshold;
int kick_count;
+ uint32_t below_min_snr;
+
uint8_t scan_band : 1;
uint8_t connected : 2;
};