Detect and prevent two nodes with the same Name being on the VPN simultaneously.

In this situation, the two nodes will start fighting over the edges they announced.
When we have to contradict both ADD_EDGE and DEL_EDGE messages, we log a warning,
and with 25% chance per PingTimeout we quit.
This commit is contained in:
Guus Sliepen 2010-06-04 14:53:52 +02:00
parent dbf3d168b7
commit 4a21aabada
3 changed files with 19 additions and 0 deletions

View file

@ -44,6 +44,8 @@ bool do_purge = false;
volatile bool running = false;
time_t now = 0;
int contradicting_add_edge = 0;
int contradicting_del_edge = 0;
/* Purge edges and subnets of unreachable nodes. Use carefully. */
@ -415,6 +417,19 @@ int main_loop(void) {
send_key_changed(broadcast, myself);
keyexpires = now + keylifetime;
}
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!");
running = false;
break;
}
contradicting_add_edge = 0;
contradicting_del_edge = 0;
}
}
if(sigalrm) {