From b955fa07fc256b39caedb311f97fed404a63c8d5 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Mon, 16 Dec 2013 10:49:29 +0800 Subject: sysinfo: Add interface link status to sysinfo data This changes adds a 'link' parameter to the interface information sent in sysinfo messages. The discover network code populates this from the incoming netlink messages. Signed-off-by: Jeremy Kerr --- discover/sysinfo.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'discover/sysinfo.c') diff --git a/discover/sysinfo.c b/discover/sysinfo.c index 3c13277..be45438 100644 --- a/discover/sysinfo.c +++ b/discover/sysinfo.c @@ -18,12 +18,14 @@ const struct system_info *system_info_get(void) } void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr, - const char *name) + const char *name, bool link) { struct interface_info *if_info; unsigned int i; for (i = 0; i < sysinfo->n_interfaces; i++) { + bool changed = false; + if_info = sysinfo->interfaces[i]; if (if_info->hwaddr_size != hwaddr_size) @@ -32,10 +34,22 @@ void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr, if (memcmp(if_info->hwaddr, hwaddr, hwaddr_size)) continue; - /* update the name and we're done */ - talloc_free(if_info->name); - if_info->name = talloc_strdup(if_info, name); - discover_server_notify_system_info(server, sysinfo); + /* Found an existing interface. Notify clients on any name or + * link changes */ + if (strcmp(if_info->name, name)) { + talloc_free(if_info->name); + if_info->name = talloc_strdup(if_info, name); + changed = true; + } + + if (if_info->link != link) { + if_info->link = link; + changed = true; + } + + if (changed) + discover_server_notify_system_info(server, sysinfo); + return; } @@ -43,6 +57,7 @@ void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr, if_info->hwaddr_size = hwaddr_size; if_info->hwaddr = talloc_memdup(if_info, hwaddr, hwaddr_size); if_info->name = talloc_strdup(if_info, name); + if_info->link = link; sysinfo->n_interfaces++; sysinfo->interfaces = talloc_realloc(sysinfo, sysinfo->interfaces, -- cgit v1.2.1