ln->band_steering_interval = 0;
list_for_each_entry(si, &ln->node.sta_info, node_list) {
- if (si->connected != STA_CONNECTED)
+ /* Check if client is eligable to be steerd */
+ if (!usteer_policy_can_perform_roam(si))
continue;
/* Skip clients with insufficient SNR-state */
return false;
}
-static bool
-usteer_local_node_roam_sm_active(struct sta_info *si, int min_signal)
+bool usteer_policy_can_perform_roam(struct sta_info *si)
{
/* Only trigger for connected STAs */
if (si->connected != STA_CONNECTED)
return false;
- /* Signal has to be below scan / roam threshold */
- if (si->signal >= min_signal)
- return false;
-
/* Skip on pending kick */
if (si->kick_time)
return false;
return true;
}
+static bool
+usteer_local_node_roam_sm_active(struct sta_info *si, int min_signal)
+{
+ if (!usteer_policy_can_perform_roam(si))
+ return false;
+
+ /* Signal has to be below scan / roam threshold */
+ if (si->signal >= min_signal)
+ return false;
+
+ return true;
+}
+
static void
usteer_local_node_roam_check(struct usteer_local_node *ln, struct uevent *ev)
{
int usteer_local_node_get_beacon_interval(struct usteer_local_node *ln);
bool usteer_policy_node_below_max_assoc(struct usteer_node *node);
+bool usteer_policy_can_perform_roam(struct sta_info *si);
void usteer_band_steering_perform_steer(struct usteer_local_node *ln);
void usteer_band_steering_sta_update(struct sta_info *si);