X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet.c;h=f9020b3b9aa8d4ab771167fa3cb5760ebe6f4211;hb=574b380dfc75ef13ee4accba1f2416165c58a5a2;hp=8df87d6ef71e7e39b4aa2aa41b118a1a3fea5388;hpb=d1cd3c81455ecb32149cbaa424b7870075b2b2fc;p=tinc diff --git a/src/net.c b/src/net.c index 8df87d6e..f9020b3b 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); + usleep(sleeptime * 1000000LL); + 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}); }