} else {
if (a->rr_id < 0) {
a->rr_id = flx_server_get_next_id(m->server);
- flx_server_add_address(m->server, a->rr_id, a->interface->index, AF_UNSPEC, m->server->hostname, &a->address);
+ flx_server_add_address(m->server, a->rr_id, a->interface->index, AF_UNSPEC, FALSE, m->server->hostname, &a->address);
}
}
}
g_assert(m);
g_assert(i);
- for (a = i->addresses; a; a = a->next)
+ for (a = i->addresses; a; a = a->address_next)
update_address_rr(m, a, remove);
}
a->interface->n_ipv4_addrs --;
else if (a->address.family == AF_INET6)
a->interface->n_ipv6_addrs --;
-
- if (a->prev)
- a->prev->next = a->next;
- else
- a->interface->addresses = a->next;
- if (a->next)
- a->next->prev = a->prev;
+ FLX_LLIST_REMOVE(flxInterfaceAddress, address, a->interface->addresses, a);
+ flx_server_remove(m->server, a->rr_id);
+
g_free(a);
}
while (i->addresses)
free_address(m, i->addresses);
+ if (i->ipv4_cache)
+ flx_cache_free(i->ipv4_cache);
+ if (i->ipv6_cache)
+ flx_cache_free(i->ipv6_cache);
+
g_assert(i->n_ipv6_addrs == 0);
g_assert(i->n_ipv4_addrs == 0);
- if (i->prev)
- i->prev->next = i->next;
- else
- m->interfaces = i->next;
-
- if (i->next)
- i->next->prev = i->prev;
-
+ FLX_LLIST_REMOVE(flxInterface, interface, m->interfaces, i);
g_hash_table_remove(m->hash_table, &i->index);
+
+ flx_cache_free(i->ipv4_cache);
+ flx_cache_free(i->ipv6_cache);
g_free(i->name);
g_free(i);
g_assert(i);
g_assert(raddr);
- for (ia = i->addresses; ia; ia = ia->next)
+ for (ia = i->addresses; ia; ia = ia->address_next)
if (flx_address_cmp(&ia->address, raddr) == 0)
return ia;
changed = 1;
else {
i = g_new(flxInterface, 1);
+ i->monitor = m;
i->name = NULL;
i->index = ifinfomsg->ifi_index;
i->addresses = NULL;
i->n_ipv4_addrs = i->n_ipv6_addrs = 0;
- if ((i->next = m->interfaces))
- i->next->prev = i;
- m->interfaces = i;
- i->prev = NULL;
+ FLX_LLIST_PREPEND(flxInterface, interface, m->interfaces, i);
g_hash_table_insert(m->hash_table, &i->index, i);
+ i->ipv4_cache = flx_cache_new(m->server, i);
+ i->ipv6_cache = flx_cache_new(m->server, i);
+
changed = 0;
}
else {
addr = g_new(flxInterfaceAddress, 1);
addr->address = raddr;
+ addr->interface = i;
if (raddr.family == AF_INET)
i->n_ipv4_addrs++;
else if (raddr.family == AF_INET6)
i->n_ipv6_addrs++;
-
- addr->interface = i;
- if ((addr->next = i->addresses))
- addr->next->prev = addr;
- i->addresses = addr;
- addr->prev = NULL;
+
addr->rr_id = -1;
+
+ FLX_LLIST_PREPEND(flxInterfaceAddress, address, i->addresses, addr);
changed = 0;
}
}
-const flxInterface* flx_interface_monitor_get_interface(flxInterfaceMonitor *m, gint index) {
+flxInterface* flx_interface_monitor_get_interface(flxInterfaceMonitor *m, gint index) {
g_assert(m);
g_assert(index > 0);
return g_hash_table_lookup(m->hash_table, &index);
}
-const flxInterface* flx_interface_monitor_get_first(flxInterfaceMonitor *m) {
+flxInterface* flx_interface_monitor_get_first(flxInterfaceMonitor *m) {
g_assert(m);
return m->interfaces;
}
a->scope == RT_SCOPE_UNIVERSE &&
flx_interface_is_relevant(a->interface);
}
+
+void flx_interface_send_query(flxInterface *i, guchar protocol, flxKey *k) {
+ g_assert(i);
+ g_assert(k);
+}