|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC 5/6] libxl: Handle Linux stubdomain specifique QEMU option.
There is few things that are not possible for now in the stubdomain, the
QMP socket and graphique output, and few other things that are handled
in an other way. This patch try to fix the command line passed to the
QEMU in the Linux stubdomain.
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---
tools/libxl/libxl_dm.c | 71 ++++++++++++++++++++++++++++++++++++--------------
1 file changed, 52 insertions(+), 19 deletions(-)
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index d10a58f..6180a01 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -19,9 +19,12 @@
#include "libxl_internal.h"
-static const char *libxl_tapif_script(libxl__gc *gc)
+static const char *libxl_tapif_script(libxl__gc *gc,
+ const libxl_domain_build_info *info)
{
#ifdef __linux__
+ if (info->stubdomain_version == LIBXL_STUBDOMAIN_VERSION_LINUX)
+ return libxl__sprintf(gc, "/etc/qemu-ifup");
return libxl__strdup(gc, "no");
#else
return libxl__sprintf(gc, "%s/qemu-ifup", libxl__xen_script_dir_path());
@@ -257,8 +260,8 @@ static char ** libxl__build_device_model_args_old(libxl__gc
*gc,
"tap,vlan=%d,ifname=%s,bridge=%s,"
"script=%s,downscript=%s",
nics[i].devid, ifname, nics[i].bridge,
- libxl_tapif_script(gc),
- libxl_tapif_script(gc)),
+ libxl_tapif_script(gc, b_info),
+ libxl_tapif_script(gc, b_info)),
NULL);
ioemu_nics++;
}
@@ -372,14 +375,17 @@ static char **
libxl__build_device_model_args_new(libxl__gc *gc,
"-xen-domid",
libxl__sprintf(gc, "%d", guest_domid), NULL);
- flexarray_append(dm_args, "-chardev");
- flexarray_append(dm_args,
- libxl__sprintf(gc, "socket,id=libxl-cmd,"
- "path=%s/qmp-libxl-%d,server,nowait",
- libxl__run_dir_path(), guest_domid));
+ /* There is currently no way to access the QMP socket in the stubdom */
+ if (!libxl_defbool_val(b_info->device_model_stubdomain)) {
+ flexarray_append(dm_args, "-chardev");
+ flexarray_append(dm_args,
+ libxl__sprintf(gc, "socket,id=libxl-cmd,"
+ "path=%s/qmp-libxl-%d,server,nowait",
+ libxl__run_dir_path(), guest_domid));
- flexarray_append(dm_args, "-mon");
- flexarray_append(dm_args, "chardev=libxl-cmd,mode=control");
+ flexarray_append(dm_args, "-mon");
+ flexarray_append(dm_args, "chardev=libxl-cmd,mode=control");
+ }
if (b_info->type == LIBXL_DOMAIN_TYPE_PV) {
flexarray_append(dm_args, "-xen-attach");
@@ -556,8 +562,8 @@ static char ** libxl__build_device_model_args_new(libxl__gc
*gc,
"type=tap,id=net%d,ifname=%s,"
"script=%s,downscript=%s",
nics[i].devid, ifname,
- libxl_tapif_script(gc),
- libxl_tapif_script(gc)));
+ libxl_tapif_script(gc, b_info),
+ libxl_tapif_script(gc, b_info)));
ioemu_nics++;
}
}
@@ -622,6 +628,10 @@ static char **
libxl__build_device_model_args_new(libxl__gc *gc,
drive = libxl__sprintf
(gc,
"if=ide,index=%d,media=cdrom,cache=writeback,id=ide-%i",
disk, dev_number);
+ else if (b_info->stubdomain_version ==
LIBXL_STUBDOMAIN_VERSION_LINUX)
+ drive = libxl__sprintf
+ (gc,
"file=%s,if=ide,index=%d,media=cdrom,cache=writeback,format=%s,id=ide-%i",
+ "/dev/xvdc", disk, "host_cdrom", dev_number);
else
drive = libxl__sprintf
(gc,
"file=%s,if=ide,index=%d,media=cdrom,format=%s,cache=writeback,id=ide-%i",
@@ -650,9 +660,14 @@ static char **
libxl__build_device_model_args_new(libxl__gc *gc,
(gc,
"file=%s,if=scsi,bus=0,unit=%d,format=%s,cache=writeback",
disks[i].pdev_path, disk, format);
else if (disk < 4)
- drive = libxl__sprintf
- (gc,
"file=%s,if=ide,index=%d,media=disk,format=%s,cache=writeback",
- disks[i].pdev_path, disk, format);
+ if (b_info->stubdomain_version ==
LIBXL_STUBDOMAIN_VERSION_LINUX)
+ drive = libxl__sprintf
+ (gc,
"file=%s,if=ide,index=%d,media=disk,cache=writeback,format=%s",
+ "/dev/xvda", disk, "host_device");
+ else
+ drive = libxl__sprintf
+ (gc,
"file=%s,if=ide,index=%d,media=disk,cache=writeback,format=%s",
+ disks[i].pdev_path, disk, format);
else
continue; /* Do not emulate this disk */
}
@@ -733,7 +748,7 @@ static int
libxl__vfb_and_vkb_from_hvm_guest_config(libxl__gc *gc,
static int libxl__write_stub_dmargs(libxl__gc *gc,
int dm_domid, int guest_domid,
- char **args)
+ char **args, bool linux_stubdom)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
int i;
@@ -761,10 +776,28 @@ static int libxl__write_stub_dmargs(libxl__gc *gc,
i = 1;
dmargs[0] = '\0';
while (args[i] != NULL) {
- if (strcmp(args[i], "-sdl") && strcmp(args[i], "-M") &&
strcmp(args[i], "xenfv")) {
- strcat(dmargs, " ");
- strcat(dmargs, args[i]);
+ if (!linux_stubdom) {
+ if (!(strcmp(args[i], "-sdl") && strcmp(args[i], "-M") &&
strcmp(args[i], "xenfv"))) {
+ i++;
+ continue;
+ }
+ } else {
+ if (!strcmp(args[i], "-sdl")) {
+ i++;
+ continue;
+ }
+ if (!strcmp(args[i], "-incoming")
+ || !strcmp(args[i], "-vnc")
+ || !strcmp(args[i], "-vga")) {
+ i += 2;
+ continue;
+ }
+ if (!strcmp(args[i], "-serial")) {
+ args[i+1] = "/dev/hvc1";
+ }
}
+ strcat(dmargs, " ");
+ strcat(dmargs, args[i]);
i++;
}
path = libxl__sprintf(gc, "%s/image/dmargs", vm_path);
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |