X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fgraph.c;h=8f601c2170f7db497df4e375907f058b9c41ea25;hb=5217c16db4babd64580c2fd7aa36180bb9bd838c;hp=8f20ec7d79ad0fbbe5d2e389314eb33aa67a664e;hpb=bc33a073d82cd4b5e75d00e379ddfeeaa6ade962;p=tinc diff --git a/src/graph.c b/src/graph.c index 8f20ec7d..8f601c21 100644 --- a/src/graph.c +++ b/src/graph.c @@ -204,6 +204,9 @@ static void sssp_bfs(void) { static void check_reachability(void) { /* Check reachability status. */ + int reachable_count = 0; + int became_reachable_count = 0; + int became_unreachable_count = 0; for splay_each(node_t, n, node_tree) { if(n->status.visited != n->status.reachable) { n->status.reachable = !n->status.reachable; @@ -212,9 +215,13 @@ static void check_reachability(void) { if(n->status.reachable) { logger(DEBUG_TRAFFIC, LOG_DEBUG, "Node %s (%s) became reachable", n->name, n->hostname); + if (n != myself) + became_reachable_count++; } else { logger(DEBUG_TRAFFIC, LOG_DEBUG, "Node %s (%s) became unreachable", n->name, n->hostname); + if (n != myself) + became_unreachable_count++; } if(experimental && OPTION_VERSION(n->options) >= 2) @@ -277,6 +284,16 @@ static void check_reachability(void) { } } } + + if(n->status.reachable && n != myself) + reachable_count++; + } + + if (device_standby) { + if (reachable_count == 0 && became_unreachable_count > 0) + device_disable(); + else if (reachable_count == became_reachable_count) + device_enable(); } }