summaryrefslogtreecommitdiffstats
path: root/ui/ncurses/nc-sysinfo.c
blob: 0d362e481d493ce88fa6ed4ca4478855f6cc6ddb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
 *  Copyright (C) 2013 IBM Corporation
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; version 2 of the License.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif

#include <string.h>

#include <talloc/talloc.h>
#include <types/types.h>
#include <log/log.h>
#include <util/util.h>
#include <i18n/i18n.h>

#include "nc-cui.h"
#include "nc-textscreen.h"
#include "nc-sysinfo.h"

struct sysinfo_screen {
	struct text_screen text_scr;
};

extern const char *sysinfo_help_text;

struct nc_scr *sysinfo_screen_scr(struct sysinfo_screen *screen)
{
	return text_screen_scr(&screen->text_scr);
}

static void if_info_mac_str(struct interface_info *info,
		char *buf, unsigned int buflen)
{
	return mac_str(info->hwaddr, info->hwaddr_size, buf, buflen);
}

static void sysinfo_screen_populate(struct sysinfo_screen *screen,
		const struct system_info *sysinfo)
{
	unsigned int i;

	text_screen_clear(&screen->text_scr);

#define line(...) text_screen_append_line(&screen->text_scr, __VA_ARGS__)
	if (!sysinfo) {
		line(_("Waiting for system information..."));
		return;
	}

	line("%-12s %s", _("System type:"), sysinfo->type ?: "");
	line("%-12s %s", _("System id:"),   sysinfo->identifier ?: "");

	if (sysinfo->n_blockdevs) {
		line(NULL);
		line(_("Storage devices"));
	}

	for (i = 0; i < sysinfo->n_blockdevs; i++) {
		struct blockdev_info *info = sysinfo->blockdevs[i];

		line("%s:", info->name);
		line(_(" UUID:       %s"), info->uuid);
		line(_(" mounted at: %s"), info->mountpoint);
		line(NULL);
	}

	if (sysinfo->n_interfaces) {
		line(NULL);
		line("Network interfaces");
	}

	for (i = 0; i < sysinfo->n_interfaces; i++) {
		struct interface_info *info = sysinfo->interfaces[i];
		char macbuf[32];

		if_info_mac_str(info, macbuf, sizeof(macbuf));

		line("%s:", info->name);
		line(_(" MAC:  %s"), macbuf);
		line(_(" link: %s"), info->link ? "up" : "down");
		line(NULL);
	}

#undef line
}

void sysinfo_screen_update(struct sysinfo_screen *screen,
		const struct system_info *sysinfo)
{
	sysinfo_screen_populate(screen, sysinfo);
	text_screen_draw(&screen->text_scr);
}

struct sysinfo_screen *sysinfo_screen_init(struct cui *cui,
		const struct system_info *sysinfo,
		void (*on_exit)(struct cui *))
{
	struct sysinfo_screen *screen;

	screen = talloc_zero(cui, struct sysinfo_screen);
	text_screen_init(&screen->text_scr, cui,
			_("Petitboot System Information"), on_exit);
	text_screen_set_help(&screen->text_scr,
			_("System Information"), sysinfo_help_text);

	sysinfo_screen_update(screen, sysinfo);

	return screen;
}
OpenPOWER on IntegriCloud