X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet.c;h=7d44d17c378f0bbbf2821bd6b4432dd43f5d6705;hp=0e5823641de349b1bb2321623be9820e0a37891c;hb=a22041922f160667573e9a5ae3f4195e1668906a;hpb=8b70c5be9bc762d81354f9cd77c3748a44a4956d diff --git a/src/net.c b/src/net.c index 0e582364..7d44d17c 100644 --- a/src/net.c +++ b/src/net.c @@ -36,6 +36,9 @@ #include "subnet.h" #include "xalloc.h" +int contradicting_add_edge = 0; +int contradicting_del_edge = 0; + /* Purge edges and subnets of unreachable nodes. Use carefully. */ void purge(void) { @@ -189,6 +192,19 @@ static void timeout_handler(int fd, short events, void *event) { } } + if(contradicting_del_edge && contradicting_add_edge) { + logger(LOG_WARNING, "Possible node with same Name as us!"); + + if(rand() % 3 == 0) { + logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!"); + event_loopexit(NULL); + return; + } + + contradicting_add_edge = 0; + contradicting_del_edge = 0; + } + event_add(event, &(struct timeval){pingtimeout, 0}); } @@ -275,6 +291,7 @@ int reload_configuration(void) { if(strictsubnets) { subnet_t *subnet; + for(node = subnet_tree->head; node; node = node->next) { subnet = node->data; subnet->expires = 1;