node: determine roamability when selecting neighbors
[project/usteer.git] / node.c
diff --git a/node.c b/node.c
index 00ffb99fc78931a731540b8b780748a20514d55c..8e0b30d436100bb6eefda0e43ee092ad55a12b48 100644 (file)
--- a/node.c
+++ b/node.c
@@ -56,13 +56,14 @@ usteer_node_higher_bssid(struct usteer_node *node1, struct usteer_node *node2)
 }
 
 static struct usteer_node *
-usteer_node_more_roam_interactions(struct usteer_node *node, struct usteer_node *ref)
+usteer_node_higher_roamability(struct usteer_node *node, struct usteer_node *ref)
 {
-       int roam_actions_node, roam_actions_ref;
+       uint64_t roamability_node, roamability_ref;
 
-       roam_actions_node = node->roam_source + node->roam_destination;
-       roam_actions_ref = ref->roam_source + ref->roam_destination;
-       if (roam_actions_node < roam_actions_ref)
+       roamability_node = ((uint64_t)(node->roam_source + node->roam_destination)) * current_time / ((current_time - node->created) + 1);
+       roamability_ref = ((uint64_t)(ref->roam_source + ref->roam_destination)) * current_time / ((current_time - ref->created) + 1);
+
+       if (roamability_node < roamability_ref)
                return ref;
 
        return node;
@@ -86,8 +87,8 @@ usteer_node_better_neighbor(struct usteer_node *node, struct usteer_node *ref)
        if (!node)
                return ref;
 
-       n1 = usteer_node_more_roam_interactions(node, ref);
-       n2 = usteer_node_more_roam_interactions(ref, node);
+       n1 = usteer_node_higher_roamability(node, ref);
+       n2 = usteer_node_higher_roamability(ref, node);
        if (n1 == n2)
                return n1;