Revert changes to Kruskal's algo.
[tinc] / src / graph.c
index 0847b28..dd080c0 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: graph.c,v 1.1.2.6 2002/02/10 21:57:54 guus Exp $
+    $Id: graph.c,v 1.1.2.9 2002/03/12 16:30:15 guus Exp $
 */
 
 /* We need to generate two trees from the graph:
@@ -77,11 +77,22 @@ void mst_kruskal(void)
   int safe_edges = 0;
   int skipped;
 
+  /* Clear MST status on connections */
+
+  for(node = connection_tree->head; node; node = node->next)
+    {
+      c = (connection_t *)node->data;
+      c->status.mst = 0;
+    }
+
   /* Do we have something to do at all? */
   
   if(!edge_weight_tree->head)
     return;
 
+  if(debug_lvl >= DEBUG_SCARY_THINGS)
+    syslog(LOG_DEBUG, "Running Kruskal's algorithm:");
+
   /* Clear visited status on nodes */
 
   for(node = node_tree->head; node; node = node->next)
@@ -95,14 +106,6 @@ void mst_kruskal(void)
   
   ((edge_t *)edge_weight_tree->head->data)->from.node->status.visited = 1;
 
-  /* Clear MST status on connections */
-
-  for(node = connection_tree->head; node; node = node->next)
-    {
-      c = (connection_t *)node->data;
-      c->status.mst = 0;
-    }
-
   /* Add safe edges */
 
   for(skipped = 0, node = edge_weight_tree->head; node; node = next)
@@ -123,12 +126,18 @@ void mst_kruskal(void)
 
       safe_edges++;
 
+      if(debug_lvl >= DEBUG_SCARY_THINGS)
+       syslog(LOG_DEBUG, " Adding edge %s - %s weight %d", e->from.node->name, e->to.node->name, e->weight);
+
       if(skipped)
         {
           next = edge_weight_tree->head;
           continue;
         }
     }
+
+  if(debug_lvl >= DEBUG_SCARY_THINGS)
+    syslog(LOG_DEBUG, "Done, counted %d nodes and %d safe edges.", nodes, safe_edges);
 }
 
 /* Implementation of a simple breadth-first search algorithm.
@@ -186,17 +195,15 @@ void sssp_bfs(void)
                   to_hc.node->nexthop = (n->nexthop == myself) ? to_hc.node : n->nexthop;
                   to_hc.node->via = (e->options & OPTION_INDIRECT || n->via != n) ? n->via : to_hc.node;
                  to_hc.node->options = e->options;
-                  if(to_hc.node->address != to_hc.address || to_hc.node->port != to_hc.port)
+                  if(sockaddrcmp(&to_hc.node->address, &to_hc.udpaddress))
                  {
                     node = avl_unlink(node_udp_tree, to_hc.node);
-                    to_hc.node->address = to_hc.address;
-                   to_hc.node->port = to_hc.port;
+                    to_hc.node->address = to_hc.udpaddress;
                    if(to_hc.node->hostname)
                      free(to_hc.node->hostname);
-                   to_hc.node->hostname = hostlookup(htonl(to_hc.address));
+                   to_hc.node->hostname = sockaddr2hostname(&to_hc.udpaddress);
                     avl_insert_node(node_udp_tree, node);
                  }
-                 to_hc.node->port = to_hc.port;
                   node = avl_alloc_node();
                   node->data = to_hc.node;
                   avl_insert_before(todo_tree, from, node);