diff --git a/client/ifstatus.c b/client/ifstatus.c index 3ad35e5b3..00af7c4cb 100644 --- a/client/ifstatus.c +++ b/client/ifstatus.c @@ -329,18 +329,17 @@ ni_ifstatus_show_addrs(const ni_netdev_t *dev, ni_bool_t verbose) ni_address_t *ap; for (ap = dev->addrs; ap; ap = ap->next) { - if (ni_address_is_duplicate(ap)) - continue; - if (ni_address_is_deprecated(ap)) + if (!ni_sockaddr_is_specified(&ap->local_addr)) continue; if (ni_address_is_linklocal(ap) && !verbose) continue; - if (!ni_sockaddr_is_specified(&ap->local_addr)) - continue; - if_printf("", "addr:", "%s %s/%u", + ni_address_format_flags(&buf, ap->family, ap->flags, "|"); + if_printf("", "addr:", "%s %s/%u%s%s", ni_addrfamily_type_to_name(ap->family), - ni_sockaddr_print(&ap->local_addr), ap->prefixlen); + ni_sockaddr_print(&ap->local_addr), ap->prefixlen, + buf.string ? " " : "", buf.string ? buf.string : ""); + ni_stringbuf_destroy(&buf); if (verbose) { if (ap->family == AF_INET) { diff --git a/dhcp6/device.c b/dhcp6/device.c index 74649034c..1540b6977 100644 --- a/dhcp6/device.c +++ b/dhcp6/device.c @@ -1125,6 +1125,13 @@ ni_dhcp6_device_event(ni_dhcp6_device_t *dev, ni_netdev_t *ifp, ni_event_t event } break; + case NI_EVENT_DEVICE_CHANGE: + if (dev->config && dev->config->mode == NI_DHCP6_MODE_AUTO) { + ni_dhcp6_device_update_mode(dev, ifp); + ni_dhcp6_device_start(dev); + } + break; + default: ni_debug_dhcp("%s: received other event", dev->ifname); break; @@ -1170,22 +1177,7 @@ void ni_dhcp6_prefix_event(ni_dhcp6_device_t *dev, ni_netdev_t *ifp, ni_event_t event, const ni_ipv6_ra_pinfo_t *pi) { - ni_ipv6_devinfo_t *ipv6; - - ipv6 = ni_netdev_get_ipv6(ifp); - if (ipv6 == NULL) - return; - - ni_debug_verbose(NI_LOG_DEBUG2, NI_TRACE_EVENTS, - "%s: %s RA<%s> Prefix<%s/%u %s,%s> [%d,%d]", dev->ifname, - (event == NI_EVENT_PREFIX_UPDATE ? "update" : "delete"), - (ipv6->radv.managed_addr ? "managed-address" : - (ipv6->radv.other_config ? "managed-config" : "unmanaged")), - ni_sockaddr_print(&pi->prefix), pi->length, - (pi->on_link ? "onlink" : "not-onlink"), - (pi->autoconf ? "autoconf" : "no-autoconf"), - pi->lifetime.preferred_lft, pi->lifetime.valid_lft); - + ni_server_trace_interface_prefix_events(ifp, event, pi); switch (event) { case NI_EVENT_PREFIX_UPDATE: if (dev->config && dev->config->mode == NI_DHCP6_MODE_AUTO) { diff --git a/dhcp6/main.c b/dhcp6/main.c index dd11e9b45..0c04763c2 100644 --- a/dhcp6/main.c +++ b/dhcp6/main.c @@ -547,6 +547,7 @@ dhcp6_interface_event(ni_netdev_t *ifp, ni_event_t event) dhcp6_device_destroy(dhcp6_dbus_server, ifp); break; + case NI_EVENT_DEVICE_CHANGE: case NI_EVENT_DEVICE_DOWN: case NI_EVENT_DEVICE_UP: case NI_EVENT_NETWORK_DOWN: diff --git a/include/wicked/address.h b/include/wicked/address.h index 7a6880c8b..b9e2ec9ff 100644 --- a/include/wicked/address.h +++ b/include/wicked/address.h @@ -93,11 +93,12 @@ extern unsigned int ni_af_address_prefixlen(int af); extern ni_address_t * ni_address_new(int af, unsigned int prefix_len, const ni_sockaddr_t *local_addr, ni_address_t **list); +extern void ni_address_free(ni_address_t *); +extern const char * ni_address_format_flags(ni_stringbuf_t *, unsigned int, unsigned int, const char *); extern void ni_address_list_append(ni_address_t **, ni_address_t *); extern void ni_address_list_destroy(ni_address_t **); extern void ni_address_list_dedup(ni_address_t **); extern ni_address_t * ni_address_list_find(ni_address_t *, const ni_sockaddr_t *); extern unsigned int ni_address_list_count(ni_address_t *list); -extern void ni_address_free(ni_address_t *); #endif /* __WICKED_ADDRESS_H__ */ diff --git a/include/wicked/netinfo.h b/include/wicked/netinfo.h index 6a505495d..701ece9e6 100644 --- a/include/wicked/netinfo.h +++ b/include/wicked/netinfo.h @@ -119,6 +119,9 @@ extern int ni_server_enable_interface_addr_events(void (*handler)(ni_netdev_t * extern int ni_server_enable_interface_prefix_events(void (*handler)(ni_netdev_t *, ni_event_t, const ni_ipv6_ra_pinfo_t *)); extern int ni_server_enable_interface_nduseropt_events(void (*handler)(ni_netdev_t *, ni_event_t)); extern int ni_server_enable_interface_uevents(void); +extern void ni_server_trace_interface_addr_events(ni_netdev_t *, ni_event_t, const ni_address_t *); +extern void ni_server_trace_interface_prefix_events(ni_netdev_t *, ni_event_t, const ni_ipv6_ra_pinfo_t *); +extern void ni_server_trace_interface_nduseropt_events(ni_netdev_t *, ni_event_t); extern void ni_server_deactivate_interface_events(void); extern void ni_server_deactivate_interface_uevents(void); extern ni_bool_t ni_server_listens_uevents(void); diff --git a/schema/interface.xml b/schema/interface.xml index ebd2aff30..ab26e2183 100644 --- a/schema/interface.xml +++ b/schema/interface.xml @@ -9,6 +9,10 @@ + + + +