vmx: Do not require all ID data for VMWare Distributed Switch

Similarly to commit 2482801608 we can safely ignore connectionId,
portId and portgroupId in both XML and VMX as they are only a blind
pass-through between XML and VMX and an ethernet without such parameters
was spotted in the wild.  On top of that even our documentation says the
whole VMWare Distrubuted Switch configuration is a best-effort.

Resolves: https://issues.redhat.com/browse/RHEL-46099

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Martin Kletzander 2024-07-08 13:04:13 +02:00
parent 893800be49
commit db622081e0
5 changed files with 37 additions and 26 deletions

View File

@ -9593,15 +9593,14 @@ virDomainNetDefParseXML(virDomainXMLOption *xmlopt,
def->data.vds.switch_id) < 0) def->data.vds.switch_id) < 0)
return NULL; return NULL;
if (virXMLPropLongLong(source_node, "portid", 0, VIR_XML_PROP_REQUIRED, if (virXMLPropLongLong(source_node, "portid", 0, VIR_XML_PROP_NONE,
&def->data.vds.port_id, def->data.vds.port_id) < 0) &def->data.vds.port_id, 0) < 0)
return NULL; return NULL;
if (!(def->data.vds.portgroup_id = virXMLPropStringRequired(source_node, "portgroupid"))) def->data.vds.portgroup_id = virXMLPropString(source_node, "portgroupid");
return NULL;
if (virXMLPropLongLong(source_node, "connectionid", 0, VIR_XML_PROP_REQUIRED, if (virXMLPropLongLong(source_node, "connectionid", 0, VIR_XML_PROP_NONE,
&def->data.vds.connection_id, def->data.vds.connection_id) < 0) &def->data.vds.connection_id, 0) < 0)
return NULL; return NULL;
break; break;

View File

@ -3684,15 +3684,21 @@
<attribute name="switchid"> <attribute name="switchid">
<ref name="UUID"/> <ref name="UUID"/>
</attribute> </attribute>
<optional>
<attribute name="portid"> <attribute name="portid">
<data type="long"/> <data type="long"/>
</attribute> </attribute>
</optional>
<optional>
<attribute name="portgroupid"> <attribute name="portgroupid">
<data type="string"/> <data type="string"/>
</attribute> </attribute>
</optional>
<optional>
<attribute name="connectionid"> <attribute name="connectionid">
<data type="long"/> <data type="long"/>
</attribute> </attribute>
</optional>
</element> </element>
<ref name="interface-options"/> <ref name="interface-options"/>
</interleave> </interleave>

View File

@ -2896,7 +2896,7 @@ virVMXParseEthernet(virConf *conf, int controller, virDomainNetDef **def)
if (virVMXGetConfigString(conf, if (virVMXGetConfigString(conf,
portgroupId_name, portgroupId_name,
&(*def)->data.vds.portgroup_id, &(*def)->data.vds.portgroup_id,
false) < 0 || true) < 0 ||
virVMXGetConfigLong(conf, virVMXGetConfigLong(conf,
portId_name, portId_name,
&(*def)->data.vds.port_id, &(*def)->data.vds.port_id,
@ -2906,7 +2906,7 @@ virVMXParseEthernet(virConf *conf, int controller, virDomainNetDef **def)
connectionId_name, connectionId_name,
&(*def)->data.vds.connection_id, &(*def)->data.vds.connection_id,
0, 0,
false) < 0) true) < 0)
goto cleanup; goto cleanup;
} else if (connectionType == NULL && networkName == NULL) { } else if (connectionType == NULL && networkName == NULL) {
(*def)->type = VIR_DOMAIN_NET_TYPE_NULL; (*def)->type = VIR_DOMAIN_NET_TYPE_NULL;
@ -4038,14 +4038,22 @@ virVMXFormatEthernet(virDomainNetDef *def, int controller,
uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10],
uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]); uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]);
if (def->data.vds.port_id) {
virBufferAsprintf(buffer, "ethernet%d.dvs.portId = \"%lld\"\n", virBufferAsprintf(buffer, "ethernet%d.dvs.portId = \"%lld\"\n",
controller, def->data.vds.port_id); controller, def->data.vds.port_id);
}
if (def->data.vds.portgroup_id) {
virBufferAsprintf(buffer, "ethernet%d.dvs.", controller); virBufferAsprintf(buffer, "ethernet%d.dvs.", controller);
virBufferEscapeString(buffer, "portgroupId = \"%s\"\n", def->data.vds.portgroup_id); virBufferEscapeString(buffer, "portgroupId = \"%s\"\n",
def->data.vds.portgroup_id);
}
if (def->data.vds.connection_id) {
virBufferAsprintf(buffer, "ethernet%d.dvs.connectionId = \"%lld\"\n", virBufferAsprintf(buffer, "ethernet%d.dvs.connectionId = \"%lld\"\n",
controller, def->data.vds.connection_id); controller, def->data.vds.connection_id);
}
break; break;
} }

View File

@ -5,6 +5,4 @@ ethernet0.virtualDev = "e1000e"
ethernet0.addressType = "vpx" ethernet0.addressType = "vpx"
ethernet0.generatedAddress = "00:50:56:87:65:43" ethernet0.generatedAddress = "00:50:56:87:65:43"
ethernet0.dvs.switchId = "50 34 26 b2 94 e9 3b 16-1d 68 87 bf ff 4a 54 40" ethernet0.dvs.switchId = "50 34 26 b2 94 e9 3b 16-1d 68 87 bf ff 4a 54 40"
ethernet0.dvs.portgroupId = "dvportgroup-1285"
ethernet0.dvs.connectionId = "408217997"
displayName = "test" displayName = "test"

View File

@ -14,7 +14,7 @@
<devices> <devices>
<interface type='vds'> <interface type='vds'>
<mac address='00:50:56:87:65:43' type='generated'/> <mac address='00:50:56:87:65:43' type='generated'/>
<source switchid='503426b2-94e9-3b16-1d68-87bfff4a5440' portid='0' portgroupid='dvportgroup-1285' connectionid='408217997'/> <source switchid='503426b2-94e9-3b16-1d68-87bfff4a5440'/>
<model type='e1000e'/> <model type='e1000e'/>
</interface> </interface>
<video> <video>