2 * Copyright (C) 2013 IBM Corporation
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 #if defined(HAVE_CONFIG_H)
24 #include <talloc/talloc.h>
25 #include <types/types.h>
27 #include <util/util.h>
30 #include "nc-textscreen.h"
31 #include "nc-sysinfo.h"
33 struct sysinfo_screen {
34 struct text_screen text_scr;
37 extern const char *sysinfo_help_text;
39 struct nc_scr *sysinfo_screen_scr(struct sysinfo_screen *screen)
41 return text_screen_scr(&screen->text_scr);
44 static void if_info_mac_str(struct interface_info *info,
45 char *buf, unsigned int buflen)
47 return mac_str(info->hwaddr, info->hwaddr_size, buf, buflen);
50 static void sysinfo_screen_populate(struct sysinfo_screen *screen,
51 const struct system_info *sysinfo)
55 text_screen_clear(&screen->text_scr);
57 #define line(...) text_screen_append_line(&screen->text_scr, __VA_ARGS__)
59 line("Waiting for system information...");
63 line("%-12s %s", "System type:", sysinfo->type ?: "");
64 line("%-12s %s", "System id:", sysinfo->identifier ?: "");
66 if (sysinfo->n_blockdevs) {
68 line("Storage devices");
71 for (i = 0; i < sysinfo->n_blockdevs; i++) {
72 struct blockdev_info *info = sysinfo->blockdevs[i];
74 line("%s:", info->name);
75 line(" UUID: %s", info->uuid);
76 line(" mounted at: %s", info->mountpoint);
80 if (sysinfo->n_interfaces) {
82 line("Network interfaces");
85 for (i = 0; i < sysinfo->n_interfaces; i++) {
86 struct interface_info *info = sysinfo->interfaces[i];
89 if_info_mac_str(info, macbuf, sizeof(macbuf));
91 line("%s:", info->name);
92 line(" MAC: %s", macbuf);
93 line(" link: %s", info->link ? "up" : "down");
100 void sysinfo_screen_update(struct sysinfo_screen *screen,
101 const struct system_info *sysinfo)
103 sysinfo_screen_populate(screen, sysinfo);
104 text_screen_draw(&screen->text_scr);
107 struct sysinfo_screen *sysinfo_screen_init(struct cui *cui,
108 const struct system_info *sysinfo,
109 void (*on_exit)(struct cui *))
111 struct sysinfo_screen *screen;
113 screen = talloc_zero(cui, struct sysinfo_screen);
114 text_screen_init(&screen->text_scr, cui,
115 "Petitboot System Information", on_exit);
116 text_screen_set_help(&screen->text_scr,
117 "System Information", sysinfo_help_text);
119 sysinfo_screen_update(screen, sysinfo);