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:
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)
((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)
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.
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);