[libvirt PATCH 0/3] vmx: fix handling of VMX MAC address options

Daniel P. Berrangé berrange at redhat.com
Mon Jul 20 16:32:14 UTC 2020


We first had a proposal to add a "check" attribute for MAC addresses

  https://www.redhat.com/archives/libvir-list/2020-July/msg00617.html

For reasons I don't understand this was then replaced by a "type"
attribute

  https://www.redhat.com/archives/libvir-list/2020-July/msg00656.html

with the "type" attribute having the side-effect of changing the
VMX checkMACAddress config. See the first patch for more detailed
description of the flaws.

The core problem with the original VMX code before either of these
patches was that we have multiple distinct VMX config settings and
they were all being overloaded into a single MAC address attribute
in the XML. This overloading is inherantly loosing information so
cannot be reliably round-trippped.

The only way to solve this is to actually have explicit attributes
for the config parameters from VMX and stop overloading things.

IOW, we needed *both* the "check" and "type" attributes.

That is what this series does. It also adds the missing VMX -> XML
conversion step so we round-trip everything.

There are still some pieces that are not perfect.

 - libvirt has type=static|generated, but VMX has
   type=static|generated|vpx.  "vpx" is just a synonym for
   "generated", but using a different MAC addr range. We
   use the range to do the mapping, and can probablylive
   with that.

 - VMX has a a address offset field - I've not found any
   info on what this is needed for, but we hardcode it
   to 0 for XML -> VMX config, and ignore it entirely
   for VMX -> XML config. This means we won't roundtrip
   this setting.  This needs fixing if anyone expects
   we'll see  offset != 0 in the real world.

Bastien Orivel (1):
  Add a check attribute on the mac address element

Daniel P. Berrangé (2):
  vmx: fix logic handling mac address type
  vmx: support outputing the type attribute for MAC addresses

 docs/schemas/domaincommon.rng                 |  5 ++
 src/conf/domain_conf.c                        | 14 ++++
 src/conf/domain_conf.h                        |  1 +
 src/vmx/vmx.c                                 | 77 ++++++++++++++-----
 .../network-interface-mac-check.xml           | 29 +++++++
 tests/genericxml2xmltest.c                    |  2 +
 .../vmx2xml-case-insensitive-1.xml            |  2 +-
 .../vmx2xml-case-insensitive-2.xml            |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-1.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-2.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-3.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-4.xml |  4 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-5.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-6.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-7.xml |  2 +-
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-8.xml | 20 ++---
 .../vmx2xmldata/vmx2xml-esx-in-the-wild-9.xml |  2 +-
 .../vmx2xmldata/vmx2xml-ethernet-bridged.xml  |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-custom.xml |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-e1000.xml  |  2 +-
 .../vmx2xml-ethernet-generated.xml            |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-nat.xml    |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-other.xml  |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-static.xml |  2 +-
 .../vmx2xmldata/vmx2xml-ethernet-vmxnet2.xml  |  2 +-
 tests/vmx2xmldata/vmx2xml-ethernet-vpx.xml    |  2 +-
 .../vmx2xml-fusion-in-the-wild-1.xml          |  4 +-
 .../vmx2xmldata/vmx2xml-gsx-in-the-wild-1.xml |  2 +-
 .../vmx2xmldata/vmx2xml-gsx-in-the-wild-2.xml |  2 +-
 .../vmx2xmldata/vmx2xml-gsx-in-the-wild-3.xml |  4 +-
 .../vmx2xmldata/vmx2xml-gsx-in-the-wild-4.xml |  2 +-
 .../vmx2xmldata/vmx2xml-ws-in-the-wild-1.xml  |  2 +-
 .../vmx2xmldata/vmx2xml-ws-in-the-wild-2.xml  |  2 +-
 .../xml2vmxdata/xml2vmx-ethernet-mac-type.vmx |  7 +-
 .../xml2vmxdata/xml2vmx-ethernet-mac-type.xml |  4 +-
 35 files changed, 154 insertions(+), 63 deletions(-)
 create mode 100644 tests/genericxml2xmlindata/network-interface-mac-check.xml

-- 
2.24.1




More information about the libvir-list mailing list