summaryrefslogtreecommitdiffstats
path: root/discover/sysinfo.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-10-09 15:40:42 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-10-09 17:40:16 +0800
commit8ec7ea724de780a6a428a8485b2760bf1d9e0a4e (patch)
tree568aafd04b22e331c2bb1a7881f8129ae7ffc5b2 /discover/sysinfo.c
parentbc4114e2235163bd88456c25cc0a908d86151f93 (diff)
downloadtalos-petitboot-8ec7ea724de780a6a428a8485b2760bf1d9e0a4e.tar.gz
talos-petitboot-8ec7ea724de780a6a428a8485b2760bf1d9e0a4e.zip
discover/sysinfo: Add helper script to populate sysinfo identifiers
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/sysinfo.c')
-rw-r--r--discover/sysinfo.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/discover/sysinfo.c b/discover/sysinfo.c
index 19dac57..f75819b 100644
--- a/discover/sysinfo.c
+++ b/discover/sysinfo.c
@@ -2,6 +2,7 @@
#include <string.h>
#include <talloc/talloc.h>
+#include <process/process.h>
#include "discover-server.h"
#include "sysinfo.h"
@@ -9,6 +10,8 @@
static struct system_info *sysinfo;
static struct discover_server *server;
+static const char *sysinfo_helper = PKG_LIBEXEC_DIR "/pb-sysinfo";
+
const struct system_info *system_info_get(void)
{
return sysinfo;
@@ -50,10 +53,36 @@ void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr,
discover_server_notify_system_info(server, sysinfo);
}
-static void system_info_set_identifier(struct system_info *info
- __attribute__((unused)))
+static void system_info_set_identifier(struct system_info *info)
{
- /* todo: call helpers to set type & id */
+ struct process *process;
+ int rc;
+ const char *argv[] = {
+ sysinfo_helper, NULL, NULL,
+ };
+
+ process = process_create(info);
+ process->path = sysinfo_helper;
+ process->argv = argv;
+ process->keep_stdout = true;
+
+ argv[1] = "--type";
+ rc = process_run_sync(process);
+
+ if (!rc) {
+ info->type = talloc_strndup(info, process->stdout_buf,
+ process->stdout_len);
+ }
+
+ argv[1] = "--id";
+ rc = process_run_sync(process);
+
+ if (!rc) {
+ info->identifier = talloc_strndup(info, process->stdout_buf,
+ process->stdout_len);
+ }
+
+ process_release(process);
}
void system_info_init(struct discover_server *s)
OpenPOWER on IntegriCloud