[PATCH 0/7] vmx: Add more controllers and parse PCI addresses
This is a prerequisite of the following issue: https://redhat.atlassian.net/browse/RHEL-147630 It's not fixing the issue per-se, so you'll not find any reference to the issue in commit messages. But my gut feeling says let's expose more controllers and their PCI addresses in the domain XML. Michal Prívozník (7): vmx: Add SCSI controllers vmx: Parse PCI address for SCSI controllers vmx: Add SATA controllers vmx: Parse PCI address for SATA controllers vmx: Add NVMe controllers vmx: Parse PCI address for NVMe controllers vmx: Parse PCI address for ethernet devices src/vmx/vmx.c | 173 ++++++++++++++------- tests/vmx2xmldata/esx-in-the-wild-10.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-11.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-12.xml | 9 +- tests/vmx2xmldata/esx-in-the-wild-13.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-14.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-15.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-16.xml | 11 +- tests/vmx2xmldata/esx-in-the-wild-17.xml | 9 +- tests/vmx2xmldata/esx-in-the-wild-5.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-6.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-7.xml | 5 +- tests/vmx2xmldata/esx-in-the-wild-8.xml | 18 ++- tests/vmx2xmldata/esx-in-the-wild-9.xml | 8 +- tests/vmx2xmldata/fusion-in-the-wild-1.xml | 6 +- tests/vmx2xmldata/gsx-in-the-wild-1.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-2.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-3.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-4.xml | 1 + 19 files changed, 206 insertions(+), 72 deletions(-) -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Currently, the VMX driver ignores SCSI controllers without disks plugged in (even though they are present in the .vmx file) and adds some "random" ones after SCSI disks are parsed. Well, those controllers from the file are visible to the guest so add those to the domain definition instead. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 51 +++++++++++------------- tests/vmx2xmldata/esx-in-the-wild-16.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-1.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-2.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-3.xml | 1 + tests/vmx2xmldata/gsx-in-the-wild-4.xml | 1 + 6 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 72ec1454aa..c438f2720c 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -584,8 +584,11 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, ); static int virVMXParseVNC(virConf *conf, virDomainGraphicsDef **def); -static int virVMXParseSCSIController(virConf *conf, int controller, bool *present, - int *virtualDev); +static int +virVMXParseSCSIController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present); static int virVMXParseSATAController(virConf *conf, int controller, bool *present); static int virVMXParseNVMEController(virConf *conf, int controller, bool *present); static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, @@ -1408,7 +1411,6 @@ virVMXParseConfig(virVMXContext *ctx, int bus; int port; bool present; - int scsi_virtualDev[4] = { -1, -1, -1, -1 }; int unit; bool hgfs_disabled = true; long long sharedFolder_maxNum = 0; @@ -1739,8 +1741,7 @@ virVMXParseConfig(virVMXContext *ctx, /* def:disks (scsi) */ for (controller = 0; controller < 4; ++controller) { - if (virVMXParseSCSIController(conf, controller, &present, - &scsi_virtualDev[controller]) < 0) { + if (virVMXParseSCSIController(def, conf, controller, &present) < 0) { goto cleanup; } @@ -1781,11 +1782,6 @@ virVMXParseConfig(virVMXContext *ctx, /* add all the SCSI controllers we've seen, up until the last one that is * currently used by a disk */ if (def->ndisks != 0) { - virDomainDeviceInfo *info = &def->disks[def->ndisks - 1]->info; - for (controller = 0; controller <= info->addr.drive.controller; controller++) { - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI, - controller, scsi_virtualDev[controller]); - } saved_ndisks = def->ndisks; } @@ -2142,30 +2138,28 @@ virVMXParseVNC(virConf *conf, virDomainGraphicsDef **def) static int -virVMXParseSCSIController(virConf *conf, int controller, bool *present, - int *virtualDev) +virVMXParseSCSIController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present) { int result = -1; char present_name[32]; char virtualDev_name[32]; char *virtualDev_string = NULL; char *tmp; + int virtualDev = -1; - if (virtualDev == NULL || *virtualDev != -1) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument")); - return -1; - } - - if (controller < 0 || controller > 3) { + if (controllerIdx < 0 || controllerIdx > 3) { virReportError(VIR_ERR_INTERNAL_ERROR, _("SCSI controller index %1$d out of [0..3] range"), - controller); + controllerIdx); return -1; } - g_snprintf(present_name, sizeof(present_name), "scsi%d.present", controller); + g_snprintf(present_name, sizeof(present_name), "scsi%d.present", controllerIdx); g_snprintf(virtualDev_name, sizeof(virtualDev_name), "scsi%d.virtualDev", - controller); + controllerIdx); if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) goto cleanup; @@ -2186,13 +2180,13 @@ virVMXParseSCSIController(virConf *conf, int controller, bool *present, for (; *tmp != '\0'; ++tmp) *tmp = g_ascii_tolower(*tmp); - *virtualDev = virVMXControllerModelSCSITypeFromString(virtualDev_string); + virtualDev = virVMXControllerModelSCSITypeFromString(virtualDev_string); - if (*virtualDev == -1 || - (*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC && - *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC && - *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068 && - *virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI)) { + if (virtualDev == -1 || + (virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC && + virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC && + virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068 && + virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Expecting VMX entry '%1$s' to be 'buslogic' or 'lsilogic' or 'lsisas1068' or 'pvscsi' but found '%2$s'"), virtualDev_name, virtualDev_string); @@ -2200,6 +2194,9 @@ virVMXParseSCSIController(virConf *conf, int controller, bool *present, } } + virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI, + controllerIdx, virtualDev); + result = 0; cleanup: diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index ab8497ba2d..77c4a10c1c 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -26,6 +26,7 @@ <target dev='nvme0n1' bus='nvme'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> + <controller type='scsi' index='0' model='vmpvscsi'/> <controller type='nvme' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> diff --git a/tests/vmx2xmldata/gsx-in-the-wild-1.xml b/tests/vmx2xmldata/gsx-in-the-wild-1.xml index 4618e574a9..c314d1e4f8 100644 --- a/tests/vmx2xmldata/gsx-in-the-wild-1.xml +++ b/tests/vmx2xmldata/gsx-in-the-wild-1.xml @@ -19,6 +19,7 @@ <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> + <controller type='scsi' index='0' model='lsilogic'/> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:d6:2b:d3' type='generated'/> diff --git a/tests/vmx2xmldata/gsx-in-the-wild-2.xml b/tests/vmx2xmldata/gsx-in-the-wild-2.xml index 8841bc5fdd..fbcbf7ed06 100644 --- a/tests/vmx2xmldata/gsx-in-the-wild-2.xml +++ b/tests/vmx2xmldata/gsx-in-the-wild-2.xml @@ -19,6 +19,7 @@ <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> + <controller type='scsi' index='0' model='lsilogic'/> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:d6:cb:a4' type='generated'/> diff --git a/tests/vmx2xmldata/gsx-in-the-wild-3.xml b/tests/vmx2xmldata/gsx-in-the-wild-3.xml index 181036a126..834731f7df 100644 --- a/tests/vmx2xmldata/gsx-in-the-wild-3.xml +++ b/tests/vmx2xmldata/gsx-in-the-wild-3.xml @@ -19,6 +19,7 @@ <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> + <controller type='scsi' index='0' model='lsilogic'/> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:c4:be:5a' type='generated'/> diff --git a/tests/vmx2xmldata/gsx-in-the-wild-4.xml b/tests/vmx2xmldata/gsx-in-the-wild-4.xml index f66afe35bd..f91d389aa8 100644 --- a/tests/vmx2xmldata/gsx-in-the-wild-4.xml +++ b/tests/vmx2xmldata/gsx-in-the-wild-4.xml @@ -19,6 +19,7 @@ <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> + <controller type='scsi' index='0' model='lsilogic'/> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:c5:e3:5d' type='generated'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> The VMX file also contains information on PCI topology. At least for some devices. They have the .pciSlotNumber attribute which is a number that encodes their PCI address. It's documented here [1]. The algorithm described there also offers a way to calculate PCI topology with bridges and everything. Let's save that for future work. For now, just parse and report PCI address of SCSI controllers. NB: at this point it is unclear how the algorithm/address encoding changes wrt 'virtualHW.version'. But we will cross that bridge when we get there. 1: https://knowledge.broadcom.com/external/article/311606/mapping-pci-slot-numb... Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 40 ++++++++++++++++++++-- tests/vmx2xmldata/esx-in-the-wild-11.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-12.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-13.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-14.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-16.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-17.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-5.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-6.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-7.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-8.xml | 4 ++- tests/vmx2xmldata/esx-in-the-wild-9.xml | 4 ++- tests/vmx2xmldata/fusion-in-the-wild-1.xml | 4 ++- 13 files changed, 73 insertions(+), 15 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index c438f2720c..92b55307de 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -950,6 +950,34 @@ virVMXGetConfigBoolean(virConf *conf, const char *name, bool *boolean_, } +static int +virVMXPCISlotNumber(virConf *conf, + const char *name, + virDomainDeviceInfo *info) +{ + long long slotNumber = -1; + + if (virVMXGetConfigLong(conf, name, &slotNumber, -1, true) < 0) + return -1; + + if (slotNumber == -1) { + /* missing */ + return 0; + } + + /* The slot number encodes PCI address as FFF.BBBBB.DDDDD, for instance: + * 1216 = 0x4c0 = 001.00110.00000b + * which gives bus = 6, slot = 0, function = 1. + */ + info->type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI; + info->addr.pci.domain = 0; + info->addr.pci.bus = (slotNumber >> 5) & 0x1f; + info->addr.pci.slot = slotNumber & 0x1f; + info->addr.pci.function = (slotNumber >> 10) & 0x7; + + return 0; +} + static int virVMXSCSIDiskNameToControllerAndUnit(const char *name, int *controller, int *unit) @@ -2143,12 +2171,14 @@ virVMXParseSCSIController(virDomainDef *def, int controllerIdx, bool *present) { + virDomainControllerDef *controllerDef = NULL; int result = -1; char present_name[32]; char virtualDev_name[32]; char *virtualDev_string = NULL; char *tmp; int virtualDev = -1; + g_autofree char *pciSlotNumberName = NULL; if (controllerIdx < 0 || controllerIdx > 3) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -2194,11 +2224,15 @@ virVMXParseSCSIController(virDomainDef *def, } } - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI, - controllerIdx, virtualDev); + controllerDef = virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SCSI, + controllerIdx, virtualDev); + + pciSlotNumberName = g_strdup_printf("scsi%d.pciSlotNumber", controllerIdx); + + if (virVMXPCISlotNumber(conf, pciSlotNumberName, &controllerDef->info) < 0) + goto cleanup; result = 0; - cleanup: VIR_FREE(virtualDev_string); diff --git a/tests/vmx2xmldata/esx-in-the-wild-11.xml b/tests/vmx2xmldata/esx-in-the-wild-11.xml index ded63c3345..e39a525de7 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-11.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-11.xml @@ -32,7 +32,9 @@ <target dev='sdbm' bus='scsi'/> <address type='drive' controller='1' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <controller type='scsi' index='1' model='vmpvscsi'/> <interface type='bridge'> <mac address='00:50:56:ac:3e:a1' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/esx-in-the-wild-12.xml index 4836cbd03d..08a4b5fada 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-12.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -31,7 +31,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> <controller type='sata' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:cf:2f' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-13.xml b/tests/vmx2xmldata/esx-in-the-wild-13.xml index 604fe99f5c..f38dc063f1 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-13.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-13.xml @@ -36,7 +36,9 @@ package:20.6.2 <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='lsilogic'/> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> + </controller> <interface type='bridge'> <mac address='fa:16:3e:bb:2c:4a' type='static'/> <source bridge='Test'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-14.xml b/tests/vmx2xmldata/esx-in-the-wild-14.xml index 31ada6eb5f..a8061b14c6 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-14.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-14.xml @@ -25,7 +25,9 @@ <target dev='sdb' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <interface type='null'> <mac address='00:00:00:00:00:00' type='static'/> <model type='vmxnet3'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index 77c4a10c1c..2ff3a74d5f 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -26,7 +26,9 @@ <target dev='nvme0n1' bus='nvme'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> <controller type='nvme' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-17.xml b/tests/vmx2xmldata/esx-in-the-wild-17.xml index 0603adfd35..04776efcea 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-17.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-17.xml @@ -34,7 +34,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='lsisas1068'/> + <controller type='scsi' index='0' model='lsisas1068'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <controller type='sata' index='0'/> <interface type='bridge'> <mac address='00:50:56:a5:b8:68' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-5.xml b/tests/vmx2xmldata/esx-in-the-wild-5.xml index fee496aa6a..fe3d81db63 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-5.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-5.xml @@ -32,7 +32,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='lsilogic'/> + <controller type='scsi' index='0' model='lsilogic'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> + </controller> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:50:56:be:00:15' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-6.xml b/tests/vmx2xmldata/esx-in-the-wild-6.xml index ab3b1fa7a6..2682679796 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-6.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-6.xml @@ -25,7 +25,9 @@ <readonly/> <address type='drive' controller='0' bus='1' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:2c:3a:fc' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-7.xml b/tests/vmx2xmldata/esx-in-the-wild-7.xml index daaac5e92d..4cdf338640 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-7.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-7.xml @@ -25,7 +25,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:9f:08:51' type='generated'/> <source bridge='VM Network'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/esx-in-the-wild-8.xml index 3472ce14ef..5e92157c9d 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-8.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml @@ -42,7 +42,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='vmpvscsi'/> + <controller type='scsi' index='0' model='vmpvscsi'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <controller type='sata' index='0'/> <interface type='bridge'> <mac address='00:1a:4a:16:01:55' type='static'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml index 57a376209b..7aff055ed3 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-9.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml @@ -26,7 +26,9 @@ <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='lsisas1068'/> + <controller type='scsi' index='0' model='lsisas1068'> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:80:b3:81' type='generated'/> <source bridge='VM Network'/> diff --git a/tests/vmx2xmldata/fusion-in-the-wild-1.xml b/tests/vmx2xmldata/fusion-in-the-wild-1.xml index a39bcbb2cd..2c29f65d77 100644 --- a/tests/vmx2xmldata/fusion-in-the-wild-1.xml +++ b/tests/vmx2xmldata/fusion-in-the-wild-1.xml @@ -24,7 +24,9 @@ <readonly/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='scsi' index='0' model='buslogic'/> + <controller type='scsi' index='0' model='buslogic'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> + </controller> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:0c:29:3b:64:ea' type='generated'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Currently, the VMX driver ignores SATA controllers without disks plugged in (even though they are present in the .vmx file) and adds some "random" ones after SATA disks are parsed. Well, those controllers from the file are visible to the guest so add those to the domain definition instead. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 40 +++++++++++------------- tests/vmx2xmldata/esx-in-the-wild-16.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-9.xml | 1 + 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 92b55307de..bc4c69ad6a 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -589,7 +589,11 @@ virVMXParseSCSIController(virDomainDef *def, virConf *conf, int controllerIdx, bool *present); -static int virVMXParseSATAController(virConf *conf, int controller, bool *present); +static int +virVMXParseSATAController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present); static int virVMXParseNVMEController(virConf *conf, int controller, bool *present); static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, virConf *conf, int device, int busType, @@ -1447,7 +1451,6 @@ virVMXParseConfig(virVMXContext *ctx, virCPUDef *cpu = NULL; char *firmware = NULL; g_autofree char *nvram = NULL; - size_t saved_ndisks = 0; if (ctx->parseFileName == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -1807,15 +1810,9 @@ virVMXParseConfig(virVMXContext *ctx, } } - /* add all the SCSI controllers we've seen, up until the last one that is - * currently used by a disk */ - if (def->ndisks != 0) { - saved_ndisks = def->ndisks; - } - /* def:disks (sata) */ for (controller = 0; controller < 4; ++controller) { - if (virVMXParseSATAController(conf, controller, &present) < 0) { + if (virVMXParseSATAController(def, conf, controller, &present) < 0) { goto cleanup; } @@ -1845,14 +1842,6 @@ virVMXParseConfig(virVMXContext *ctx, } } - /* add all the SATA controllers we've seen, up until the last one that is - * currently used by a disk */ - if (def->ndisks - saved_ndisks != 0) { - virDomainDeviceInfo *info = &def->disks[def->ndisks - 1]->info; - for (controller = 0; controller <= info->addr.drive.controller; controller++) - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, controller, -1); - } - /* def:disks (ide) */ for (bus = 0; bus < 2; ++bus) { for (unit = 0; unit < 2; ++unit) { @@ -2242,22 +2231,31 @@ virVMXParseSCSIController(virDomainDef *def, static int -virVMXParseSATAController(virConf *conf, int controller, bool *present) +virVMXParseSATAController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present) { char present_name[32]; - if (controller < 0 || controller > 3) { + if (controllerIdx < 0 || controllerIdx > 3) { virReportError(VIR_ERR_INTERNAL_ERROR, _("SATA controller index %1$d out of [0..3] range"), - controller); + controllerIdx); return -1; } - g_snprintf(present_name, sizeof(present_name), "sata%d.present", controller); + g_snprintf(present_name, sizeof(present_name), "sata%d.present", controllerIdx); if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) return -1; + if (!*present) + return 0; + + virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, + controllerIdx, -1); + return 0; } diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index 2ff3a74d5f..c0f430e617 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -29,6 +29,7 @@ <controller type='scsi' index='0' model='vmpvscsi'> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </controller> + <controller type='sata' index='0'/> <controller type='nvme' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml index 7aff055ed3..a1a66bef5f 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-9.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml @@ -29,6 +29,7 @@ <controller type='scsi' index='0' model='lsisas1068'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </controller> + <controller type='sata' index='0'/> <interface type='bridge'> <mac address='00:50:56:80:b3:81' type='generated'/> <source bridge='VM Network'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Similarly to SCSI controllers (see one previous commits), parse and report PCI address for SATA controllers. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 11 +++++++++-- tests/vmx2xmldata/esx-in-the-wild-10.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-12.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-16.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-17.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-8.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-9.xml | 4 +++- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index bc4c69ad6a..25bfddbf68 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2236,6 +2236,8 @@ virVMXParseSATAController(virDomainDef *def, int controllerIdx, bool *present) { + virDomainControllerDef *controllerDef = NULL; + g_autofree char *pciSlotNumberName = NULL; char present_name[32]; if (controllerIdx < 0 || controllerIdx > 3) { @@ -2253,8 +2255,13 @@ virVMXParseSATAController(virDomainDef *def, if (!*present) return 0; - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, - controllerIdx, -1); + controllerDef = virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_SATA, + controllerIdx, -1); + + pciSlotNumberName = g_strdup_printf("sata%d.pciSlotNumber", controllerIdx); + + if (virVMXPCISlotNumber(conf, pciSlotNumberName, &controllerDef->info) < 0) + return -1; return 0; } diff --git a/tests/vmx2xmldata/esx-in-the-wild-10.xml b/tests/vmx2xmldata/esx-in-the-wild-10.xml index 166240f96b..2ba801169e 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-10.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-10.xml @@ -26,7 +26,9 @@ <target dev='sda' bus='sata'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:9a:9c:7a' type='generated'/> <source bridge='VM Network'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/esx-in-the-wild-12.xml index 08a4b5fada..907a000391 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-12.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -34,7 +34,9 @@ <controller type='scsi' index='0' model='vmpvscsi'> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </controller> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:a0:cf:2f' type='generated'/> <source bridge='VM Network'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index c0f430e617..5d3b2163ed 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -29,7 +29,9 @@ <controller type='scsi' index='0' model='vmpvscsi'> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </controller> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/> + </controller> <controller type='nvme' index='0'/> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-17.xml b/tests/vmx2xmldata/esx-in-the-wild-17.xml index 04776efcea..fe15990118 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-17.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-17.xml @@ -37,7 +37,9 @@ <controller type='scsi' index='0' model='lsisas1068'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </controller> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:a5:b8:68' type='generated'/> <source bridge='Mgmt Network'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/esx-in-the-wild-8.xml index 5e92157c9d..63bdd82c6b 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-8.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml @@ -45,7 +45,9 @@ <controller type='scsi' index='0' model='vmpvscsi'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </controller> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:1a:4a:16:01:55' type='static'/> <source bridge='VM Network'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml index a1a66bef5f..8b7f442921 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-9.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml @@ -29,7 +29,9 @@ <controller type='scsi' index='0' model='lsisas1068'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </controller> - <controller type='sata' index='0'/> + <controller type='sata' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:80:b3:81' type='generated'/> <source bridge='VM Network'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Currently, the VMX driver ignores SCSI controllers without disks plugged in (even though they are present in the .vmx file) and relies on post parse callback to fill them in (virDomainDefAddImplicitControllers()). Well, those controllers from the file are visible to the guest so add those to the domain definition instead. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 24 ++++++++++++++++++------ tests/vmx2xmldata/esx-in-the-wild-15.xml | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 25bfddbf68..8cb04f8490 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -594,7 +594,11 @@ virVMXParseSATAController(virDomainDef *def, virConf *conf, int controllerIdx, bool *present); -static int virVMXParseNVMEController(virConf *conf, int controller, bool *present); +static int +virVMXParseNVMEController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present); static int virVMXParseDisk(virVMXContext *ctx, virDomainXMLOption *xmlopt, virConf *conf, int device, int busType, int controllerOrBus, int unit, virDomainDiskDef **def, @@ -1885,7 +1889,7 @@ virVMXParseConfig(virVMXContext *ctx, /* def:disks (nvme) */ for (controller = 0; controller < 4; ++controller) { - if (virVMXParseNVMEController(conf, controller, &present) < 0) + if (virVMXParseNVMEController(def, conf, controller, &present) < 0) goto cleanup; if (!present) @@ -2268,22 +2272,30 @@ virVMXParseSATAController(virDomainDef *def, static int -virVMXParseNVMEController(virConf *conf, int controller, bool *present) +virVMXParseNVMEController(virDomainDef *def, + virConf *conf, + int controllerIdx, + bool *present) { char present_name[32]; - if (controller < 0 || controller > 3) { + if (controllerIdx < 0 || controllerIdx > 3) { virReportError(VIR_ERR_INTERNAL_ERROR, _("NVMe controller index %1$d out of [0..3] range"), - controller); + controllerIdx); return -1; } - g_snprintf(present_name, sizeof(present_name), "nvme%d.present", controller); + g_snprintf(present_name, sizeof(present_name), "nvme%d.present", controllerIdx); if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) return -1; + if (!*present) + return 0; + + virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_NVME, + controllerIdx, -1); return 0; } diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.xml b/tests/vmx2xmldata/esx-in-the-wild-15.xml index fb32a5aa59..cc4a9d1631 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-15.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-15.xml @@ -33,8 +33,8 @@ <target dev='nvme0n2' bus='nvme'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> - <controller type='ide' index='0'/> <controller type='nvme' index='0'/> + <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:50:56:83:c9:0c' type='generated'/> <source bridge='inside'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Similarly to SCSI and SATA controllers (see previous commits), parse and report PCI address for NVMe controllers. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 12 ++++++++++-- tests/vmx2xmldata/esx-in-the-wild-15.xml | 4 +++- tests/vmx2xmldata/esx-in-the-wild-16.xml | 4 +++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 8cb04f8490..0fee7c0e7e 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2277,6 +2277,8 @@ virVMXParseNVMEController(virDomainDef *def, int controllerIdx, bool *present) { + virDomainControllerDef *controllerDef = NULL; + g_autofree char *pciSlotNumberName = NULL; char present_name[32]; if (controllerIdx < 0 || controllerIdx > 3) { @@ -2294,8 +2296,14 @@ virVMXParseNVMEController(virDomainDef *def, if (!*present) return 0; - virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_NVME, - controllerIdx, -1); + controllerDef = virDomainDefAddController(def, VIR_DOMAIN_CONTROLLER_TYPE_NVME, + controllerIdx, -1); + + pciSlotNumberName = g_strdup_printf("nvme%d.pciSlotNumber", controllerIdx); + + if (virVMXPCISlotNumber(conf, pciSlotNumberName, &controllerDef->info) < 0) + return -1; + return 0; } diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.xml b/tests/vmx2xmldata/esx-in-the-wild-15.xml index cc4a9d1631..2a169864d6 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-15.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-15.xml @@ -33,7 +33,9 @@ <target dev='nvme0n2' bus='nvme'/> <address type='drive' controller='0' bus='0' target='0' unit='1'/> </disk> - <controller type='nvme' index='0'/> + <controller type='nvme' index='0'> + <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/> + </controller> <controller type='ide' index='0'/> <interface type='bridge'> <mac address='00:50:56:83:c9:0c' type='generated'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index 5d3b2163ed..37023ef4f0 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -32,7 +32,9 @@ <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/> </controller> - <controller type='nvme' index='0'/> + <controller type='nvme' index='0'> + <address type='pci' domain='0x0000' bus='0x01' slot='0x03' function='0x0'/> + </controller> <interface type='bridge'> <mac address='00:50:56:a0:a6:7e' type='generated'/> <source bridge='VM Network'/> -- 2.54.0
From: Michal Privoznik <mprivozn@redhat.com> Similarly to disk controllers (see previous commits), parse and report PCI address for ethernet devices. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/vmx/vmx.c | 7 +++++++ tests/vmx2xmldata/esx-in-the-wild-10.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-11.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-12.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-13.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-14.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-15.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-16.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-17.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-5.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-6.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-7.xml | 1 + tests/vmx2xmldata/esx-in-the-wild-8.xml | 10 ++++++++++ tests/vmx2xmldata/esx-in-the-wild-9.xml | 1 + tests/vmx2xmldata/fusion-in-the-wild-1.xml | 2 ++ 15 files changed, 31 insertions(+) diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 0fee7c0e7e..1bbe0144d2 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2930,6 +2930,8 @@ virVMXParseEthernet(virConf *conf, int controller, virDomainNetDef **def) int netmodel = VIR_DOMAIN_NET_MODEL_UNKNOWN; + g_autofree char *pciSlotNumberName = NULL; + if (def == NULL || *def != NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument")); return -1; @@ -3124,6 +3126,11 @@ virVMXParseEthernet(virConf *conf, int controller, virDomainNetDef **def) goto cleanup; } + pciSlotNumberName = g_strdup_printf("ethernet%d.pciSlotNumber", controller); + + if (virVMXPCISlotNumber(conf, pciSlotNumberName, &(*def)->info) < 0) + goto cleanup; + (*def)->model = netmodel; result = 0; diff --git a/tests/vmx2xmldata/esx-in-the-wild-10.xml b/tests/vmx2xmldata/esx-in-the-wild-10.xml index 2ba801169e..153f6900d7 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-10.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-10.xml @@ -33,6 +33,7 @@ <mac address='00:50:56:9a:9c:7a' type='generated'/> <source bridge='VM Network'/> <model type='e1000e'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-11.xml b/tests/vmx2xmldata/esx-in-the-wild-11.xml index e39a525de7..667bd2f20a 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-11.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-11.xml @@ -40,6 +40,7 @@ <mac address='00:50:56:ac:3e:a1' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-12.xml b/tests/vmx2xmldata/esx-in-the-wild-12.xml index 907a000391..82ed0f62a7 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-12.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-12.xml @@ -41,6 +41,7 @@ <mac address='00:50:56:a0:cf:2f' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-13.xml b/tests/vmx2xmldata/esx-in-the-wild-13.xml index f38dc063f1..5f4a32a018 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-13.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-13.xml @@ -43,6 +43,7 @@ package:20.6.2 <mac address='fa:16:3e:bb:2c:4a' type='static'/> <source bridge='Test'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </interface> <serial type='null'> <target port='0'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-14.xml b/tests/vmx2xmldata/esx-in-the-wild-14.xml index a8061b14c6..d167676bcd 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-14.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-14.xml @@ -31,6 +31,7 @@ <interface type='null'> <mac address='00:00:00:00:00:00' type='static'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-15.xml b/tests/vmx2xmldata/esx-in-the-wild-15.xml index 2a169864d6..5d2ba109ba 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-15.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-15.xml @@ -41,6 +41,7 @@ <mac address='00:50:56:83:c9:0c' type='generated'/> <source bridge='inside'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='16384' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-16.xml b/tests/vmx2xmldata/esx-in-the-wild-16.xml index 37023ef4f0..2b4b9cb0a2 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-16.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-16.xml @@ -39,6 +39,7 @@ <mac address='00:50:56:a0:a6:7e' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-17.xml b/tests/vmx2xmldata/esx-in-the-wild-17.xml index fe15990118..b1221fa73f 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-17.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-17.xml @@ -44,6 +44,7 @@ <mac address='00:50:56:a5:b8:68' type='generated'/> <source bridge='Mgmt Network'/> <model type='e1000e'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-5.xml b/tests/vmx2xmldata/esx-in-the-wild-5.xml index fe3d81db63..55d20d768c 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-5.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-5.xml @@ -40,6 +40,7 @@ <mac address='00:50:56:be:00:15' type='generated'/> <source bridge='VM-LAN'/> <model type='e1000'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> </interface> <video> <model type='vmvga' vram='4096' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-6.xml b/tests/vmx2xmldata/esx-in-the-wild-6.xml index 2682679796..f7b6708b42 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-6.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-6.xml @@ -33,6 +33,7 @@ <mac address='00:0c:29:2c:3a:fc' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-7.xml b/tests/vmx2xmldata/esx-in-the-wild-7.xml index 4cdf338640..6db4065af6 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-7.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-7.xml @@ -32,6 +32,7 @@ <mac address='00:50:56:9f:08:51' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-8.xml b/tests/vmx2xmldata/esx-in-the-wild-8.xml index 63bdd82c6b..f7d98b98b3 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-8.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-8.xml @@ -52,51 +52,61 @@ <mac address='00:1a:4a:16:01:55' type='static'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:85' type='generated'/> <source bridge='VM Network'/> <model type='e1000'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:82' type='generated'/> <source bridge='VM Network'/> <model type='e1000e'/> + <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:69' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:80' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x1'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:a3' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x1'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:a8' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x1'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:a9' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x1'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:78' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x2'/> </interface> <interface type='bridge'> <mac address='00:1a:4a:16:21:81' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x2'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/esx-in-the-wild-9.xml b/tests/vmx2xmldata/esx-in-the-wild-9.xml index 8b7f442921..d5a0a1c815 100644 --- a/tests/vmx2xmldata/esx-in-the-wild-9.xml +++ b/tests/vmx2xmldata/esx-in-the-wild-9.xml @@ -36,6 +36,7 @@ <mac address='00:50:56:80:b3:81' type='generated'/> <source bridge='VM Network'/> <model type='vmxnet3'/> + <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </interface> <video> <model type='vmvga' vram='8192' primary='yes'/> diff --git a/tests/vmx2xmldata/fusion-in-the-wild-1.xml b/tests/vmx2xmldata/fusion-in-the-wild-1.xml index 2c29f65d77..773889375e 100644 --- a/tests/vmx2xmldata/fusion-in-the-wild-1.xml +++ b/tests/vmx2xmldata/fusion-in-the-wild-1.xml @@ -31,10 +31,12 @@ <interface type='bridge'> <mac address='00:0c:29:3b:64:ea' type='generated'/> <source bridge='VMnet0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:0c:29:3b:64:f4' type='generated'/> <source bridge='VMnet0'/> + <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/> </interface> <video> <model type='vmvga' vram='4096' primary='yes'/> -- 2.54.0
participants (1)
-
Michal Privoznik