summaryrefslogtreecommitdiffstats
path: root/discover/sysinfo.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-12-16 10:49:29 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-12-18 09:52:42 +0800
commitb955fa07fc256b39caedb311f97fed404a63c8d5 (patch)
tree7e1e464163453eef09988287b2d0d3c40038a553 /discover/sysinfo.c
parent8b09f179fb71f13223e78ceb91f6a692053957b0 (diff)
downloadtalos-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.c25
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,
OpenPOWER on IntegriCloud