<mac address='52:54:00:5d:c7:9e'/>
<boot order='1'/>
<rom bar='off'/>
+ <acpi index='4'/>
</interface>
</devices>
...
to the ``<mac/>`` element. Note that this attribute is useless if the provided
MAC address is outside of the reserved VMWare ranges.
+:since:`Since 7.3.0`, one can set the ACPI index against network interfaces.
+With some operating systems (eg Linux with systemd), the ACPI index is used
+to provide network interface device naming, that is stable across changes
+in PCI addresses assigned to the device. This value is required to be unique
+across all devices and be between 1 and (16*1024-1).
+
:anchor:`<a id="elementsNICSVirtual"/>`
Virtual network
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<element name="driver">
<ref name="virtioOptions"/>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="deviceBoot"/>
</optional>
</element>
</define>
+ <define name="acpi">
+ <element name="acpi">
+ <optional>
+ <attribute name="index">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+
<define name="memorydev">
<element name="memory">
<attribute name="model">
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
</interleave>
</element>
</define>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
<optional>
<ref name="alias"/>
</optional>
+ <optional>
+ <ref name="acpi"/>
+ </optional>
<optional>
<ref name="address"/>
</optional>
/* bootIndex is only used for disk, network interface, hostdev
* and redirdev devices */
unsigned int bootIndex;
+ /* Valid for any PCI device. Can be used for NIC to get
+ * stable numbering in Linux */
+ unsigned int acpiIndex;
/* pciConnectFlags is only used internally during address
* assignment, never saved and never reported.
virBufferAddLit(buf, "/>\n");
}
+ if (info->acpiIndex != 0)
+ virBufferAsprintf(buf, "<acpi index='%u'/>\n", info->acpiIndex);
+
if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE ||
info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390)
/* We're done here */
g_autofree char *romenabled = NULL;
g_autofree char *rombar = NULL;
g_autofree char *aliasStr = NULL;
+ g_autofree char *acpiIndex = NULL;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
virDomainDeviceInfoClear(info);
}
}
+ acpiIndex = virXPathString("string(./acpi/@index)", ctxt);
+ if (acpiIndex &&
+ virStrToLong_ui(acpiIndex, NULL, 10, &info->acpiIndex) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Cannot parse ACPI index value '%s'"), acpiIndex);
+ goto cleanup;
+ }
+
if ((address = virXPathNode("./address", ctxt)) &&
virDomainDeviceAddressParseXML(address, info) < 0)
goto cleanup;
break;
}
+ if (src->acpiIndex != dst->acpiIndex) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Target ACPI index '%u' does not match source '%u'"),
+ dst->acpiIndex, src->acpiIndex);
+ return false;
+ }
+
return true;
}