From 03ac48ea19914e4162f17a2fb0f742b99ae32499 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sat, 16 Jul 2011 15:21:37 +0200 Subject: [PATCH] Use the same logic as tinc 1.0.x for detecting two nodes with the same Name. --- src/net.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/net.c b/src/net.c index 8df87d6..ff08b3e 100644 --- a/src/net.c +++ b/src/net.c @@ -39,6 +39,7 @@ int contradicting_add_edge = 0; int contradicting_del_edge = 0; +static int sleeptime = 10; /* Purge edges and subnets of unreachable nodes. Use carefully. */ @@ -190,19 +191,21 @@ 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; + if(contradicting_del_edge > 100 && contradicting_add_edge > 100) { + logger(LOG_WARNING, "Possible node with same Name as us! Sleeping %d seconds.", sleeptime); + sleep(sleeptime); + sleeptime *= 2; + if(sleeptime < 0) + sleeptime = 3600; + } else { + sleeptime /= 2; + if(sleeptime < 10) + sleeptime = 10; } + contradicting_add_edge = 0; + contradicting_del_edge = 0; + event_add(event, &(struct timeval){pingtimeout, 0}); } -- 2.25.1