From 8ec7ea724de780a6a428a8485b2760bf1d9e0a4e Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Wed, 9 Oct 2013 15:40:42 +0800 Subject: [PATCH] discover/sysinfo: Add helper script to populate sysinfo identifiers Signed-off-by: Jeremy Kerr --- discover/Makefile.am | 1 + discover/sysinfo.c | 35 ++++++++++++++++++++++++++++++++--- utils/Makefile.am | 2 +- utils/pb-sysinfo | 10 ++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100755 utils/pb-sysinfo diff --git a/discover/Makefile.am b/discover/Makefile.am index 1fd8d96..2a7885d 100644 --- a/discover/Makefile.am +++ b/discover/Makefile.am @@ -22,6 +22,7 @@ AM_CFLAGS = $(DEFAULT_CFLAGS) \ -DPREFIX='"$(prefix)"' \ -DPKG_SHARE_DIR='"$(pkgdatadir)"' \ -DPKG_SYSCONF_DIR='"$(pkgsysconfdir)"' \ + -DPKG_LIBEXEC_DIR='"$(pkglibexecdir)"' \ -DLOCAL_STATE_DIR='"$(localstatedir)"' EXTRA_DIST = native-parser.c 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 #include +#include #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) diff --git a/utils/Makefile.am b/utils/Makefile.am index 6758d68..a01bfe8 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -21,7 +21,7 @@ AM_CFLAGS = \ $(DEFAULT_CFLAGS) dist_sbin_SCRIPTS = pb-udhcpc -dist_pkglibexec_SCRIPTS = pb-console +dist_pkglibexec_SCRIPTS = pb-console pb-sysinfo sbin_PROGRAMS = pb-event diff --git a/utils/pb-sysinfo b/utils/pb-sysinfo new file mode 100755 index 0000000..bd2f0fe --- /dev/null +++ b/utils/pb-sysinfo @@ -0,0 +1,10 @@ +#!/bin/sh + +case "$1" in +'--type') + tr -d '\0' < /proc/device-tree/model + ;; +'--id') + tr -d '\0' < /proc/device-tree/system-id + ;; +esac -- 2.39.2