Never delete Subnets when StrictSubnets is set
If a node is unreachable, and not connected to an edge anymore, it gets deleted. When this happens its subnets are also removed, which should not happen with StrictSubnets=yes. Solution: - do not remove subnets in src/net.c::purge(), we know that all subnets in the list came from our hosts files. I think here you got the check wrong by looking at the tunnelserver code below it - with strictsubnets we still inform others but do not remove the subnet from our data. - do not remove nodes in net.c::purge() that still have subnets attached.
This commit is contained in:
parent
146760bd35
commit
292354912f
1 changed files with 4 additions and 3 deletions
|
@ -68,8 +68,8 @@ static void purge(void) {
|
||||||
for(snode = n->subnet_tree->head; snode; snode = snext) {
|
for(snode = n->subnet_tree->head; snode; snode = snext) {
|
||||||
snext = snode->next;
|
snext = snode->next;
|
||||||
s = snode->data;
|
s = snode->data;
|
||||||
if(!strictsubnets)
|
|
||||||
send_del_subnet(broadcast, s);
|
send_del_subnet(broadcast, s);
|
||||||
|
if(!strictsubnets)
|
||||||
subnet_del(n, s);
|
subnet_del(n, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,8 @@ static void purge(void) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!enode)
|
if(!enode && (!strictsubnets || !n->subnet_tree->head))
|
||||||
|
/* in strictsubnets mode do not delete nodes with subnets */
|
||||||
node_del(n);
|
node_del(n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue