121c1c48aSSascha Wildner /*
221c1c48aSSascha Wildner  * Copyright (c)2004 The DragonFly Project.  All rights reserved.
321c1c48aSSascha Wildner  *
421c1c48aSSascha Wildner  * Redistribution and use in source and binary forms, with or without
521c1c48aSSascha Wildner  * modification, are permitted provided that the following conditions
621c1c48aSSascha Wildner  * are met:
721c1c48aSSascha Wildner  *
821c1c48aSSascha Wildner  *   Redistributions of source code must retain the above copyright
921c1c48aSSascha Wildner  *   notice, this list of conditions and the following disclaimer.
1021c1c48aSSascha Wildner  *
1121c1c48aSSascha Wildner  *   Redistributions in binary form must reproduce the above copyright
1221c1c48aSSascha Wildner  *   notice, this list of conditions and the following disclaimer in
1321c1c48aSSascha Wildner  *   the documentation and/or other materials provided with the
1421c1c48aSSascha Wildner  *   distribution.
1521c1c48aSSascha Wildner  *
1621c1c48aSSascha Wildner  *   Neither the name of the DragonFly Project nor the names of its
1721c1c48aSSascha Wildner  *   contributors may be used to endorse or promote products derived
1821c1c48aSSascha Wildner  *   from this software without specific prior written permission.
1921c1c48aSSascha Wildner  *
2021c1c48aSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2121c1c48aSSascha Wildner  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2221c1c48aSSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2321c1c48aSSascha Wildner  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2421c1c48aSSascha Wildner  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
2521c1c48aSSascha Wildner  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2621c1c48aSSascha Wildner  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2721c1c48aSSascha Wildner  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2821c1c48aSSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2921c1c48aSSascha Wildner  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3021c1c48aSSascha Wildner  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3121c1c48aSSascha Wildner  * OF THE POSSIBILITY OF SUCH DAMAGE.
3221c1c48aSSascha Wildner  */
3321c1c48aSSascha Wildner 
3421c1c48aSSascha Wildner /*
3521c1c48aSSascha Wildner  * fn_diagnostic.c
3621c1c48aSSascha Wildner  * Diagnostic functions for installer.
3721c1c48aSSascha Wildner  * $Id: fn_diagnostic.c,v 1.21 2005/03/13 01:53:58 cpressey Exp $
3821c1c48aSSascha Wildner  */
3921c1c48aSSascha Wildner 
4021c1c48aSSascha Wildner #include <sys/types.h>
4121c1c48aSSascha Wildner 
4221c1c48aSSascha Wildner #include <dirent.h>
4321c1c48aSSascha Wildner #include <stdarg.h>
4421c1c48aSSascha Wildner #include <stdio.h>
4521c1c48aSSascha Wildner #include <stdlib.h>
4621c1c48aSSascha Wildner #include <string.h>
4721c1c48aSSascha Wildner 
4821c1c48aSSascha Wildner #ifdef ENABLE_NLS
4921c1c48aSSascha Wildner #include <libintl.h>
5021c1c48aSSascha Wildner #define _(String) gettext (String)
5121c1c48aSSascha Wildner #else
5221c1c48aSSascha Wildner #define _(String) (String)
5321c1c48aSSascha Wildner #endif
5421c1c48aSSascha Wildner 
5521c1c48aSSascha Wildner #include "libaura/mem.h"
5621c1c48aSSascha Wildner #include "libaura/buffer.h"
5721c1c48aSSascha Wildner 
5821c1c48aSSascha Wildner #include "libdfui/dfui.h"
5921c1c48aSSascha Wildner 
6021c1c48aSSascha Wildner #include "libinstaller/commands.h"
6121c1c48aSSascha Wildner #include "libinstaller/confed.h"
6221c1c48aSSascha Wildner #include "libinstaller/diskutil.h"
6321c1c48aSSascha Wildner #include "libinstaller/functions.h"
6421c1c48aSSascha Wildner #include "libinstaller/uiutil.h"
6521c1c48aSSascha Wildner 
6621c1c48aSSascha Wildner #include "fn.h"
6721c1c48aSSascha Wildner #include "pathnames.h"
6821c1c48aSSascha Wildner 
6921c1c48aSSascha Wildner /*** DIAGNOSTIC FUNCTIONS ***/
7021c1c48aSSascha Wildner 
7121c1c48aSSascha Wildner void
fn_show_dmesg(struct i_fn_args * a)7221c1c48aSSascha Wildner fn_show_dmesg(struct i_fn_args *a)
7321c1c48aSSascha Wildner {
7421c1c48aSSascha Wildner 	struct aura_buffer *e;
7521c1c48aSSascha Wildner 	struct dfui_form *f;
7621c1c48aSSascha Wildner 	struct dfui_response *r;
7721c1c48aSSascha Wildner 
7821c1c48aSSascha Wildner 	e = aura_buffer_new(1024);
7921c1c48aSSascha Wildner 	aura_buffer_cat_file(e, "%s%s", a->os_root, cmd_name(a, "DMESG_BOOT"));
8021c1c48aSSascha Wildner 
8121c1c48aSSascha Wildner 	f = dfui_form_create(
8221c1c48aSSascha Wildner 	    "dmesg",
8321c1c48aSSascha Wildner 	    _("System Startup Messages (dmesg)"),
8421c1c48aSSascha Wildner 	    aura_buffer_buf(e),
8521c1c48aSSascha Wildner 	    "",
8621c1c48aSSascha Wildner 
8721c1c48aSSascha Wildner 	    "p", "role", "informative",
8821c1c48aSSascha Wildner 	    "p", "minimum_width", "72",
8921c1c48aSSascha Wildner 	    "p", "monospaced", "true",
9021c1c48aSSascha Wildner 
9121c1c48aSSascha Wildner 	    "a", "ok", _("OK"), "", "",
9221c1c48aSSascha Wildner 	    "p", "accelerator", "ESC",
9321c1c48aSSascha Wildner 
9421c1c48aSSascha Wildner 	    NULL
9521c1c48aSSascha Wildner 	);
9621c1c48aSSascha Wildner 
9721c1c48aSSascha Wildner 	if (!dfui_be_present(a->c, f, &r))
9821c1c48aSSascha Wildner 		abort_backend();
9921c1c48aSSascha Wildner 
10021c1c48aSSascha Wildner 	dfui_form_free(f);
10121c1c48aSSascha Wildner 	dfui_response_free(r);
10221c1c48aSSascha Wildner 
10321c1c48aSSascha Wildner 	aura_buffer_free(e);
10421c1c48aSSascha Wildner }
10521c1c48aSSascha Wildner 
10621c1c48aSSascha Wildner void
fn_show_pciconf(struct i_fn_args * a)10721c1c48aSSascha Wildner fn_show_pciconf(struct i_fn_args *a)
10821c1c48aSSascha Wildner {
10921c1c48aSSascha Wildner 	struct aura_buffer *e;
11021c1c48aSSascha Wildner 	struct dfui_form *f;
11121c1c48aSSascha Wildner 	struct dfui_response *r;
11221c1c48aSSascha Wildner 
11321c1c48aSSascha Wildner 	e = aura_buffer_new(1024);
11421c1c48aSSascha Wildner 	aura_buffer_cat_pipe(e, "pciconf -l -v");
11521c1c48aSSascha Wildner 
11621c1c48aSSascha Wildner 	f = dfui_form_create(
11721c1c48aSSascha Wildner 	    "pciconf",
11821c1c48aSSascha Wildner 	    _("PCI Devices"),
11921c1c48aSSascha Wildner 	    aura_buffer_buf(e),
12021c1c48aSSascha Wildner 	    "",
12121c1c48aSSascha Wildner 
12221c1c48aSSascha Wildner 	    "p", "role", "informative",
12321c1c48aSSascha Wildner 	    "p", "minimum_width", "72",
12421c1c48aSSascha Wildner 	    "p", "monospaced", "true",
12521c1c48aSSascha Wildner 
12621c1c48aSSascha Wildner 	    "a", "ok", _("OK"), "", "",
12721c1c48aSSascha Wildner 	    "p", "accelerator", "ESC",
12821c1c48aSSascha Wildner 
12921c1c48aSSascha Wildner 	    NULL
13021c1c48aSSascha Wildner 	);
13121c1c48aSSascha Wildner 
13221c1c48aSSascha Wildner 	if (!dfui_be_present(a->c, f, &r))
13321c1c48aSSascha Wildner 		abort_backend();
13421c1c48aSSascha Wildner 
13521c1c48aSSascha Wildner 	dfui_form_free(f);
13621c1c48aSSascha Wildner 	dfui_response_free(r);
13721c1c48aSSascha Wildner 
13821c1c48aSSascha Wildner 	aura_buffer_free(e);
13921c1c48aSSascha Wildner }
14021c1c48aSSascha Wildner 
14121c1c48aSSascha Wildner void
fn_show_natacontrol(struct i_fn_args * a)14221c1c48aSSascha Wildner fn_show_natacontrol(struct i_fn_args *a)
14321c1c48aSSascha Wildner {
14421c1c48aSSascha Wildner 	struct aura_buffer *e;
14521c1c48aSSascha Wildner 	struct dfui_form *f;
14621c1c48aSSascha Wildner 	struct dfui_response *r;
14721c1c48aSSascha Wildner 
14821c1c48aSSascha Wildner 	e = aura_buffer_new(1024);
14921c1c48aSSascha Wildner 	aura_buffer_cat_pipe(e, "natacontrol list");
15021c1c48aSSascha Wildner 
15121c1c48aSSascha Wildner 	f = dfui_form_create(
15221c1c48aSSascha Wildner 	    "natacontrol",
15321c1c48aSSascha Wildner 	    _("ATA Devices"),
15421c1c48aSSascha Wildner 	    aura_buffer_buf(e),
15521c1c48aSSascha Wildner 	    "",
15621c1c48aSSascha Wildner 
15721c1c48aSSascha Wildner 	    "p", "role", "informative",
15821c1c48aSSascha Wildner 	    "p", "minimum_width", "72",
15921c1c48aSSascha Wildner 	    "p", "monospaced", "true",
16021c1c48aSSascha Wildner 
16121c1c48aSSascha Wildner 	    "a", "ok", _("OK"), "", "",
16221c1c48aSSascha Wildner 	    "p", "accelerator", "ESC",
16321c1c48aSSascha Wildner 
16421c1c48aSSascha Wildner 	    NULL
16521c1c48aSSascha Wildner 	);
16621c1c48aSSascha Wildner 
16721c1c48aSSascha Wildner 	if (!dfui_be_present(a->c, f, &r))
16821c1c48aSSascha Wildner 		abort_backend();
16921c1c48aSSascha Wildner 
17021c1c48aSSascha Wildner 	dfui_form_free(f);
17121c1c48aSSascha Wildner 	dfui_response_free(r);
17221c1c48aSSascha Wildner 
17321c1c48aSSascha Wildner 	aura_buffer_free(e);
17421c1c48aSSascha Wildner }
17521c1c48aSSascha Wildner 
17621c1c48aSSascha Wildner void
show_ifconfig(struct dfui_connection * c,char * ifname)17721c1c48aSSascha Wildner show_ifconfig(struct dfui_connection *c, char *ifname)
17821c1c48aSSascha Wildner {
17921c1c48aSSascha Wildner 	struct aura_buffer *e;
18021c1c48aSSascha Wildner 
18121c1c48aSSascha Wildner 	e = aura_buffer_new(1024);
18221c1c48aSSascha Wildner 	aura_buffer_cat_pipe(e, "/sbin/ifconfig %s", ifname);
183*5027ce51SYONETANI Tomokazu 	inform(c, "%s", aura_buffer_buf(e));
18421c1c48aSSascha Wildner 	aura_buffer_free(e);
18521c1c48aSSascha Wildner }
186