mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
bhyve: cdrom support
Add support for CDROM devices for bhyve driver using bhyve(8)'s 'ahci-cd' device type. As bhyve currently does not support media insertion at runtime, disallow to start a domain with an empty source path for cdrom devices.
This commit is contained in:
parent
dd4791c00d
commit
d704e69858
@ -152,13 +152,31 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
virCommandPtr cmd)
|
||||
{
|
||||
const char *bus_type;
|
||||
const char *disk_source;
|
||||
|
||||
switch (disk->bus) {
|
||||
case VIR_DOMAIN_DISK_BUS_SATA:
|
||||
bus_type = "ahci-hd";
|
||||
switch (disk->device) {
|
||||
case VIR_DOMAIN_DISK_DEVICE_DISK:
|
||||
bus_type = "ahci-hd";
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_DEVICE_CDROM:
|
||||
bus_type = "ahci-cd";
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_BUS_VIRTIO:
|
||||
bus_type = "virtio-blk";
|
||||
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||
bus_type = "virtio-blk";
|
||||
} else {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
@ -166,22 +184,26 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk type"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
disk_source = virDomainDiskGetSource(disk);
|
||||
|
||||
if ((disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM) &&
|
||||
(disk_source == NULL)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("cdrom device without source path "
|
||||
"not supported"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
virCommandAddArg(cmd, "-s");
|
||||
virCommandAddArgFormat(cmd, "%d:0,%s,%s",
|
||||
disk->info.addr.pci.slot, bus_type,
|
||||
virDomainDiskGetSource(disk));
|
||||
disk_source);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -282,7 +304,8 @@ virBhyveProcessBuildLoadCmd(bhyveConnPtr driver ATTRIBUTE_UNUSED,
|
||||
|
||||
disk = def->disks[0];
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||
if ((disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) &&
|
||||
(disk->device != VIR_DOMAIN_DISK_DEVICE_CDROM)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
return NULL;
|
||||
|
3
tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.args
Normal file
3
tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.args
Normal file
@ -0,0 +1,3 @@
|
||||
/usr/sbin/bhyve -c 1 -m 214 -H -P -s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:00:00:00 \
|
||||
-s 2:0,ahci-cd,/tmp/cdrom.iso bhyve
|
22
tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml
Normal file
22
tests/bhyvexml2argvdata/bhyvexml2argv-disk-cdrom.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<domain type='bhyve'>
|
||||
<name>bhyve</name>
|
||||
<uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
|
||||
<memory>219136</memory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<disk type='file' device='cdrom'>
|
||||
<driver name='file' type='raw'/>
|
||||
<source file='/tmp/cdrom.iso'/>
|
||||
<target dev='hdc' bus='sata'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</disk>
|
||||
<interface type='bridge'>
|
||||
<model type='virtio'/>
|
||||
<source bridge="virbr0"/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</interface>
|
||||
</devices>
|
||||
</domain>
|
@ -104,6 +104,7 @@ mymain(void)
|
||||
|
||||
DO_TEST("base");
|
||||
DO_TEST("acpiapic");
|
||||
DO_TEST("disk-cdrom");
|
||||
DO_TEST("disk-virtio");
|
||||
DO_TEST("macaddr");
|
||||
DO_TEST("serial");
|
||||
|
Loading…
Reference in New Issue
Block a user