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);
-}
virCapsGuestPtr *guests;
/* Move to virDomainXMLOption later */
- unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
int (*defaultConsoleTargetType)(const char *ostype, virArch guestarch);
};
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);
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;
}
}
+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.
* @return 0 on success, -1 on failure
*/
static virDomainNetDefPtr
-virDomainNetDefParseXML(virCapsPtr caps,
+virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
xmlNodePtr node,
xmlXPathContextPtr ctxt,
virBitmapPtr bootMap,
goto error;
}
} else {
- virCapabilitiesGenerateMac(caps, &def->mac);
+ virDomainNetGenerateMAC(xmlopt, &def->mac);
}
if (devaddr) {
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")) {
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,
/* data */
bool hasWideScsiBus;
+ unsigned char macPrefix[VIR_MAC_PREFIX_BUFLEN];
};
typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCallbacks;
virDomainXMLPrivateDataCallbacksPtr priv,
virDomainXMLNamespacePtr xmlns);
+void virDomainNetGenerateMAC(virDomainXMLOptionPtr xmlopt, virMacAddrPtr mac);
+
virDomainXMLNamespacePtr
virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
ATTRIBUTE_NONNULL(1);
return NULL;
}
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
virCapabilitiesAddHostMigrateTransport(caps, "vpxmigr");
caps->defaultConsoleTargetType = esxDefaultConsoleType;
virCapabilitiesFormatXML;
virCapabilitiesFreeMachines;
virCapabilitiesFreeNUMAInfo;
-virCapabilitiesGenerateMac;
virCapabilitiesNew;
virCapabilitiesSetHostCPU;
-virCapabilitiesSetMacPrefix;
# conf/cpu_conf.h
virDomainNetDefFree;
virDomainNetFind;
virDomainNetFindIdx;
+virDomainNetGenerateMAC;
virDomainNetGetActualBandwidth;
virDomainNetGetActualBridgeName;
virDomainNetGetActualDirectDev;
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;
.free = libxlDomainObjPrivateFree,
};
+virDomainDefParserConfig libxlDomainDefParserConfig = {
+ .macPrefix = { 0x00, 0x16, 0x3e },
+};
+
/* driver must be locked before calling */
static void
libxlDomainEventQueue(libxlDriverPrivatePtr driver, virDomainEventPtr event)
goto error;
}
- if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(NULL,
+ if (!(libxl_driver->xmlopt = virDomainXMLOptionNew(&libxlDomainDefParserConfig,
&libxlDomainXMLPrivateDataCallbacks,
NULL)))
goto error;
goto error;
}
- /* XXX shouldn't 'borrow' KVM's prefix */
- virCapabilitiesSetMacPrefix(caps, (unsigned char []){ 0x52, 0x54, 0x00 });
-
if ((guest = virCapabilitiesAddGuest(caps,
"exe",
caps->host.arch,
if (nodeCapsInitNUMA(caps) < 0)
goto no_memory;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x52, 0x54, 0x00 });
-
if ((guest = virCapabilitiesAddGuest(caps,
"exe",
caps->host.arch,
}
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 ||
if (nodeCapsInitNUMA(caps) < 0)
goto no_memory;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]) {
- 0x42, 0x1C, 0x00});
-
if ((guest = virCapabilitiesAddGuest(caps, "hvm",
VIR_ARCH_X86_64,
"parallels",
return ret;
}
+
+virDomainDefParserConfig parallelsDomainDefParserConfig = {
+ .macPrefix = {0x42, 0x1C, 0x00},
+};
+
+
static int
parallelsOpenDefault(virConnectPtr conn)
{
if (!(privconn->caps = parallelsBuildCapabilities()))
goto error;
- if (!(privconn->xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL)))
+ if (!(privconn->xmlopt = virDomainXMLOptionNew(¶llelsDomainDefParserConfig,
+ NULL, NULL)))
goto error;
if (!(privconn->domains = virDomainObjListNew()))
("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,
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
* match up against. Horribly complicated stuff
*/
static virDomainNetDefPtr
-qemuParseCommandLineNet(virCapsPtr qemuCaps,
+qemuParseCommandLineNet(virDomainXMLOptionPtr xmlopt,
const char *val,
int nnics,
const char **nics)
}
if (genmac)
- virCapabilitiesGenerateMac(qemuCaps, &def->mac);
+ virDomainNetGenerateMAC(xmlopt, &def->mac);
cleanup:
for (i = 0 ; i < nkeywords ; i++) {
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);
}
+static virDomainDefParserConfig vboxDomainDefParserConfig = {
+ .macPrefix = { 0x08, 0x00, 0x27 },
+};
+
+
static virDomainXMLOptionPtr
vboxXMLConfInit(void)
{
- return virDomainXMLOptionNew(NULL, NULL, NULL);
+ return virDomainXMLOptionNew(&vboxDomainDefParserConfig,
+ NULL, NULL);
}
if (nodeCapsInitNUMA(caps) < 0)
goto no_memory;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x08, 0x00, 0x27 });
-
if ((guest = virCapabilitiesAddGuest(caps,
"hvm",
caps->host.arch,
if (nodeCapsInitNUMA(caps) < 0)
goto error;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]) {0x52, 0x54, 0x00});
-
/* i686 guests are always supported */
if ((guest = virCapabilitiesAddGuest(caps,
"hvm",
virDomainDefParserConfig virVMXDomainDefParserConfig = {
.hasWideScsiBus = true,
+ .macPrefix = {0x00, 0x0c, 0x29},
};
#endif
+virDomainDefParserConfig xenDomainDefParserConfig = {
+ .macPrefix = { 0x00, 0x16, 0x3e },
+};
+
static virDrvOpenStatus
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
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;
caps->defaultConsoleTargetType = testDefaultConsoleType;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
virCapabilitiesAddHostMigrateTransport(caps, "esx");
/* i686 guest */
caps->defaultConsoleTargetType = testDefaultConsoleType;
- virCapabilitiesSetMacPrefix(caps, (unsigned char[]){ 0x00, 0x0c, 0x29 });
virCapabilitiesAddHostMigrateTransport(caps, "esx");