]> git.meshlink.io Git - catta/blobdiff - avahi-core/iface.c
Don't consider incoming goodbye packets as conflicting unless they match one of our...
[catta] / avahi-core / iface.c
index f5373e6392add43ab6a34073e58e8b97a4edf0f2..ba232e6f358dfc15d044dedb2d24ed4ab82c0f2d 100644 (file)
@@ -61,6 +61,10 @@ static void update_address_rr(AvahiInterfaceMonitor *m, AvahiInterfaceAddress *a
             return;
         
         if (avahi_s_entry_group_is_empty(a->entry_group)) {
+            char t[64];
+            avahi_address_snprint(t, sizeof(t), &a->address);
+
+            avahi_log_info("Registering new address %s on %s.", t, a->interface->hardware->name);
 
             if (avahi_server_add_address(m->server, a->entry_group, a->interface->hardware->index, a->interface->protocol, 0, NULL, &a->address) < 0) {
                 avahi_log_warn(__FILE__": avahi_server_add_address() failed: %s", avahi_strerror(m->server->error));
@@ -76,9 +80,13 @@ static void update_address_rr(AvahiInterfaceMonitor *m, AvahiInterfaceAddress *a
         /* Clear the entry group */
 
         if (a->entry_group && !avahi_s_entry_group_is_empty(a->entry_group)) {
+            char t[64];
+            avahi_address_snprint(t, sizeof(t), &a->address);
 
             if (avahi_s_entry_group_get_state(a->entry_group) == AVAHI_ENTRY_GROUP_REGISTERING)
                 avahi_server_decrease_host_rr_pending(m->server);
+
+            avahi_log_info("Withdrawing address %s on %s.", t, a->interface->hardware->name);
             
             avahi_s_entry_group_reset(a->entry_group);
         }
@@ -823,3 +831,21 @@ int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
 
     return 0;
 }
+
+int avahi_interface_has_address(AvahiInterfaceMonitor *m, AvahiIfIndex iface, const AvahiAddress *a) {
+    AvahiInterface *i;
+    AvahiInterfaceAddress *j;
+    
+    assert(m);
+    assert(iface != AVAHI_IF_UNSPEC);
+    assert(a);
+
+    if (!(i = avahi_interface_monitor_get_interface(m, iface, a->family)))
+        return 0;
+
+    for (j = i->addresses; j; j = j->address_next)
+        if (avahi_address_cmp(a, &j->address) == 0)
+            return 1;
+
+    return 0;
+}