[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH v5.1 10/11] virCaps: get rid of macPrefix field



Use the virDomainXMLConf structure to hold this data and tweak the code
to avoid semantic change.

Without configuration the KVM mac prefix is used by default. I chose it
as it's in the privately administered segment so it should be usable for
any purposes.
---
 src/conf/capabilities.c          | 14 --------------
 src/conf/capabilities.h          |  9 ---------
 src/conf/domain_conf.c           | 28 ++++++++++++++++++++++++----
 src/conf/domain_conf.h           |  3 +++
 src/esx/esx_driver.c             |  1 -
 src/libvirt_private.syms         |  3 +--
 src/libxl/libxl_conf.c           |  2 --
 src/libxl/libxl_driver.c         |  6 +++++-
 src/lxc/lxc_conf.c               |  3 ---
 src/openvz/openvz_conf.c         |  2 --
 src/openvz/openvz_driver.c       |  2 +-
 src/parallels/parallels_driver.c | 12 ++++++++----
 src/phyp/phyp_driver.c           |  4 ----
 src/qemu/qemu_capabilities.c     |  3 ---
 src/qemu/qemu_command.c          |  6 +++---
 src/vbox/vbox_tmpl.c             | 10 +++++++---
 src/vmware/vmware_conf.c         |  2 --
 src/vmx/vmx.c                    |  1 +
 src/xen/xen_driver.c             |  7 ++++++-
 src/xen/xen_hypervisor.c         |  2 --
 tests/vmx2xmltest.c              |  1 -
 tests/xml2vmxtest.c              |  1 -
 22 files changed, 59 insertions(+), 63 deletions(-)

diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index 1d29ce6..c7ec92f 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -921,17 +921,3 @@ virCapabilitiesFormatXML(virCapsPtr caps)

     return virBufferContentAndReset(&xml);
 }
-
-extern void
-virCapabilitiesSetMacPrefix(virCapsPtr caps,
-                            const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN])
-{
-    memcpy(caps->macPrefix, prefix, sizeof(caps->macPrefix));
-}
-
-extern void
-virCapabilitiesGenerateMac(virCapsPtr caps,
-                           virMacAddrPtr mac)
-{
-    virMacAddrGenerate(caps->macPrefix, mac);
-}
diff --git a/src/conf/capabilities.h b/src/conf/capabilities.h
index bbc0197..9bb22a7 100644
--- a/src/conf/capabilities.h
+++ b/src/conf/capabilities.h
@@ -162,7 +162,6 @@ struct _virCaps {
     virCapsGuestPtr *guests;

     /* Move to virDomainXMLOption later */
-    unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
     int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch);
 };

@@ -175,14 +174,6 @@ virCapabilitiesNew(virArch hostarch,
 extern void
 virCapabilitiesFreeNUMAInfo(virCapsPtr caps);

-extern void
-virCapabilitiesSetMacPrefix(virCapsPtr caps,
-                            const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN]);
-
-extern void
-virCapabilitiesGenerateMac(virCapsPtr caps,
-                           virMacAddrPtr mac);
-
 extern int
 virCapabilitiesAddHostFeature(virCapsPtr caps,
                               const char *name);
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3513590..f2269c0 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -791,6 +791,18 @@ virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
     if (xmlns)
         xmlopt->ns = *xmlns;

+    /* Technically this forbids to use one of Xerox's MAC address prefixes in
+     * our hypervisor drivers. This shouldn't ever be a problem.
+     *
+     * Use the KVM prefix as default as it's in the privately administered
+     * range */
+    if (xmlopt->config.macPrefix[0] == 0 &&
+        xmlopt->config.macPrefix[1] == 0 &&
+        xmlopt->config.macPrefix[2] == 0) {
+        xmlopt->config.macPrefix[0] = 0x52;
+        xmlopt->config.macPrefix[1] = 0x54;
+    }
+
     return xmlopt;
 }

@@ -5039,6 +5051,14 @@ cleanup:
 }


+void
+virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt,
+                        virMacAddrPtr mac)
+{
+    virMacAddrGenerate(xmlopt->config.macPrefix, mac);
+}
+
+
 /* Parse a value located at XPATH within CTXT, and store the
  * result into val.  If REQUIRED, then the value must exist;
  * otherwise, the value is optional.  The value is in bytes.
@@ -5407,7 +5427,7 @@ error:
  * @return 0 on success, -1 on failure
  */
 static virDomainNetDefPtr
-virDomainNetDefParseXML(virCapsPtr caps,
+virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
                         xmlNodePtr node,
                         xmlXPathContextPtr ctxt,
                         virBitmapPtr bootMap,
@@ -5592,7 +5612,7 @@ virDomainNetDefParseXML(virCapsPtr caps,
             goto error;
         }
     } else {
-        virCapabilitiesGenerateMac(caps, &def->mac);
+        virDomainNetGenerateMAC(xmlopt, &def->mac);
     }

     if (devaddr) {
@@ -8515,7 +8535,7 @@ virDomainDeviceDefParse(const char *xmlStr,
             goto error;
     } else if (xmlStrEqual(node->name, BAD_CAST "interface")) {
         dev->type = VIR_DOMAIN_DEVICE_NET;
-        if (!(dev->data.net = virDomainNetDefParseXML(caps, node, ctxt,
+        if (!(dev->data.net = virDomainNetDefParseXML(xmlopt, node, ctxt,
                                                       NULL, flags)))
             goto error;
     } else if (xmlStrEqual(node->name, BAD_CAST "input")) {
@@ -10492,7 +10512,7 @@ virDomainDefParseXML(xmlDocPtr xml,
     if (n && VIR_ALLOC_N(def->nets, n) < 0)
         goto no_memory;
     for (i = 0 ; i < n ; i++) {
-        virDomainNetDefPtr net = virDomainNetDefParseXML(caps,
+        virDomainNetDefPtr net = virDomainNetDefParseXML(xmlopt,
                                                          nodes[i],
                                                          ctxt,
                                                          bootMap,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index f3647a3..45a79a4 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1959,6 +1959,7 @@ struct _virDomainDefParserConfig {

     /* data */
     bool hasWideScsiBus;
+    unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
 };

 typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
@@ -1974,6 +1975,8 @@ virDomainXMLOptionPtr virDomainXMLOptionNew(virDomainDefParserConfigPtr config,
                                             virDomainXMLPrivateDataCallbacksPtr priv,
                                             virDomainXMLNamespacePtr xmlns);

+void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);
+
 virDomainXMLNamespacePtr
 virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
     ATTRIBUTE_NONNULL(1);
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index c639199..3a21395 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -598,7 +598,6 @@ esxCapsInit(esxPrivate *priv)
         return NULL;
     }

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "vpxmigr");

     caps->defaultConsoleTargetType = esxDefaultConsoleType;
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 36e4ee0..7fc15d3 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -20,10 +20,8 @@ virCapabilitiesDefaultGuestMachine;
 virCapabilitiesFormatXML;
 virCapabilitiesFreeMachines;
 virCapabilitiesFreeNUMAInfo;
-virCapabilitiesGenerateMac;
 virCapabilitiesNew;
 virCapabilitiesSetHostCPU;
-virCapabilitiesSetMacPrefix;


 # conf/cpu_conf.h
@@ -240,6 +238,7 @@ virDomainMemDumpTypeToString;
 virDomainNetDefFree;
 virDomainNetFind;
 virDomainNetFindIdx;
+virDomainNetGenerateMAC;
 virDomainNetGetActualBandwidth;
 virDomainNetGetActualBridgeName;
 virDomainNetGetActualDirectDev;
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index b208dd8..ed3e832 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -85,8 +85,6 @@ libxlBuildCapabilities(virArch hostarch,
     if ((caps = virCapabilitiesNew(hostarch, 1, 1)) == NULL)
         goto no_memory;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x16, 0x3e });
-
     if (host_pae &&
         virCapabilitiesAddHostFeature(caps, "pae") < 0)
         goto no_memory;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index bf682c5..32818ff 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -431,6 +431,10 @@ virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks = {
     .free = libxlDomainObjPrivateFree,
 };

+virDomainDefParserConfig libxlDomainDefParserConfig = {
+    .macPrefix = { 0x00, 0x16, 0x3e },
+};
+
 /* driver must be locked before calling */
 static void
 libxlDomainEventQueue(libxlDriverPrivatePtr driver, virDomainEventPtr event)
@@ -1239,7 +1243,7 @@ libxlStartup(bool privileged,
         goto error;
     }

-    if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(NULL,
+    if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(&libxlDomainDefParserConfig,
                                                        &libxlDomainXMLPrivateDataCallbacks,
                                                        NULL)))
         goto error;
diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c
index ce8c2b5..05e0d45 100644
--- a/src/lxc/lxc_conf.c
+++ b/src/lxc/lxc_conf.c
@@ -79,9 +79,6 @@ virCapsPtr lxcCapsInit(virLXCDriverPtr driver)
         goto error;
     }

-    /* XXX shouldn't 'borrow' KVM's prefix */
-    virCapabilitiesSetMacPrefix(caps, (unsigned char []){ 0x52, 0x54, 0x00 });
-
     if ((guest = virCapabilitiesAddGuest(caps,
                                          "exe",
                                          caps->host.arch,
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 439e457..22dea79 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -187,8 +187,6 @@ virCapsPtr openvzCapsInit(void)
     if (nodeCapsInitNUMA(caps) < 0)
         goto no_memory;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x52, 0x54, 0x00 });
-
     if ((guest = virCapabilitiesAddGuest(caps,
                                          "exe",
                                          caps->host.arch,
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 583a415..180d047 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -832,7 +832,7 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
     }

     virMacAddrFormat(&net->mac, macaddr);
-    virCapabilitiesGenerateMac(driver->caps, &host_mac);
+    virDomainNetGenerateMAC(driver->xmlopt, &host_mac);
     virMacAddrFormat(&host_mac, host_macaddr);

     if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
index 7de9cc0..c6833f7 100644
--- a/src/parallels/parallels_driver.c
+++ b/src/parallels/parallels_driver.c
@@ -129,9 +129,6 @@ parallelsBuildCapabilities(void)
     if (nodeCapsInitNUMA(caps) < 0)
         goto no_memory;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]) {
-                                0x42, 0x1C, 0x00});
-
     if ((guest = virCapabilitiesAddGuest(caps, "hvm",
                                          VIR_ARCH_X86_64,
                                          "parallels",
@@ -911,6 +908,12 @@ parallelsLoadDomains(parallelsConnPtr privconn, const char *domain_name)
     return ret;
 }

+
+virDomainDefParserConfig parallelsDomainDefParserConfig = {
+    .macPrefix = {0x42, 0x1C, 0x00},
+};
+
+
 static int
 parallelsOpenDefault(virConnectPtr conn)
 {
@@ -929,7 +932,8 @@ parallelsOpenDefault(virConnectPtr conn)
     if (!(privconn->caps = parallelsBuildCapabilities()))
         goto error;

-    if (!(privconn->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
+    if (!(privconn->xmlopt = virDomainXMLOptionNew(&parallelsDomainDefParserConfig,
+                                                 NULL, NULL)))
         goto error;

     if (!(privconn->domains = virDomainObjListNew()))
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index 8716d4d..07f230f 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -327,10 +327,6 @@ phypCapsInit(void)
             ("Failed to query host NUMA topology, disabling NUMA capabilities");
     }

-    /* XXX shouldn't 'borrow' KVM's prefix */
-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]) {
-                                0x52, 0x54, 0x00});
-
     if ((guest = virCapabilitiesAddGuest(caps,
                                          "linux",
                                          caps->host.arch,
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 748fd40..7760542 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -876,9 +876,6 @@ virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache)
                                    1, 1)) == NULL)
         goto error;

-    /* Using KVM's mac prefix for QEMU too */
-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x52, 0x54, 0x00 });
-
     /* Some machines have problematic NUMA toplogy causing
      * unexpected failures. We don't want to break the QEMU
      * driver in this scenario, so log errors & carry on
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index ae7c96b..493e5f8 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8337,7 +8337,7 @@ qemuFindNICForVLAN(int nnics,
  * match up against. Horribly complicated stuff
  */
 static virDomainNetDefPtr
-qemuParseCommandLineNet(virCapsPtr qemuCaps,
+qemuParseCommandLineNet(virDomainXMLOptionPtr xmlopt,
                         const char *val,
                         int nnics,
                         const char **nics)
@@ -8471,7 +8471,7 @@ qemuParseCommandLineNet(virCapsPtr qemuCaps,
     }

     if (genmac)
-        virCapabilitiesGenerateMac(qemuCaps, &def->mac);
+        virDomainNetGenerateMAC(xmlopt, &def->mac);

 cleanup:
     for (i = 0 ; i < nkeywords ; i++) {
@@ -9561,7 +9561,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
             WANT_VALUE();
             if (!STRPREFIX(val, "nic") && STRNEQ(val, "none")) {
                 virDomainNetDefPtr net;
-                if (!(net = qemuParseCommandLineNet(qemuCaps, val, nnics, nics)))
+                if (!(net = qemuParseCommandLineNet(xmlopt, val, nnics, nics)))
                     goto error;
                 if (VIR_REALLOC_N(def->nets, def->nnets+1) < 0) {
                     virDomainNetDefFree(net);
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index d021105..4490d0c 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -851,10 +851,16 @@ static int vboxDefaultConsoleType(const char *ostype ATTRIBUTE_UNUSED,
 }


+static virDomainDefParserConfig vboxDomainDefParserConfig = {
+    .macPrefix = { 0x08, 0x00, 0x27 },
+};
+
+
 static virDomainXMLOptionPtr
 vboxXMLConfInit(void)
 {
-    return virDomainXMLOptionNew(NULL, NULL, NULL);
+    return virDomainXMLOptionNew(&vboxDomainDefParserConfig,
+                                 NULL, NULL);
 }


@@ -870,8 +876,6 @@ static virCapsPtr vboxCapsInit(void)
     if (nodeCapsInitNUMA(caps) < 0)
         goto no_memory;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x08, 0x00, 0x27 });
-
     if ((guest = virCapabilitiesAddGuest(caps,
                                          "hvm",
                                          caps->host.arch,
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index ed63f50..d8d2611 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -72,8 +72,6 @@ vmwareCapsInit(void)
     if (nodeCapsInitNUMA(caps) < 0)
         goto error;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]) {0x52, 0x54, 0x00});
-
     /* i686 guests are always supported */
     if ((guest = virCapabilitiesAddGuest(caps,
                                          "hvm",
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 67fbe6c..5dc5046 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -522,6 +522,7 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,

 virDomainDefParserConfig virVMXDomainDefParserConfig = {
     .hasWideScsiBus = true,
+    .macPrefix = {0x00, 0x0c, 0x29},
 };


diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index fe6252c..6761090 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -265,6 +265,10 @@ xenUnifiedXendProbe(void)
 #endif


+virDomainDefParserConfig xenDomainDefParserConfig = {
+    .macPrefix = { 0x00, 0x16, 0x3e },
+};
+

 static virDrvOpenStatus
 xenUnifiedOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
@@ -401,7 +405,8 @@ xenUnifiedOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
         goto fail;
     }

-    if (!(priv->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
+    if (!(priv->xmlopt = virDomainXMLOptionNew(&xenDomainDefParserConfig,
+                                               NULL, NULL)))
         goto fail;

 #if WITH_XEN_INOTIFY
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index d803972..69bc6cd 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -2303,8 +2303,6 @@ xenHypervisorBuildCapabilities(virConnectPtr conn, virArch hostarch,
     if ((caps = virCapabilitiesNew(hostarch, 1, 1)) == NULL)
         goto no_memory;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x16, 0x3e });
-
     if (hvm_type && STRNEQ(hvm_type, "") &&
         virCapabilitiesAddHostFeature(caps, hvm_type) < 0)
         goto no_memory;
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index 429dc81..d63ac52 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -34,7 +34,6 @@ testCapsInit(void)

     caps->defaultConsoleTargetType = testDefaultConsoleType;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "esx");

     /* i686 guest */
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index 7e2d4ca..659b0c8 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -34,7 +34,6 @@ testCapsInit(void)

     caps->defaultConsoleTargetType = testDefaultConsoleType;

-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "esx");


-- 
1.8.1.5


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]