Merge branch 'master' into 1.1
[tinc] / src / net.c
index 23b3e7c..0e58236 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -270,6 +270,36 @@ int reload_configuration(void) {
 
        last_config_check = time(NULL);
 
+       /* If StrictSubnet is set, expire deleted Subnets and read new ones in */
+
+       if(strictsubnets) {
+               subnet_t *subnet;
+
+               for(node = subnet_tree->head; node; node = node->next) {
+                       subnet = node->data;
+                       subnet->expires = 1;
+               }
+
+               load_all_subnets();
+
+               for(node = subnet_tree->head; node; node = next) {
+                       next = node->next;
+                       subnet = node->data;
+                       if(subnet->expires == 1) {
+                               send_del_subnet(broadcast, subnet);
+                               if(subnet->owner->status.reachable)
+                                       subnet_update(subnet->owner, subnet, false);
+                               subnet_del(subnet->owner, subnet);
+                       } else if(subnet->expires == -1) {
+                               subnet->expires = 0;
+                       } else {
+                               send_add_subnet(broadcast, subnet);
+                               if(subnet->owner->status.reachable)
+                                       subnet_update(subnet->owner, subnet, true);
+                       }
+               }
+       }
+
        /* Try to make outgoing connections */
        
        try_outgoing_connections();