]> git.meshlink.io Git - meshlink/blobdiff - src/graph.c
Move connection_list to mesh->connections.
[meshlink] / src / graph.c
index d3ac4e6b0a33a7ef1449d26d03f91d3d8a5f1ec3..60d3b02ff3ceb6d6e0625638d4b905e990ac5db8 100644 (file)
@@ -48,6 +48,7 @@
 #include "graph.h"
 #include "list.h"
 #include "logger.h"
+#include "meshlink_internal.h"
 #include "netutl.h"
 #include "node.h"
 #include "protocol.h"
 static void mst_kruskal(void) {
        /* Clear MST status on connections */
 
-       for list_each(connection_t, c, connection_list)
+       for list_each(connection_t, c, mesh->connections)
                c->status.mst = false;
 
        logger(DEBUG_SCARY_THINGS, LOG_DEBUG, "Running Kruskal's algorithm:");
 
        /* Clear visited status on nodes */
 
-       for splay_each(node_t, n, node_tree)
+       for splay_each(node_t, n, mesh->nodes)
                n->status.visited = false;
 
        /* Starting point */
 
-       for splay_each(edge_t, e, edge_weight_tree) {
+       for splay_each(edge_t, e, mesh->edges) {
                if(e->from->status.reachable) {
                        e->from->status.visited = true;
                        break;
@@ -86,7 +87,7 @@ static void mst_kruskal(void) {
 
        bool skipped = false;
 
-       for splay_each(edge_t, e, edge_weight_tree) {
+       for splay_each(edge_t, e, mesh->edges) {
                if(!e->reverse || (e->from->status.visited == e->to->status.visited)) {
                        skipped = true;
                        continue;
@@ -105,7 +106,7 @@ static void mst_kruskal(void) {
 
                if(skipped) {
                        skipped = false;
-                       next = edge_weight_tree->head;
+                       next = mesh->edges->head;
                }
        }
 }
@@ -119,21 +120,21 @@ static void sssp_bfs(void) {
 
        /* Clear visited status on nodes */
 
-       for splay_each(node_t, n, node_tree) {
+       for splay_each(node_t, n, mesh->nodes) {
                n->status.visited = false;
                n->status.indirect = true;
                n->distance = -1;
        }
 
-       /* Begin with myself */
+       /* Begin with mesh->self */
 
-       myself->status.visited = true;
-       myself->status.indirect = false;
-       myself->nexthop = myself;
-       myself->prevedge = NULL;
-       myself->via = myself;
-       myself->distance = 0;
-       list_insert_head(todo_list, myself);
+       mesh->self->status.visited = true;
+       mesh->self->status.indirect = false;
+       mesh->self->nexthop = mesh->self;
+       mesh->self->prevedge = NULL;
+       mesh->self->via = mesh->self;
+       mesh->self->distance = 0;
+       list_insert_head(todo_list, mesh->self);
 
        /* Loop while todo_list is filled */
 
@@ -173,7 +174,7 @@ static void sssp_bfs(void) {
 
                        e->to->status.visited = true;
                        e->to->status.indirect = indirect;
-                       e->to->nexthop = (n->nexthop == myself) ? e->to : n->nexthop;
+                       e->to->nexthop = (n->nexthop == mesh->self) ? e->to : n->nexthop;
                        e->to->prevedge = e;
                        e->to->via = indirect ? n->via : e->to;
                        e->to->options = e->options;
@@ -195,7 +196,7 @@ static void sssp_bfs(void) {
 static void check_reachability(void) {
        /* Check reachability status. */
 
-       for splay_each(node_t, n, node_tree) {
+       for splay_each(node_t, n, mesh->nodes) {
                if(n->status.visited != n->status.reachable) {
                        n->status.reachable = !n->status.reachable;
                        n->last_state_change = now.tv_sec;
@@ -208,16 +209,11 @@ static void check_reachability(void) {
                                           n->name, n->hostname);
                        }
 
-                       if(experimental && OPTION_VERSION(n->options) >= 2)
-                               n->status.sptps = true;
-
                        /* TODO: only clear status.validkey if node is unreachable? */
 
                        n->status.validkey = false;
-                       if(n->status.sptps) {
-                               sptps_stop(&n->sptps);
-                               n->status.waitingforkey = false;
-                       }
+                       sptps_stop(&n->sptps);
+                       n->status.waitingforkey = false;
                        n->last_req_key = 0;
 
                        n->status.udp_confirmed = false;
@@ -234,12 +230,8 @@ static void check_reachability(void) {
                                memset(&n->status, 0, sizeof n->status);
                                n->options = 0;
                        } else if(n->connection) {
-                               if(n->status.sptps) {
-                                       if(n->connection->outgoing)
-                                               send_req_key(n);
-                               } else {
-                                       send_ans_key(n);
-                               }
+                               if(n->connection->outgoing)
+                                       send_req_key(n);
                        }
                }
        }