X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet.c;h=ff08b3ef3a47637c692e4a56816e13b5eea06421;hb=03ac48ea19914e4162f17a2fb0f742b99ae32499;hp=8df87d6ef71e7e39b4aa2aa41b118a1a3fea5388;hpb=2ba61742d4c2ab82525efb806dc654a6d95d335e;p=tinc diff --git a/src/net.c b/src/net.c index 8df87d6e..ff08b3ef 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}); }