[libvirt] [PATCH] esx: Fix MAC address formatting

Daniel Veillard veillard at redhat.com
Sun Nov 15 08:54:43 UTC 2009


On Sat, Nov 14, 2009 at 11:01:45PM +0100, Matthias Bolte wrote:
> VMware uses two MAC address prefixes: 00:0c:29 and 00:50:56. The 00:0c:29
> prefix is used for ESX server generated addresses. The 00:50:56 prefix is
> split into two parts. MAC addresses above 00:50:56:3f:ff:ff are generated
> by a vCenter. The rest of the 00:50:56 prefix can be assigned manually.
> Any MAC address within the 00:0c:29 and 00:50:56 prefix can be specified
> in a domain XML config and the driver will handle the details internally.
> 
> * src/esx/esx_vmx.c: fix MAC address formatting
> * tests/xml2vmxdata/*: update test files accordingly
> ---
>  src/esx/esx_vmx.c                               |   21 ++++++++++++++++++---
>  tests/xml2vmxdata/xml2vmx-esx-in-the-wild-1.vmx |    2 +-
>  tests/xml2vmxdata/xml2vmx-esx-in-the-wild-2.vmx |    1 +
>  tests/xml2vmxdata/xml2vmx-esx-in-the-wild-3.vmx |    1 +
>  tests/xml2vmxdata/xml2vmx-esx-in-the-wild-4.vmx |    4 ++--
>  tests/xml2vmxdata/xml2vmx-ethernet-bridged.vmx  |    4 ++--
>  tests/xml2vmxdata/xml2vmx-ethernet-custom.vmx   |    4 ++--
>  tests/xml2vmxdata/xml2vmx-ethernet-e1000.vmx    |    4 ++--
>  tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-1.vmx |    1 +
>  tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-2.vmx |    1 +
>  tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-3.vmx |    2 ++
>  tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-4.vmx |    1 +
>  12 files changed, 34 insertions(+), 12 deletions(-)
> 
> diff --git a/src/esx/esx_vmx.c b/src/esx/esx_vmx.c
> index 97ad43e..9a9fe0a 100644
> --- a/src/esx/esx_vmx.c
> +++ b/src/esx/esx_vmx.c
> @@ -277,8 +277,10 @@ def->nets[0]...
>                                          ethernet0.addressType = "vpx"           # default to "generated"
>  ->mac = <value>                   <=>   ethernet0.generatedAddress = "<value>"
>  
> -                                                                                # 00:0c:29 prefix for autogenerated mac's
> +                                                                                # 00:0c:29 prefix for autogenerated mac's -> ethernet0.addressType = "generated"
>                                                                                  # 00:50:56 prefix for manual configured mac's
> +                                                                                #          00:50:56:00:00:00 - 00:50:56:3f:ff:ff -> ethernet0.addressType = "static"
> +                                                                                #          00:50:56:40:00:00 - 00:50:56:ff:ff:ff -> ethernet0.addressType = "vpx"
>                                                                                  # 00:05:69 old prefix from esx 1.5
>  
>  
> @@ -2687,12 +2689,25 @@ esxVMX_FormatEthernet(virConnectPtr conn, virDomainNetDefPtr def,
>  
>      virFormatMacAddr(def->mac, mac_string);
>  
> -    if ((def->mac[0] == 0x00 && def->mac[1] == 0x0c && def->mac[2] == 0x29) ||
> -        (def->mac[0] == 0x00 && def->mac[1] == 0x50 && def->mac[2] == 0x56)) {
> +    if (def->mac[0] == 0x00 && def->mac[1] == 0x0c && def->mac[2] == 0x29) {
>          virBufferVSprintf(buffer, "ethernet%d.addressType = \"generated\"\n",
>                            controller);
>          virBufferVSprintf(buffer, "ethernet%d.generatedAddress = \"%s\"\n",
>                            controller, mac_string);
> +        virBufferVSprintf(buffer, "ethernet%d.generatedAddressOffset = \"0\"\n",
> +                          controller);
> +    } else if (def->mac[0] == 0x00 && def->mac[1] == 0x50 && def->mac[2] == 0x56) {
> +        if (def->mac[3] <= 0x3f) {
> +            virBufferVSprintf(buffer, "ethernet%d.addressType = \"static\"\n",
> +                              controller);
> +            virBufferVSprintf(buffer, "ethernet%d.address = \"%s\"\n",
> +                              controller, mac_string);
> +        } else {
> +            virBufferVSprintf(buffer, "ethernet%d.addressType = \"vpx\"\n",
> +                              controller);
> +            virBufferVSprintf(buffer, "ethernet%d.generatedAddress = \"%s\"\n",
> +                              controller, mac_string);
> +        }
>      } else {
>          ESX_ERROR(conn, VIR_ERR_INTERNAL_ERROR,
>                    "Unsupported MAC address prefix '%02X:%02X:%02X', expecting "
> diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-1.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-1.vmx
> index ea14588..077d907 100644
> --- a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-1.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-1.vmx
> @@ -13,5 +13,5 @@ scsi0:0.fileName = "/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/Fedora11/F
>  ethernet0.present = "true"
>  ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
> -ethernet0.addressType = "generated"
> +ethernet0.addressType = "vpx"
>  ethernet0.generatedAddress = "00:50:56:91:48:C7"
> diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-2.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-2.vmx
> index 05e3d46..f507548 100644
> --- a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-2.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-2.vmx
> @@ -36,3 +36,4 @@ ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:3C:98:3E"
> +ethernet0.generatedAddressOffset = "0"
> diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-3.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-3.vmx
> index d418475..10559fb 100644
> --- a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-3.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-3.vmx
> @@ -22,3 +22,4 @@ ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:F5:C3:0C"
> +ethernet0.generatedAddressOffset = "0"
> diff --git a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-4.vmx b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-4.vmx
> index 68f6d6d..068f0f8 100644
> --- a/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-4.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-esx-in-the-wild-4.vmx
> @@ -13,12 +13,12 @@ scsi0:0.fileName = "/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/virtMonSer
>  ethernet0.present = "true"
>  ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
> -ethernet0.addressType = "generated"
> +ethernet0.addressType = "vpx"
>  ethernet0.generatedAddress = "00:50:56:91:66:D4"
>  ethernet1.present = "true"
>  ethernet1.networkName = "VM Switch 2"
>  ethernet1.connectionType = "bridged"
> -ethernet1.addressType = "generated"
> +ethernet1.addressType = "vpx"
>  ethernet1.generatedAddress = "00:50:56:91:0C:51"
>  serial0.present = "true"
>  serial0.fileType = "file"
> diff --git a/tests/xml2vmxdata/xml2vmx-ethernet-bridged.vmx b/tests/xml2vmxdata/xml2vmx-ethernet-bridged.vmx
> index 73ca8a8..7d9c6f7 100644
> --- a/tests/xml2vmxdata/xml2vmx-ethernet-bridged.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-ethernet-bridged.vmx
> @@ -8,5 +8,5 @@ numvcpus = "1"
>  ethernet0.present = "true"
>  ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
> -ethernet0.addressType = "generated"
> -ethernet0.generatedAddress = "00:50:56:11:22:33"
> +ethernet0.addressType = "static"
> +ethernet0.address = "00:50:56:11:22:33"
> diff --git a/tests/xml2vmxdata/xml2vmx-ethernet-custom.vmx b/tests/xml2vmxdata/xml2vmx-ethernet-custom.vmx
> index cc42140..fb4b116 100644
> --- a/tests/xml2vmxdata/xml2vmx-ethernet-custom.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-ethernet-custom.vmx
> @@ -9,5 +9,5 @@ ethernet0.present = "true"
>  ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "custom"
>  ethernet0.vnet = "vmnet7"
> -ethernet0.addressType = "generated"
> -ethernet0.generatedAddress = "00:50:56:11:22:33"
> +ethernet0.addressType = "static"
> +ethernet0.address = "00:50:56:11:22:33"
> diff --git a/tests/xml2vmxdata/xml2vmx-ethernet-e1000.vmx b/tests/xml2vmxdata/xml2vmx-ethernet-e1000.vmx
> index dd2c86d..3aed46c 100644
> --- a/tests/xml2vmxdata/xml2vmx-ethernet-e1000.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-ethernet-e1000.vmx
> @@ -9,5 +9,5 @@ ethernet0.present = "true"
>  ethernet0.virtualDev = "e1000"
>  ethernet0.networkName = "VM Network"
>  ethernet0.connectionType = "bridged"
> -ethernet0.addressType = "generated"
> -ethernet0.generatedAddress = "00:50:56:11:22:33"
> +ethernet0.addressType = "static"
> +ethernet0.address = "00:50:56:11:22:33"
> diff --git a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-1.vmx b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-1.vmx
> index 8b2d6a4..526fe3c 100644
> --- a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-1.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-1.vmx
> @@ -14,3 +14,4 @@ ethernet0.connectionType = "custom"
>  ethernet0.vnet = "/dev/vmnet1"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:D6:2B:D3"
> +ethernet0.generatedAddressOffset = "0"
> diff --git a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-2.vmx b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-2.vmx
> index d811b7f..34f006d 100644
> --- a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-2.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-2.vmx
> @@ -14,3 +14,4 @@ ethernet0.connectionType = "custom"
>  ethernet0.vnet = "/dev/vmnet1"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:D6:CB:A4"
> +ethernet0.generatedAddressOffset = "0"
> diff --git a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-3.vmx b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-3.vmx
> index 7109fb9..a2a3575 100644
> --- a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-3.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-3.vmx
> @@ -14,9 +14,11 @@ ethernet0.connectionType = "custom"
>  ethernet0.vnet = "/dev/vmnet1"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:C4:BE:5A"
> +ethernet0.generatedAddressOffset = "0"
>  ethernet1.present = "true"
>  ethernet1.networkName = "net2"
>  ethernet1.connectionType = "custom"
>  ethernet1.vnet = "/dev/vmnet2"
>  ethernet1.addressType = "generated"
>  ethernet1.generatedAddress = "00:0C:29:C4:BE:64"
> +ethernet1.generatedAddressOffset = "0"
> diff --git a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-4.vmx b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-4.vmx
> index ee9b8c9..765d35c 100644
> --- a/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-4.vmx
> +++ b/tests/xml2vmxdata/xml2vmx-gsx-in-the-wild-4.vmx
> @@ -14,3 +14,4 @@ ethernet0.connectionType = "custom"
>  ethernet0.vnet = "/dev/vmnet2"
>  ethernet0.addressType = "generated"
>  ethernet0.generatedAddress = "00:0C:29:C5:E3:5D"
> +ethernet0.generatedAddressOffset = "0"

  ACK

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list