X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fgraph.c;h=233cf5442a4e000e612a8a64f6b384de65ffeaf4;hb=2956559f7d12caa9779207525419801e0e9ab3e3;hp=7079f93efc5e98513541b47de14d823211874b30;hpb=cc3c69c892b0dad9a6ece0a0f4ccd429a22fcbff;p=meshlink diff --git a/src/graph.c b/src/graph.c index 7079f93e..233cf544 100644 --- a/src/graph.c +++ b/src/graph.c @@ -1,7 +1,6 @@ /* graph.c -- graph algorithms - Copyright (C) 2001-2013 Guus Sliepen , - 2001-2005 Ivo Timmermans + Copyright (C) 2014 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,19 +43,14 @@ #include "system.h" -#include "config.h" #include "connection.h" -#include "device.h" #include "edge.h" #include "graph.h" #include "list.h" #include "logger.h" -#include "names.h" #include "netutl.h" #include "node.h" -#include "process.h" #include "protocol.h" -#include "subnet.h" #include "utils.h" #include "xalloc.h" #include "graph.h" @@ -204,7 +198,7 @@ static void check_reachability(void) { for splay_each(node_t, n, node_tree) { if(n->status.visited != n->status.reachable) { n->status.reachable = !n->status.reachable; - n->last_state_change = time(NULL); + n->last_state_change = now.tv_sec; if(n->status.reachable) { logger(DEBUG_TRAFFIC, LOG_DEBUG, "Node %s (%s) became reachable", @@ -214,16 +208,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; @@ -233,52 +222,21 @@ static void check_reachability(void) { timeout_del(&n->mtutimeout); - char *name; - char *address; - char *port; - char *envp[7]; - - xasprintf(&envp[0], "NETNAME=%s", netname ? : ""); - xasprintf(&envp[1], "DEVICE=%s", device ? : ""); - xasprintf(&envp[2], "INTERFACE=%s", iface ? : ""); - xasprintf(&envp[3], "NODE=%s", n->name); - sockaddr2str(&n->address, &address, &port); - xasprintf(&envp[4], "REMOTEADDRESS=%s", address); - xasprintf(&envp[5], "REMOTEPORT=%s", port); - envp[6] = NULL; - - execute_script(n->status.reachable ? "host-up" : "host-down", envp); - - xasprintf(&name, n->status.reachable ? "hosts/%s-up" : "hosts/%s-down", n->name); - execute_script(name, envp); - - free(name); - free(address); - free(port); - - for(int i = 0; i < 6; i++) - free(envp[i]); - - subnet_update(n, NULL, n->status.reachable); + //TODO: callback to application to inform of this node going up/down if(!n->status.reachable) { update_node_udp(n, NULL); 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); } } } } void graph(void) { - subnet_cache_flush(); sssp_bfs(); check_reachability(); mst_kruskal();