From 292354912f346fe467f557f0dc026b519997289c Mon Sep 17 00:00:00 2001 From: Sven-Haegar Koch Date: Wed, 10 Mar 2010 02:50:51 +0100 Subject: [PATCH] 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. --- src/net.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/net.c b/src/net.c index 309ebe4..6ffd998 100644 --- a/src/net.c +++ b/src/net.c @@ -68,9 +68,9 @@ static void purge(void) { for(snode = n->subnet_tree->head; snode; snode = snext) { snext = snode->next; s = snode->data; + send_del_subnet(broadcast, s); if(!strictsubnets) - send_del_subnet(broadcast, s); - subnet_del(n, s); + subnet_del(n, s); } for(enode = n->edge_tree->head; enode; enode = enext) { @@ -98,7 +98,8 @@ static void purge(void) { break; } - if(!enode) + if(!enode && (!strictsubnets || !n->subnet_tree->head)) + /* in strictsubnets mode do not delete nodes with subnets */ node_del(n); } } -- 2.25.1