hash_free(mac_cache);
}
-splay_tree_t *new_subnet_tree(void) {
- return splay_alloc_tree((splay_compare_t) subnet_compare, NULL);
-}
-
-void free_subnet_tree(splay_tree_t *subnet_tree) {
- splay_delete_tree(subnet_tree);
+void init_subnet_tree(splay_tree_t *tree) {
+ memset(tree, 0, sizeof(*tree));
+ tree->compare = (splay_compare_t) subnet_compare;
}
/* Allocating and freeing space for subnets */
splay_insert(&subnet_tree, subnet);
if(n) {
- splay_insert(n->subnet_tree, subnet);
+ splay_insert(&n->subnet_tree, subnet);
}
subnet_cache_flush();
void subnet_del(node_t *n, subnet_t *subnet) {
if(n) {
- splay_delete(n->subnet_tree, subnet);
+ splay_delete(&n->subnet_tree, subnet);
}
splay_delete(&subnet_tree, subnet);
/* Subnet lookup routines */
-subnet_t *lookup_subnet(const node_t *owner, const subnet_t *subnet) {
- return splay_search(owner->subnet_tree, subnet);
+subnet_t *lookup_subnet(node_t *owner, const subnet_t *subnet) {
+ return splay_search(&owner->subnet_tree, subnet);
}
subnet_t *lookup_subnet_mac(const node_t *owner, const mac_t *address) {
// Search all subnets for a matching one
- for splay_each(subnet_t, p, owner ? owner->subnet_tree : &subnet_tree) {
+ for splay_each(subnet_t, p, owner ? &owner->subnet_tree : &subnet_tree) {
if(!p || p->type != SUBNET_MAC) {
continue;
}
name = up ? "subnet-up" : "subnet-down";
if(!subnet) {
- for splay_each(subnet_t, subnet, owner->subnet_tree) {
+ for splay_each(subnet_t, subnet, &owner->subnet_tree) {
if(!net2str(netstr, sizeof(netstr), subnet)) {
continue;
}