X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fgraph.c;h=8f58af4ca45ccd5aec644e9de2b90936329d0b21;hb=eacb5a28fb4c1515633f2b8a206e7067bc7b8f0c;hp=f5aff5bfd7a2511e71042162408e390a332d19ea;hpb=369fe1ab1cbfc3f8305de1faab2e30157378b044;p=tinc diff --git a/src/graph.c b/src/graph.c index f5aff5bf..8f58af4c 100644 --- a/src/graph.c +++ b/src/graph.c @@ -1,6 +1,6 @@ /* graph.c -- graph algorithms - Copyright (C) 2001-2009 Guus Sliepen , + Copyright (C) 2001-2010 Guus Sliepen , 2001-2005 Ivo Timmermans This program is free software; you can redistribute it and/or modify @@ -53,6 +53,7 @@ #include "netutl.h" #include "node.h" #include "process.h" +#include "protocol.h" #include "subnet.h" #include "utils.h" #include "xalloc.h" @@ -198,16 +199,12 @@ void sssp_bfs(void) { n->address is set to the e->address of the edge left of n to n. We are currently examining the edge e right of n from n: - - If e->reverse->address != n->address, then e->to is probably - not reachable for the nodes left of n. We do as if the indirectdata - flag is set on edge e. - If edge e provides for better reachability of e->to, update e->to and (re)add it to the todo_list to (re)examine the reachability of nodes behind it. */ - indirect = n->status.indirect || e->options & OPTION_INDIRECT - || ((n != myself) && sockaddrcmp(&n->address, &e->reverse->address)); + indirect = n->status.indirect || e->options & OPTION_INDIRECT; if(e->to->status.visited && (!e->to->status.indirect || indirect)) @@ -251,7 +248,7 @@ void sssp_bfs(void) { /* TODO: only clear status.validkey if node is unreachable? */ n->status.validkey = false; - n->status.waitingforkey = false; + n->last_req_key = 0; n->maxmtu = MTU; n->minmtu = 0; @@ -289,6 +286,8 @@ void sssp_bfs(void) { if(!n->status.reachable) update_node_udp(n, NULL); + else if(n->connection) + send_ans_key(n); } } }