mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
bhyve: fix SATA address allocation
As bhyve for a long time didn't have a notion of the explicit SATA
controller and created a controller for each drive, the bhyve driver
in libvirt acted in a similar way and didn't care about the SATA
controllers and assigned PCI addresses to drives directly, as
the generated command will look like this anyway:
2:0,ahci-hd,somedisk.img
This no longer makes sense because:
1. After commit c07d1c1c4f
it's not possible to assign
PCI addresses to disks
2. Bhyve now supports multiple disk drives for a controller,
so it's going away from 1:1 controller:disk mapping, so
the controller object starts to make more sense now
So, this patch does the following:
- Assign PCI address to SATA controllers (previously we didn't do this)
- Assign disk addresses instead of PCI addresses for disks. Now, when
building a bhyve command, we take PCI address not from the disk
itself but from its controller
- Assign addresses at XML parsing time using the
assignAddressesCallback. This is done mainly for being able to
verify address allocation via xml2xml tests
- Adjust existing bhyvexml2{xml,argv} tests to chase the new
address allocation
This patch is largely based on work of Fabian Freyer.
This commit is contained in:
parent
13a050b2c3
commit
803966c76d
@ -14,6 +14,7 @@ src/access/viraccessdriverpolkit.c
|
||||
src/access/viraccessmanager.c
|
||||
src/bhyve/bhyve_command.c
|
||||
src/bhyve/bhyve_device.c
|
||||
src/bhyve/bhyve_domain.c
|
||||
src/bhyve/bhyve_driver.c
|
||||
src/bhyve/bhyve_monitor.c
|
||||
src/bhyve/bhyve_parse_command.c
|
||||
|
@ -148,40 +148,97 @@ bhyveBuildConsoleArgStr(const virDomainDef *def, virCommandPtr cmd)
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
virDomainDiskDefPtr disk,
|
||||
virCommandPtr cmd)
|
||||
bhyveBuildAHCIControllerArgStr(const virDomainDef *def,
|
||||
virDomainControllerDefPtr controller,
|
||||
virConnectPtr conn,
|
||||
virCommandPtr cmd)
|
||||
{
|
||||
const char *bus_type;
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
virBuffer device = VIR_BUFFER_INITIALIZER;
|
||||
const char *disk_source;
|
||||
size_t i;
|
||||
int ret = -1;
|
||||
|
||||
for (i = 0; i < def->ndisks; i++) {
|
||||
virDomainDiskDefPtr disk = def->disks[i];
|
||||
if (disk->bus != VIR_DOMAIN_DISK_BUS_SATA)
|
||||
continue;
|
||||
|
||||
if (disk->info.addr.drive.controller != controller->idx)
|
||||
continue;
|
||||
|
||||
VIR_DEBUG("disk %zu controller %d", i, controller->idx);
|
||||
|
||||
if ((virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_FILE) &&
|
||||
(virDomainDiskGetType(disk) != VIR_STORAGE_TYPE_VOLUME)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk type"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
|
||||
goto error;
|
||||
|
||||
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"));
|
||||
goto error;
|
||||
}
|
||||
|
||||
switch (disk->bus) {
|
||||
case VIR_DOMAIN_DISK_BUS_SATA:
|
||||
switch (disk->device) {
|
||||
case VIR_DOMAIN_DISK_DEVICE_DISK:
|
||||
bus_type = "ahci-hd";
|
||||
if ((bhyveDriverGetCaps(conn) & BHYVE_CAP_AHCI32SLOT))
|
||||
virBufferAsprintf(&device, ",hd:%s", disk_source);
|
||||
else
|
||||
virBufferAsprintf(&device, "-hd,%s", disk_source);
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_DEVICE_CDROM:
|
||||
bus_type = "ahci-cd";
|
||||
if ((bhyveDriverGetCaps(conn) & BHYVE_CAP_AHCI32SLOT))
|
||||
virBufferAsprintf(&device, ",cd:%s", disk_source);
|
||||
else
|
||||
virBufferAsprintf(&device, "-cd,%s", disk_source);
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
return -1;
|
||||
goto error;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_BUS_VIRTIO:
|
||||
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:
|
||||
virBufferAddBuffer(&buf, &device);
|
||||
virBufferFreeAndReset(&device);
|
||||
}
|
||||
|
||||
if (virBufferCheckError(&buf) < 0)
|
||||
goto error;
|
||||
|
||||
virCommandAddArg(cmd, "-s");
|
||||
virCommandAddArgFormat(cmd, "%d:0,ahci%s",
|
||||
controller->info.addr.pci.slot,
|
||||
virBufferCurrentContent(&buf));
|
||||
|
||||
ret = 0;
|
||||
error:
|
||||
virBufferFreeAndReset(&buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveBuildVirtIODiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
virDomainDiskDefPtr disk,
|
||||
virConnectPtr conn,
|
||||
virCommandPtr cmd)
|
||||
{
|
||||
const char *disk_source;
|
||||
|
||||
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
|
||||
return -1;
|
||||
|
||||
if (disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk bus type"));
|
||||
_("unsupported disk device"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -194,17 +251,9 @@ bhyveBuildDiskArgStr(const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
|
||||
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,
|
||||
virCommandAddArgFormat(cmd, "%d:0,virtio-blk,%s",
|
||||
disk->info.addr.pci.slot,
|
||||
disk_source);
|
||||
|
||||
return 0;
|
||||
@ -278,6 +327,22 @@ virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
|
||||
|
||||
virCommandAddArgList(cmd, "-s", "0:0,hostbridge", NULL);
|
||||
/* Devices */
|
||||
for (i = 0; i < def->ncontrollers; i++) {
|
||||
virDomainControllerDefPtr controller = def->controllers[i];
|
||||
switch (controller->type) {
|
||||
case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
|
||||
if (controller->model != VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
"%s", _("unsupported PCI controller model: only PCI root supported"));
|
||||
goto error;
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
|
||||
if (bhyveBuildAHCIControllerArgStr(def, controller, conn, cmd) < 0)
|
||||
goto error;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
virDomainNetDefPtr net = def->nets[i];
|
||||
if (bhyveBuildNetArgStr(def, net, cmd, dryRun) < 0)
|
||||
@ -286,11 +351,19 @@ virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
|
||||
for (i = 0; i < def->ndisks; i++) {
|
||||
virDomainDiskDefPtr disk = def->disks[i];
|
||||
|
||||
if (virStorageTranslateDiskSourcePool(conn, disk) < 0)
|
||||
goto error;
|
||||
|
||||
if (bhyveBuildDiskArgStr(def, disk, cmd) < 0)
|
||||
switch (disk->bus) {
|
||||
case VIR_DOMAIN_DISK_BUS_SATA:
|
||||
/* Handled by bhyveBuildAHCIControllerArgStr() */
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_BUS_VIRTIO:
|
||||
if (bhyveBuildVirtIODiskArgStr(def, disk, conn, cmd) < 0)
|
||||
goto error;
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("unsupported disk device"));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
if (bhyveBuildConsoleArgStr(def, cmd) < 0)
|
||||
goto error;
|
||||
|
@ -39,6 +39,9 @@ bhyveCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED,
|
||||
void *opaque)
|
||||
{
|
||||
int ret = -1;
|
||||
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE)
|
||||
return 0;
|
||||
|
||||
virDomainPCIAddressSetPtr addrs = opaque;
|
||||
virPCIDeviceAddressPtr addr = &info->addr.pci;
|
||||
|
||||
@ -101,28 +104,9 @@ bhyveAssignDevicePCISlots(virDomainDefPtr def,
|
||||
goto error;
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
if (!virDeviceInfoPCIAddressWanted(&def->nets[i]->info))
|
||||
continue;
|
||||
if (virDomainPCIAddressReserveNextAddr(addrs, &def->nets[i]->info,
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE,
|
||||
-1) < 0) {
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < def->ndisks; i++) {
|
||||
if (def->disks[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI &&
|
||||
!virPCIDeviceAddressIsEmpty(&def->disks[i]->info.addr.pci))
|
||||
continue;
|
||||
if (virDomainPCIAddressReserveNextAddr(addrs, &def->disks[i]->info,
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE,
|
||||
-1) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
for (i = 0; i < def->ncontrollers; i++) {
|
||||
if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
|
||||
if ((def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) ||
|
||||
(def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA)) {
|
||||
if (def->controllers[i]->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT ||
|
||||
!virDeviceInfoPCIAddressWanted(&def->controllers[i]->info))
|
||||
continue;
|
||||
@ -133,7 +117,16 @@ bhyveAssignDevicePCISlots(virDomainDefPtr def,
|
||||
-1) < 0)
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
if (!virDeviceInfoPCIAddressWanted(&def->nets[i]->info))
|
||||
continue;
|
||||
if (virDomainPCIAddressReserveNextAddr(addrs,
|
||||
&def->nets[i]->info,
|
||||
VIR_PCI_CONNECT_TYPE_PCI_DEVICE,
|
||||
-1) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include "bhyve_device.h"
|
||||
#include "bhyve_domain.h"
|
||||
#include "bhyve_capabilities.h"
|
||||
#include "viralloc.h"
|
||||
#include "virlog.h"
|
||||
|
||||
@ -73,13 +74,67 @@ bhyveDomainDefPostParse(virDomainDefPtr def,
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveDomainDeviceDefPostParse(virDomainDeviceDefPtr dev ATTRIBUTE_UNUSED,
|
||||
const virDomainDef *def ATTRIBUTE_UNUSED,
|
||||
bhyveDomainDiskDefAssignAddress(bhyveConnPtr driver,
|
||||
virDomainDiskDefPtr def,
|
||||
const virDomainDef *vmdef ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int idx = virDiskNameToIndex(def->dst);
|
||||
|
||||
if (idx < 0) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Unknown disk name '%s' and no address specified"),
|
||||
def->dst);
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (def->bus) {
|
||||
case VIR_DOMAIN_DISK_BUS_SATA:
|
||||
def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE;
|
||||
|
||||
if ((driver->bhyvecaps & BHYVE_CAP_AHCI32SLOT) != 0) {
|
||||
def->info.addr.drive.controller = idx / 32;
|
||||
def->info.addr.drive.unit = idx % 32;
|
||||
} else {
|
||||
def->info.addr.drive.controller = idx;
|
||||
def->info.addr.drive.unit = 0;
|
||||
}
|
||||
|
||||
def->info.addr.drive.bus = 0;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
|
||||
const virDomainDef *def,
|
||||
virCapsPtr caps ATTRIBUTE_UNUSED,
|
||||
unsigned int parseFlags ATTRIBUTE_UNUSED,
|
||||
void *opaque,
|
||||
void *parseOpaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
bhyveConnPtr driver = opaque;
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||
virDomainDiskDefPtr disk = dev->data.disk;
|
||||
|
||||
if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
|
||||
bhyveDomainDiskDefAssignAddress(driver, disk, def) < 0)
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bhyveDomainDefAssignAddresses(virDomainDef *def,
|
||||
virCapsPtr caps ATTRIBUTE_UNUSED,
|
||||
unsigned int parseFlags ATTRIBUTE_UNUSED,
|
||||
void *opaque ATTRIBUTE_UNUSED,
|
||||
void *parseOpaque ATTRIBUTE_UNUSED)
|
||||
{
|
||||
if (bhyveDomainAssignAddresses(def, NULL) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -95,4 +150,5 @@ virBhyveDriverCreateXMLConf(bhyveConnPtr driver)
|
||||
virDomainDefParserConfig virBhyveDriverDomainDefParserConfig = {
|
||||
.devicesPostParseCallback = bhyveDomainDeviceDefPostParse,
|
||||
.domainPostParseCallback = bhyveDomainDefPostParse,
|
||||
.assignAddressesCallback = bhyveDomainDefAssignAddresses,
|
||||
};
|
||||
|
@ -7,5 +7,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:81:c4:b1 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:81:c4:b1 bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 bhyve
|
||||
|
@ -5,6 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:8d:10:e1 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 4:0,ahci-cd,/tmp/cdrom.iso bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:8d:10:e1 bhyve
|
||||
|
@ -5,6 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:92:68:0e \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 4:0,ahci-cd,/tmp/cdrom.iso bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:92:68:0e bhyve
|
||||
|
@ -5,6 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:7a:f5:a4 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 4:0,ahci-cd,/tmp/cdrom.iso bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img,cd:/tmp/cdrom.iso \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:7a:f5:a4 bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:11:bd:26 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:11:bd:26 bhyve
|
||||
|
@ -5,7 +5,7 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:b1:42:eb \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 1,lpc \
|
||||
-l com1,/dev/nmdm0A bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:35:99:c2 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:35:99:c2 bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:6f:6a:53 \
|
||||
-s 2:0,ahci-cd,/tmp/cdrom.iso bhyve
|
||||
-s 2:0,ahci,cd:/tmp/cdrom.iso \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:6f:6a:53 bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:e3:ec:9b \
|
||||
-s 2:0,ahci-cd,/tmp/cdrom.iso bhyve
|
||||
-s 2:0,ahci,cd:/tmp/cdrom.iso \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:e3:ec:9b bhyve
|
||||
|
@ -5,7 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:f4:6c:be \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd1.img \
|
||||
-s 4:0,ahci-hd,/tmp/freebsd2.img \
|
||||
-s 6:0,ahci-hd,/tmp/freebsd3.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd1.img,hd:/tmp/freebsd2.img,hd:/tmp/freebsd3.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:f4:6c:be bhyve
|
||||
|
@ -5,7 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:0e:d2:6f \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd1.img \
|
||||
-s 4:0,ahci-hd,/tmp/freebsd2.img \
|
||||
-s 6:0,ahci-hd,/tmp/freebsd3.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd1.img,hd:/tmp/freebsd2.img,hd:/tmp/freebsd3.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:0e:d2:6f bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:ee:f5:79 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:ee:f5:79 bhyve
|
||||
|
@ -4,5 +4,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:82:ca:a3 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:82:ca:a3 bhyve
|
||||
|
@ -5,5 +5,5 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:22:ee:11 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img bhyve
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:22:ee:11 bhyve
|
||||
|
@ -5,7 +5,7 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:a7:cd:5b \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 1,lpc \
|
||||
-l com1,/dev/nmdm0A bhyve
|
||||
|
@ -5,7 +5,7 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:f0:72:11 \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 1,lpc \
|
||||
-l com1,/dev/nmdm0A bhyve
|
||||
|
@ -5,7 +5,7 @@
|
||||
-H \
|
||||
-P \
|
||||
-s 0:0,hostbridge \
|
||||
-s 2:0,ahci,hd:/tmp/freebsd.img \
|
||||
-s 3:0,virtio-net,faketapdev,mac=52:54:00:4f:f3:5b \
|
||||
-s 2:0,ahci-hd,/tmp/freebsd.img \
|
||||
-s 1,lpc \
|
||||
-l com1,/dev/nmdm0A bhyve
|
||||
|
@ -155,7 +155,7 @@ mymain(void)
|
||||
DO_TEST_FULL(name, FLAG_EXPECT_PARSE_ERROR)
|
||||
|
||||
driver.grubcaps = BHYVE_GRUB_CAP_CONSDEV;
|
||||
driver.bhyvecaps = BHYVE_CAP_RTC_UTC;
|
||||
driver.bhyvecaps = BHYVE_CAP_RTC_UTC | BHYVE_CAP_AHCI32SLOT;
|
||||
|
||||
DO_TEST("base");
|
||||
DO_TEST("acpiapic");
|
||||
|
@ -24,7 +24,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:81:c4:b1'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:b9:94:02'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -27,7 +27,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='4' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:8d:10:e1'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -27,7 +27,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='4' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:92:68:0e'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:1e:63:25'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -27,7 +27,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='4' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:7a:f5:a4'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -28,7 +28,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='4' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:fe:97:82'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:11:bd:26'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:b1:42:eb'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -21,7 +21,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:35:99:c2'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -21,7 +21,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:6f:6a:53'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -21,7 +21,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:e3:ec:9b'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -33,7 +33,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='6' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:f4:6c:be'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -35,7 +35,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='6' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:0e:d2:6f'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:ee:f5:79'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:82:ca:a3'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:22:ee:11'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -24,11 +24,14 @@
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:ad:55:51'/>
|
||||
<source bridge='virbr0'/>
|
||||
<model type='virtio'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||
</interface>
|
||||
</devices>
|
||||
</domain>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:a7:cd:5b'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:f0:72:11'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -20,7 +20,9 @@
|
||||
<address type='drive' controller='0' bus='0' target='2' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='sata' index='0'/>
|
||||
<controller type='sata' index='0'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
</controller>
|
||||
<interface type='bridge'>
|
||||
<mac address='52:54:00:4f:f3:5b'/>
|
||||
<source bridge='virbr0'/>
|
||||
|
@ -64,6 +64,8 @@ mymain(void)
|
||||
# define DO_TEST_DIFFERENT(name) \
|
||||
DO_TEST_FULL(name, true)
|
||||
|
||||
driver.bhyvecaps = BHYVE_CAP_AHCI32SLOT;
|
||||
|
||||
DO_TEST_DIFFERENT("acpiapic");
|
||||
DO_TEST_DIFFERENT("base");
|
||||
DO_TEST_DIFFERENT("bhyveload-bootorder");
|
||||
|
Loading…
Reference in New Issue
Block a user