wireless: fix channel check
[project/netifd.git] / interface-ip.c
index 60902f9..4edae2e 100644 (file)
@@ -15,7 +15,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <unistd.h>
 
 #include <limits.h>
 #include <arpa/inet.h>
@@ -579,6 +578,7 @@ interface_update_proto_addr(struct vlist_tree *tree,
 
                        system_del_address(dev, a_old);
                }
+               free(a_old->pclass);
                free(a_old);
        }
 
@@ -920,7 +920,9 @@ interface_update_prefix(struct vlist_tree *tree,
        } else if (node_new) {
                // Set null-route to avoid routing loops
                system_add_route(NULL, &route);
-               interface_update_prefix_assignments(prefix_new, true);
+
+               if (!prefix_new->iface || !prefix_new->iface->proto_ip.no_delegation)
+                       interface_update_prefix_assignments(prefix_new, true);
        } else if (node_old) {
                // Remove null-route
                interface_update_prefix_assignments(prefix_old, false);
@@ -928,11 +930,12 @@ interface_update_prefix(struct vlist_tree *tree,
        }
 
        if (node_old) {
-               list_del(&prefix_old->head);
+               if (prefix_old->head.next)
+                       list_del(&prefix_old->head);
                free(prefix_old);
        }
 
-       if (node_new)
+       if (node_new && (!prefix_new->iface || !prefix_new->iface->proto_ip.no_delegation))
                list_add(&prefix_new->head, &prefixes);
 
 }