subnet->owner = n;
splay_insert(subnet_tree, subnet);
- splay_insert(n->subnet_tree, subnet);
+ if (n)
+ splay_insert(n->subnet_tree, subnet);
subnet_cache_flush();
}
void subnet_del(node_t *n, subnet_t *subnet) {
- splay_delete(n->subnet_tree, subnet);
+ if (n)
+ splay_delete(n->subnet_tree, subnet);
splay_delete(subnet_tree, subnet);
subnet_cache_flush();
if(!memcmp(address, &p->net.mac.address, sizeof *address)) {
r = p;
- if(p->owner->status.reachable)
+ if(!p->owner || p->owner->status.reachable)
break;
}
}
if(!maskcmp(address, &p->net.ipv4.address, p->net.ipv4.prefixlength)) {
r = p;
- if(p->owner->status.reachable)
+ if(!p->owner || p->owner->status.reachable)
break;
}
}
if(!maskcmp(address, &p->net.ipv6.address, p->net.ipv6.prefixlength)) {
r = p;
- if(p->owner->status.reachable)
+ if(!p->owner || p->owner->status.reachable)
break;
}
}
send_request(c, "%d %d %s %s",
CONTROL, REQ_DUMP_SUBNETS,
- netstr, subnet->owner->name);
+ netstr, subnet->owner ? subnet->owner->name : "(broadcast)");
}
return send_request(c, "%d %d", CONTROL, REQ_DUMP_SUBNETS);