mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
xenconfig: add support for type="pvh"
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@invisiblethingslab.com> Reviewed-by: Jim Fehlig <jfehlig@suse.com>
This commit is contained in:
parent
494fa1fd1b
commit
6262ea7148
@ -1090,7 +1090,7 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
|
||||
{
|
||||
virCapsDomainDataPtr capsdata = NULL;
|
||||
VIR_AUTOFREE(char *) str = NULL;
|
||||
int hvm = 0, ret = -1;
|
||||
int ret = -1;
|
||||
|
||||
if (xenConfigCopyString(conf, "name", &def->name) < 0)
|
||||
goto out;
|
||||
@ -1098,11 +1098,15 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
|
||||
if (xenConfigGetUUID(conf, "uuid", def->uuid) < 0)
|
||||
goto out;
|
||||
|
||||
def->os.type = VIR_DOMAIN_OSTYPE_XEN;
|
||||
|
||||
if (xenConfigGetString(conf, "type", &str, NULL) == 0 && str) {
|
||||
if (STREQ(str, "pv")) {
|
||||
hvm = 0;
|
||||
def->os.type = VIR_DOMAIN_OSTYPE_XEN;
|
||||
} else if (STREQ(str, "pvh")) {
|
||||
def->os.type = VIR_DOMAIN_OSTYPE_XENPVH;
|
||||
} else if (STREQ(str, "hvm")) {
|
||||
hvm = 1;
|
||||
def->os.type = VIR_DOMAIN_OSTYPE_HVM;
|
||||
} else {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("type %s is not supported"), str);
|
||||
@ -1110,11 +1114,10 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
|
||||
}
|
||||
} else {
|
||||
if ((xenConfigGetString(conf, "builder", &str, "linux") == 0) &&
|
||||
STREQ(str, "hvm"))
|
||||
hvm = 1;
|
||||
STREQ(str, "hvm")) {
|
||||
def->os.type = VIR_DOMAIN_OSTYPE_HVM;
|
||||
}
|
||||
}
|
||||
|
||||
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)))
|
||||
|
@ -1287,6 +1287,11 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def)
|
||||
|
||||
/* XXX floppy disks */
|
||||
} else {
|
||||
if (def->os.type == VIR_DOMAIN_OSTYPE_XENPVH) {
|
||||
if (xenConfigSetString(conf, "type", "pvh") < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (def->os.bootloader &&
|
||||
xenConfigSetString(conf, "bootloader", def->os.bootloader) < 0)
|
||||
return -1;
|
||||
|
@ -17,7 +17,10 @@ testXLInitCaps(void)
|
||||
"xenfv"
|
||||
};
|
||||
static const char *const xen_machines[] = {
|
||||
"xenpv"
|
||||
"xenpv",
|
||||
};
|
||||
static const char *const pvh_machines[] = {
|
||||
"xenpvh",
|
||||
};
|
||||
|
||||
if ((caps = virCapabilitiesNew(virArchFromHost(),
|
||||
@ -51,6 +54,21 @@ testXLInitCaps(void)
|
||||
goto cleanup;
|
||||
machines = NULL;
|
||||
|
||||
if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_XEN, NULL,
|
||||
NULL, 0, NULL) == NULL)
|
||||
goto cleanup;
|
||||
nmachines = ARRAY_CARDINALITY(pvh_machines);
|
||||
if ((machines = virCapabilitiesAllocMachines(pvh_machines, nmachines)) == NULL)
|
||||
goto cleanup;
|
||||
|
||||
if ((guest = virCapabilitiesAddGuest(caps, VIR_DOMAIN_OSTYPE_XENPVH,
|
||||
VIR_ARCH_X86_64,
|
||||
"/usr/lib/xen/bin/qemu-system-i386",
|
||||
NULL,
|
||||
nmachines, machines)) == NULL)
|
||||
goto cleanup;
|
||||
machines = NULL;
|
||||
|
||||
if (virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_XEN, NULL,
|
||||
NULL, 0, NULL) == NULL)
|
||||
goto cleanup;
|
||||
|
13
tests/xlconfigdata/test-pvh-type.cfg
Normal file
13
tests/xlconfigdata/test-pvh-type.cfg
Normal file
@ -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"
|
25
tests/xlconfigdata/test-pvh-type.xml
Normal file
25
tests/xlconfigdata/test-pvh-type.xml
Normal file
@ -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'>xenpvh</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>
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user