Handle PVH domain type in both directions (xen-xl->xml, xml->xen-xl).
And add a test for it.
Signed-off-by: Marek Marczykowski-Górecki <marmarek(a)invisiblethingslab.com>
---
Changes in v3:
- update for modified "libxl: add support for PVH"
---
src/xenconfig/xen_common.c | 11 +++++++++--
src/xenconfig/xen_xl.c | 5 +++++
tests/testutilsxen.c | 3 ++-
tests/xlconfigdata/test-pvh-type.cfg | 13 +++++++++++++
tests/xlconfigdata/test-pvh-type.xml | 25 +++++++++++++++++++++++++
tests/xlconfigtest.c | 1 +
6 files changed, 55 insertions(+), 3 deletions(-)
create mode 100644 tests/xlconfigdata/test-pvh-type.cfg
create mode 100644 tests/xlconfigdata/test-pvh-type.xml
diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c
index 6c27936..30b1c9f 100644
--- a/src/xenconfig/xen_common.c
+++ b/src/xenconfig/xen_common.c
@@ -1091,6 +1091,7 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def, virCapsPtr
caps)
virCapsDomainDataPtr capsdata = NULL;
VIR_AUTOFREE(char *) str = NULL;
int hvm = 0, ret = -1;
+ const char *machine = "xenpv";
if (xenConfigCopyString(conf, "name", &def->name) < 0)
goto out;
@@ -1101,8 +1102,12 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def,
virCapsPtr caps)
if (xenConfigGetString(conf, "type", &str, NULL) == 0 && str)
{
if (STREQ(str, "pv")) {
hvm = 0;
+ } else if (STREQ(str, "pvh")) {
+ hvm = 0;
+ machine = "xenpvh";
} else if (STREQ(str, "hvm")) {
hvm = 1;
+ machine = "xenfv";
} else {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("type %s is not supported"), str);
@@ -1110,14 +1115,16 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def,
virCapsPtr caps)
}
} else {
if ((xenConfigGetString(conf, "builder", &str, "linux")
== 0) &&
- STREQ(str, "hvm"))
+ STREQ(str, "hvm")) {
hvm = 1;
+ machine = "xenfv";
+ }
}
def->os.type = (hvm ? VIR_DOMAIN_OSTYPE_HVM : VIR_DOMAIN_OSTYPE_XEN);
if (!(capsdata = virCapabilitiesDomainDataLookup(caps, def->os.type,
- VIR_ARCH_NONE, def->virtType, NULL, NULL)))
+ VIR_ARCH_NONE, def->virtType, NULL, machine)))
goto out;
def->os.arch = capsdata->arch;
diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
index 7250e57..0df8f35 100644
--- a/src/xenconfig/xen_xl.c
+++ b/src/xenconfig/xen_xl.c
@@ -1287,6 +1287,11 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def)
/* XXX floppy disks */
} else {
+ if (STREQ(def->os.machine, "xenpvh")) {
+ if (xenConfigSetString(conf, "type", "pvh") < 0)
+ return -1;
+ }
+
if (def->os.bootloader &&
xenConfigSetString(conf, "bootloader", def->os.bootloader) <
0)
return -1;
diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c
index d34be72..c112912 100644
--- a/tests/testutilsxen.c
+++ b/tests/testutilsxen.c
@@ -17,7 +17,8 @@ testXLInitCaps(void)
"xenfv"
};
static const char *const xen_machines[] = {
- "xenpv"
+ "xenpv",
+ "xenpvh"
};
if ((caps = virCapabilitiesNew(virArchFromHost(),
diff --git a/tests/xlconfigdata/test-pvh-type.cfg b/tests/xlconfigdata/test-pvh-type.cfg
new file mode 100644
index 0000000..2493535
--- /dev/null
+++ b/tests/xlconfigdata/test-pvh-type.cfg
@@ -0,0 +1,13 @@
+name = "XenGuest2"
+uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
+maxmem = 579
+memory = 394
+vcpus = 1
+localtime = 0
+on_poweroff = "destroy"
+on_reboot = "restart"
+on_crash = "restart"
+type = "pvh"
+kernel = "/tmp/vmlinuz"
+ramdisk = "/tmp/initrd"
+cmdline = "root=/dev/xvda1 console=hvc0"
diff --git a/tests/xlconfigdata/test-pvh-type.xml b/tests/xlconfigdata/test-pvh-type.xml
new file mode 100644
index 0000000..7e3f182
--- /dev/null
+++ b/tests/xlconfigdata/test-pvh-type.xml
@@ -0,0 +1,25 @@
+<domain type='xen'>
+ <name>XenGuest2</name>
+ <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>592896</memory>
+ <currentMemory unit='KiB'>403456</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64' machine='xenpvh'>xen</type>
+ <kernel>/tmp/vmlinuz</kernel>
+ <initrd>/tmp/initrd</initrd>
+ <cmdline>root=/dev/xvda1 console=hvc0</cmdline>
+ </os>
+ <clock offset='utc' adjustment='reset'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>restart</on_crash>
+ <devices>
+ <console type='pty'>
+ <target type='xen' port='0'/>
+ </console>
+ <input type='mouse' bus='xen'/>
+ <input type='keyboard' bus='xen'/>
+ <memballoon model='xen'/>
+ </devices>
+</domain>
diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c
index 6e3267e..5159182 100644
--- a/tests/xlconfigtest.c
+++ b/tests/xlconfigtest.c
@@ -281,6 +281,7 @@ mymain(void)
DO_TEST("rbd-multihost-noauth");
DO_TEST_FORMAT("paravirt-type", false);
DO_TEST_FORMAT("fullvirt-type", false);
+ DO_TEST("pvh-type");
#ifdef LIBXL_HAVE_DEVICE_CHANNEL
DO_TEST("channel-pty");
--
git-series 0.9.1