]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virCaps: get rid of macPrefix field
authorPeter Krempa <pkrempa@redhat.com>
Fri, 15 Mar 2013 14:44:12 +0000 (15:44 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 4 Apr 2013 20:42:38 +0000 (22:42 +0200)
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.

22 files changed:
src/conf/capabilities.c
src/conf/capabilities.h
src/conf/domain_conf.c
src/conf/domain_conf.h
src/esx/esx_driver.c
src/libvirt_private.syms
src/libxl/libxl_conf.c
src/libxl/libxl_driver.c
src/lxc/lxc_conf.c
src/openvz/openvz_conf.c
src/openvz/openvz_driver.c
src/parallels/parallels_driver.c
src/phyp/phyp_driver.c
src/qemu/qemu_capabilities.c
src/qemu/qemu_command.c
src/vbox/vbox_tmpl.c
src/vmware/vmware_conf.c
src/vmx/vmx.c
src/xen/xen_driver.c
src/xen/xen_hypervisor.c
tests/vmx2xmltest.c
tests/xml2vmxtest.c

index 1d29ce642a2be60b57696d830a93e5b814929fc3..c7ec92f22a73686d3b2986f3d74e6fb5e9d60a0f 100644 (file)
@@ -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);
-}
index bbc01972f5e6b0243ae88219c3139e689204d3bf..9bb22a73aa68b32b3c58860a1609ce9669922c96 100644 (file)
@@ -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);
index aac2b41838968f376881c1da9093c7be1073b204..9efcb07d43d1b2b6d7ce8a55c1d8c554b7036f7f 100644 (file)
@@ -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,
index f3647a3eea18ee09bdb3c76a6bc2f4c8b6208174..45a79a40fa446231b2fd0aa87962f367095162af 100644 (file)
@@ -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);
index c63919912f6279b8a5abf58bc5f0cf171d29f8f7..3a213958c84104662399f5aa66f00066bb0d432a 100644 (file)
@@ -598,7 +598,6 @@ esxCapsInit(esxPrivate *priv)
         return NULL;
     }
 
-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "vpxmigr");
 
     caps->defaultConsoleTargetType = esxDefaultConsoleType;
index 36e4ee06f784d67ec8fa0f1bb2162568140c5e42..7fc15d3505494a5066f7f971a37d645d2d825786 100644 (file)
@@ -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;
index b208dd8fb112d4b3a150778e8deeaba65f2df99a..ed3e832f5daeb3edd5d932666b2c7a399dcb361b 100644 (file)
@@ -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;
index bf682c5d83c5050d6b789b9d5397aaf9d798cb01..32818ffceab35a3fbf9ce951a605b6068fc5fdb7 100644 (file)
@@ -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;
index ce8c2b5b6ebfd37d7239286020d8c4e408f86f2e..05e0d45f60708d32f913f2a1b90a5b5b87ff8580 100644 (file)
@@ -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,
index 439e457cdcb158108300c8b9db6f539716d2fc11..22dea7901813bac616c27886bd7f4cd6e2ac1ffa 100644 (file)
@@ -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,
index 583a4157c56e34e4612148a302bae3b236a31e91..180d047b6cdee1775565c8dba0430fa3c5416074 100644 (file)
@@ -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 ||
index 7de9cc07da881acf2f192b9a2a3ef20224c72cb1..c6833f734e2f1685948a0b10a5de0af116d92a69 100644 (file)
@@ -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()))
index 8716d4d28406cf6ca54c8c9a6a486e5637e8f8de..07f230f90b4cd322a4c1031c56e0ad9569af209f 100644 (file)
@@ -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,
index 748fd408a0497602fad17b1b6c49177d1897b638..7760542a27ad880e871243d7ddb3ef718fb3b346 100644 (file)
@@ -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
index ae7c96be50f2d120cf2d7cf834703ce9bbefc2ed..493e5f8a3fec589d92c0670332b4c50fc1c0fdb0 100644 (file)
@@ -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);
index d02110518bf04acd716ca48455b405316f4cfed3..4490d0c2a1f7fd482aa91dc4530154c7d6b1556b 100644 (file)
@@ -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,
index ed63f50100f4a269fd4547678308bce587b1f56f..d8d26116a28ef7a85778ebb557a095067816cf16 100644 (file)
@@ -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",
index 67fbe6c6f043a7f5a3e5da77a3e6e4b55a464d73..5dc5046187aeaf9227fd31998fa9f11db46dbed6 100644 (file)
@@ -522,6 +522,7 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
 
 virDomainDefParserConfig virVMXDomainDefParserConfig = {
     .hasWideScsiBus = true,
+    .macPrefix = {0x00, 0x0c, 0x29},
 };
 
 
index fe6252c62737887f03cf5b0faaf702896e2b6843..67610909ba5ffcf9ed34bfe48b4583a3fee7885b 100644 (file)
@@ -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
index d80397211ed8435083308b542c23be86752a1376..69bc6cdbf4936846c18628d6b96fa5a0649d42af 100644 (file)
@@ -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;
index 429dc81ddc1450b9faa5d586441637ba468bff70..d63ac52aacbe7d75963d364977eae34b5ac729af 100644 (file)
@@ -34,7 +34,6 @@ testCapsInit(void)
 
     caps->defaultConsoleTargetType = testDefaultConsoleType;
 
-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "esx");
 
     /* i686 guest */
index 7e2d4caf1deddac005a5a7873aab64fedebd4bfe..659b0c875731814cc86506b63c25af18b32b6a2b 100644 (file)
@@ -34,7 +34,6 @@ testCapsInit(void)
 
     caps->defaultConsoleTargetType = testDefaultConsoleType;
 
-    virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
     virCapabilitiesAddHostMigrateTransport(caps, "esx");