summaryrefslogtreecommitdiffstats
path: root/discover/sysinfo.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-10-09 12:02:08 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-10-09 17:40:04 +0800
commitbc4114e2235163bd88456c25cc0a908d86151f93 (patch)
tree47e7e1674e33a5f138ed3a390c3dc02e2d9f3133 /discover/sysinfo.c
parentab7076882bc49d895209bf0ecb84e4003e034dd9 (diff)
downloadtalos-petitboot-bc4114e2235163bd88456c25cc0a908d86151f93.tar.gz
talos-petitboot-bc4114e2235163bd88456c25cc0a908d86151f93.zip
Add system info messages
Add a little infrastructure for communicating information about the system to the petitboot UIs. We just send some identifying info (type and identifier), as well as the interfaces. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/sysinfo.c')
-rw-r--r--discover/sysinfo.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/discover/sysinfo.c b/discover/sysinfo.c
new file mode 100644
index 0000000..19dac57
--- /dev/null
+++ b/discover/sysinfo.c
@@ -0,0 +1,64 @@
+
+#include <string.h>
+
+#include <talloc/talloc.h>
+
+#include "discover-server.h"
+#include "sysinfo.h"
+
+static struct system_info *sysinfo;
+static struct discover_server *server;
+
+const struct system_info *system_info_get(void)
+{
+ return sysinfo;
+}
+
+void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr,
+ const char *name)
+{
+ struct interface_info *if_info;
+ unsigned int i;
+
+ for (i = 0; i < sysinfo->n_interfaces; i++) {
+ if_info = sysinfo->interfaces[i];
+
+ if (if_info->hwaddr_size != hwaddr_size)
+ continue;
+
+ 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);
+ return;
+ }
+
+ if_info = talloc_zero(sysinfo, struct interface_info);
+ if_info->hwaddr_size = hwaddr_size;
+ if_info->hwaddr = talloc_memdup(if_info, hwaddr, hwaddr_size);
+ if_info->name = talloc_strdup(if_info, name);
+
+ sysinfo->n_interfaces++;
+ sysinfo->interfaces = talloc_realloc(sysinfo, sysinfo->interfaces,
+ struct interface_info *,
+ sysinfo->n_interfaces);
+ sysinfo->interfaces[sysinfo->n_interfaces - 1] = if_info;
+
+ discover_server_notify_system_info(server, sysinfo);
+}
+
+static void system_info_set_identifier(struct system_info *info
+ __attribute__((unused)))
+{
+ /* todo: call helpers to set type & id */
+}
+
+void system_info_init(struct discover_server *s)
+{
+ sysinfo = talloc_zero(server, struct system_info);
+ server = s;
+ system_info_set_identifier(sysinfo);
+}
OpenPOWER on IntegriCloud