On Fri, Jan 17, 2020 at 10:01:08AM +0000, Andrew Grillet wrote:
> Is there any possibility that the same -c option could be added to
> > ldomctl panic -c <guest>
> It would be very useful.
I don't really use panic but if kettenis is fine with adding -c there
as well, why not.
The code repitition in ldomctl.c starts to grow, mainly because the
command functions guest_*() largely to the same with regard to argument
parsing and HV setup; if this diff goes in, I can try merging stuff a
bit.
Index: ldomctl.8
===================================================================
RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.8,v
retrieving revision 1.26
diff -u -p -r1.26 ldomctl.8
--- ldomctl.8 16 Jan 2020 16:46:47 -0000 1.26
+++ ldomctl.8 17 Jan 2020 11:20:53 -0000
@@ -84,13 +84,17 @@ and the configuration which will be used
(after resetting the machine) if it differs from the currently running one.
.It Cm list-io
List available PCIe devices.
-.It Cm panic Ar domain
+.It Cm panic Oo Fl c Oc Ar domain
Panic a guest domain.
The exact behaviour of this command depends on the OS running in the domain.
For
.Ox
the default behaviour is to enter
.Xr ddb 4 .
+.Bl -tag -width 3n
+.It Fl c
+Automatically connect to the guest console.
+.El
.It Cm select Ar configuration
Select the next logical domain configuration to use
(after resetting the machine).
Index: ldomctl.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.c,v
retrieving revision 1.36
diff -u -p -r1.36 ldomctl.c
--- ldomctl.c 17 Jan 2020 10:50:20 -0000 1.36
+++ ldomctl.c 17 Jan 2020 11:20:53 -0000
@@ -131,8 +131,8 @@ usage(void)
"\t%1$s dump|list|list-io\n"
"\t%1$s init-system [-n] file\n"
"\t%1$s create-vdisk -s size file\n"
- "\t%1$s start [-c] domain\n"
- "\t%1$s console|panic|status|stop [domain]\n",
+ "\t%1$s panic|start [-c] domain\n"
+ "\t%1$s console|status|stop [domain]\n",
getprogname());
exit(EXIT_FAILURE);
@@ -503,19 +503,35 @@ guest_panic(int argc, char **argv)
{
struct hvctl_msg msg;
ssize_t nbytes;
+ uint64_t gid;
+ int ch, console = 0;
- if (argc != 2)
+ while ((ch = getopt(argc, argv, "c")) != -1) {
+ switch (ch) {
+ case 'c':
+ console = 1;
+ break;
+ default:
+ usage();
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc != 1)
usage();
hv_config();
+ gid = find_guest(argv[0]);
+
/*
* Stop guest domain.
*/
bzero(&msg, sizeof(msg));
msg.hdr.op = HVCTL_OP_GUEST_PANIC;
msg.hdr.seq = hvctl_seq++;
- msg.msg.guestop.guestid = find_guest(argv[1]);
+ msg.msg.guestop.guestid = gid;
nbytes = write(hvctl_fd, &msg, sizeof(msg));
if (nbytes != sizeof(msg))
err(1, "write");
@@ -524,6 +540,9 @@ guest_panic(int argc, char **argv)
nbytes = read(hvctl_fd, &msg, sizeof(msg));
if (nbytes != sizeof(msg))
err(1, "read");
+
+ if (console)
+ console_exec(gid);
}
void