diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-12-16 10:49:29 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-12-18 09:52:42 +0800 |
commit | b955fa07fc256b39caedb311f97fed404a63c8d5 (patch) | |
tree | 7e1e464163453eef09988287b2d0d3c40038a553 /discover/sysinfo.c | |
parent | 8b09f179fb71f13223e78ceb91f6a692053957b0 (diff) | |
download | talos-petitboot-b955fa07fc256b39caedb311f97fed404a63c8d5.tar.gz talos-petitboot-b955fa07fc256b39caedb311f97fed404a63c8d5.zip |
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 <jk@ozlabs.org>
Diffstat (limited to 'discover/sysinfo.c')
-rw-r--r-- | discover/sysinfo.c | 25 |
1 files changed, 20 insertions, 5 deletions
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, |