[libvirt] [PATCH] Distribute libvirt_vmx.syms
by Matthias Bolte
This fixes the build from a tarball and makes autobuild.sh
work again.
This should actually have been part of this earlier commit:
esx: Move VMX handling code out of the driver directory
42b2f35d36a9e33f03e973130267c19cff910f2e
Reported by Eric Blake.
---
I pushed this under the (auto)build breaker rule :)
Matthias
src/Makefile.am | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 7ecd3e0..41d4b34 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1066,7 +1066,8 @@ EXTRA_DIST += \
libvirt_linux.syms \
libvirt_macvtap.syms \
libvirt_daemon.syms \
- libvirt_nwfilter.syms
+ libvirt_nwfilter.syms \
+ libvirt_vmx.syms
BUILT_SOURCES += libvirt.syms libvirt.def libvirt_qemu.def
--
1.7.0.4
14 years
[libvirt] [PATCH] bridge_driver: cleanup improvements in dhcpStartDhcpDaemon()
by Paweł Krześniak
Run VIR_FREE only for non-NULL pointers.
---
src/network/bridge_driver.c | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index b0834ae..f2857b4 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -534,34 +534,34 @@ dhcpStartDhcpDaemon(virNetworkObjPtr network)
if (!VIR_SOCKET_IS_FAMILY(&network->def->ipAddress, AF_INET)) {
networkReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("cannot start dhcp daemon without
IPv4 address for server"));
- goto cleanup;
+ goto cleanup2;
}
if ((err = virFileMakePath(NETWORK_PID_DIR)) != 0) {
virReportSystemError(err,
_("cannot create directory %s"),
NETWORK_PID_DIR);
- goto cleanup;
+ goto cleanup2;
}
if ((err = virFileMakePath(NETWORK_STATE_DIR)) != 0) {
virReportSystemError(err,
_("cannot create directory %s"),
NETWORK_STATE_DIR);
- goto cleanup;
+ goto cleanup2;
}
if (!(pidfile = virFilePid(NETWORK_PID_DIR, network->def->name))) {
virReportOOMError();
- goto cleanup;
+ goto cleanup2;
}
cmd = virCommandNew(DNSMASQ);
if (networkBuildDnsmasqArgv(network, pidfile, cmd) < 0) {
- goto cleanup;
+ goto cleanup1;
}
if (virCommandRun(cmd, NULL) < 0)
- goto cleanup;
+ goto cleanup1;
/*
* There really is no race here - when dnsmasq daemonizes, its
@@ -573,12 +573,13 @@ dhcpStartDhcpDaemon(virNetworkObjPtr network)
if (virFileReadPid(NETWORK_PID_DIR, network->def->name,
&network->dnsmasqPid) < 0)
- goto cleanup;
+ goto cleanup1;
ret = 0;
-cleanup:
+cleanup1:
VIR_FREE(pidfile);
virCommandFree(cmd);
+cleanup2:
return ret;
}
14 years
[libvirt] [PATCH] vmware: Fix undefine symbol with loadable drivers enabled
by Matthias Bolte
All other drivers are explicitly linked to gnulib. The VMware
driver lacked this, resulting in mdir_name being an undefine
symbol.
Explicitly link the VMware driver to gnulib to fix this.
---
src/Makefile.am | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
index 607e391..7ecd3e0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -633,6 +633,7 @@ endif
libvirt_driver_vmware_la_CFLAGS = \
-I@top_srcdir@/src/conf -I@top_srcdir@/src/vmx
if WITH_DRIVER_MODULES
+libvirt_driver_vmware_la_LIBADD = ../gnulib/lib/libgnu.la
libvirt_driver_vmware_la_LDFLAGS = -module -avoid-version
endif
libvirt_driver_vmware_la_SOURCES = $(VMWARE_DRIVER_SOURCES)
--
1.7.0.4
14 years
[libvirt] [PATCH] esx: Move VMX handling code out of the driver directory
by Matthias Bolte
Now the VMware driver doesn't depend on the ESX driver anymore.
Add a WITH_VMX option that depends on WITH_ESX and WITH_VMWARE.
Also add a libvirt_vmx.syms file.
Move some escaping functions from esx_util.c to vmx.c.
Adapt the test suite, ESX and VMware driver to the new code layout.
---
configure.ac | 9 +
po/POTFILES.in | 2 +-
src/Makefile.am | 22 +-
src/esx/esx_driver.c | 48 +-
src/esx/esx_util.c | 309 +------------
src/esx/esx_util.h | 27 -
src/esx/esx_vi.c | 40 ++-
src/esx/esx_vi.h | 2 +
src/esx/esx_vmx.h | 154 ------
src/libvirt_vmx.syms | 23 +
src/vmware/vmware_conf.c | 13 +-
src/vmware/vmware_conf.h | 2 +-
src/vmware/vmware_driver.c | 22 +-
src/{esx/esx_vmx.c => vmx/vmx.c} | 1019 +++++++++++++++++++++++--------------
src/vmx/vmx.h | 132 +++++
tests/Makefile.am | 22 +-
tests/esxutilstest.c | 5 +-
tests/vmx2xmltest.c | 108 ++--
tests/xml2vmxtest.c | 120 +++--
19 files changed, 1044 insertions(+), 1035 deletions(-)
delete mode 100644 src/esx/esx_vmx.h
create mode 100644 src/libvirt_vmx.syms
rename src/{esx/esx_vmx.c => vmx/vmx.c} (79%)
create mode 100644 src/vmx/vmx.h
diff --git a/configure.ac b/configure.ac
index 4df915a..87fd967 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1759,6 +1759,15 @@ if test "$with_esx" = "yes" ; then
fi
AM_CONDITIONAL([WITH_ESX], [test "$with_esx" = "yes"])
+with_vmx=yes
+if test "$with_esx" != "yes" && test "$with_vmware" != "yes"; then
+ with_vmx=no
+fi
+if test "$with_vmx" = "yes" ; then
+ AC_DEFINE_UNQUOTED([WITH_VMX], 1, [whether VMware VMX config handling is enabled])
+fi
+AM_CONDITIONAL([WITH_VMX], [test "$with_vmx" = "yes"])
+
if test "$with_xenapi" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether XenAPI driver is enabled])
fi
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 3b851f1..3d7bc8b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -25,7 +25,6 @@ src/esx/esx_util.c
src/esx/esx_vi.c
src/esx/esx_vi_methods.c
src/esx/esx_vi_types.c
-src/esx/esx_vmx.c
src/fdstream.c
src/interface/netcf_driver.c
src/internal.h
@@ -109,6 +108,7 @@ src/vbox/vbox_driver.c
src/vbox/vbox_tmpl.c
src/vmware/vmware_conf.c
src/vmware/vmware_driver.c
+src/vmx/vmx.c
src/xen/xen_driver.c
src/xen/xen_hypervisor.c
src/xen/xen_inotify.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 07ec528..588a4f7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -322,8 +322,7 @@ ESX_DRIVER_SOURCES = \
esx/esx_util.c esx/esx_util.h \
esx/esx_vi.c esx/esx_vi.h \
esx/esx_vi_methods.c esx/esx_vi_methods.h \
- esx/esx_vi_types.c esx/esx_vi_types.h \
- esx/esx_vmx.c esx/esx_vmx.h
+ esx/esx_vi_types.c esx/esx_vi_types.h
ESX_DRIVER_GENERATED = \
esx/esx_vi_methods.generated.c \
@@ -418,6 +417,9 @@ CPU_SOURCES = \
cpu/cpu_x86.h cpu/cpu_x86.c cpu/cpu_x86_data.h \
cpu/cpu_map.h cpu/cpu_map.c
+VMX_SOURCES = \
+ vmx/vmx.c vmx/vmx.h
+
pkgdata_DATA = cpu/cpu_map.xml
EXTRA_DIST += $(pkgdata_DATA)
@@ -451,6 +453,14 @@ libvirt_cpu_la_CFLAGS = \
-I@top_srcdir@/src/conf $(AM_CFLAGS)
libvirt_cpu_la_SOURCES = $(CPU_SOURCES)
+if WITH_VMX
+noinst_LTLIBRARIES += libvirt_vmx.la
+libvirt_la_BUILT_LIBADD += libvirt_vmx.la
+libvirt_vmx_la_CFLAGS = \
+ -I@top_srcdir@/src/conf $(AM_CFLAGS)
+libvirt_vmx_la_SOURCES = $(VMX_SOURCES)
+endif
+
noinst_LTLIBRARIES += libvirt_driver.la
libvirt_la_BUILT_LIBADD += libvirt_driver.la
@@ -621,7 +631,7 @@ noinst_LTLIBRARIES += libvirt_driver_vmware.la
libvirt_la_BUILT_LIBADD += libvirt_driver_vmware.la
endif
libvirt_driver_vmware_la_CFLAGS = \
- -I@top_srcdir@/src/conf
+ -I@top_srcdir@/src/conf -I@top_srcdir@/src/vmx
if WITH_DRIVER_MODULES
libvirt_driver_vmware_la_LDFLAGS = -module -avoid-version
endif
@@ -768,7 +778,7 @@ noinst_LTLIBRARIES += libvirt_driver_esx.la
libvirt_la_BUILT_LIBADD += libvirt_driver_esx.la
endif
libvirt_driver_esx_la_CFLAGS = $(LIBCURL_CFLAGS) \
- -I@top_srcdir@/src/conf $(AM_CFLAGS)
+ -I@top_srcdir@/src/conf -I@top_srcdir@/src/vmx $(AM_CFLAGS)
libvirt_driver_esx_la_LDFLAGS = $(AM_LDFLAGS)
libvirt_driver_esx_la_LIBADD = $(LIBCURL_LIBS)
if WITH_DRIVER_MODULES
@@ -1043,6 +1053,10 @@ if WITH_NWFILTER
USED_SYM_FILES += libvirt_nwfilter.syms
endif
+if WITH_VMX
+USED_SYM_FILES += libvirt_vmx.syms
+endif
+
EXTRA_DIST += \
libvirt_public.syms \
libvirt_private.syms \
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index 03a7be3..cc9b119 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -31,6 +31,7 @@
#include "memory.h"
#include "logging.h"
#include "uuid.h"
+#include "vmx.h"
#include "esx_driver.h"
#include "esx_interface_driver.h"
#include "esx_network_driver.h"
@@ -42,7 +43,6 @@
#include "esx_vi.h"
#include "esx_vi_methods.h"
#include "esx_util.h"
-#include "esx_vmx.h"
#define VIR_FROM_THIS VIR_FROM_ESX
@@ -88,7 +88,7 @@ struct _esxVMX_Data {
* Firstly this functions checks if the given file name contains a separator.
* If it doesn't then the referenced file is in the same directory as the .vmx
* file. The datastore name and directory of the .vmx file are passed to this
- * function via the opaque paramater by the caller of esxVMX_ParseConfig.
+ * function via the opaque paramater by the caller of virVMXParseConfig.
*
* Otherwise query for all known datastores and their mount directories. Then
* try to find a datastore with a mount directory that is a prefix to the given
@@ -584,10 +584,6 @@ esxCapsInit(esxPrivate *priv)
goto failure;
}
- /*
- * FIXME: Maybe distinguish betwen ESX and GSX here, see
- * esxVMX_ParseConfig() and VIR_DOMAIN_VIRT_VMWARE
- */
if (virCapabilitiesAddGuestDomain(guest, "vmware", NULL, NULL, 0,
NULL) == NULL) {
goto failure;
@@ -602,10 +598,6 @@ esxCapsInit(esxPrivate *priv)
goto failure;
}
- /*
- * FIXME: Maybe distinguish betwen ESX and GSX here, see
- * esxVMX_ParseConfig() and VIR_DOMAIN_VIRT_VMWARE
- */
if (virCapabilitiesAddGuestDomain(guest, "vmware", NULL, NULL, 0,
NULL) == NULL) {
goto failure;
@@ -2570,7 +2562,7 @@ esxDomainDumpXML(virDomainPtr domain, int flags)
virBuffer buffer = VIR_BUFFER_INITIALIZER;
char *url = NULL;
char *vmx = NULL;
- esxVMX_Context ctx;
+ virVMXContext ctx;
esxVMX_Data data;
virDomainDefPtr def = NULL;
char *xml = NULL;
@@ -2637,8 +2629,7 @@ esxDomainDumpXML(virDomainPtr domain, int flags)
ctx.formatFileName = NULL;
ctx.autodetectSCSIControllerModel = NULL;
- def = esxVMX_ParseConfig(&ctx, priv->caps, vmx,
- priv->primary->productVersion);
+ def = virVMXParseConfig(&ctx, priv->caps, vmx);
if (def != NULL) {
if (powerState != esxVI_VirtualMachinePowerState_PoweredOff) {
@@ -2674,7 +2665,7 @@ esxDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat,
unsigned int flags ATTRIBUTE_UNUSED)
{
esxPrivate *priv = conn->privateData;
- esxVMX_Context ctx;
+ virVMXContext ctx;
esxVMX_Data data;
virDomainDefPtr def = NULL;
char *xml = NULL;
@@ -2693,8 +2684,7 @@ esxDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat,
ctx.formatFileName = NULL;
ctx.autodetectSCSIControllerModel = NULL;
- def = esxVMX_ParseConfig(&ctx, priv->caps, nativeConfig,
- priv->primary->productVersion);
+ def = virVMXParseConfig(&ctx, priv->caps, nativeConfig);
if (def != NULL) {
xml = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE);
@@ -2713,7 +2703,8 @@ esxDomainXMLToNative(virConnectPtr conn, const char *nativeFormat,
unsigned int flags ATTRIBUTE_UNUSED)
{
esxPrivate *priv = conn->privateData;
- esxVMX_Context ctx;
+ int virtualHW_version;
+ virVMXContext ctx;
esxVMX_Data data;
virDomainDefPtr def = NULL;
char *vmx = NULL;
@@ -2724,6 +2715,13 @@ esxDomainXMLToNative(virConnectPtr conn, const char *nativeFormat,
return NULL;
}
+ virtualHW_version = esxVI_ProductVersionToDefaultVirtualHWVersion
+ (priv->primary->productVersion);
+
+ if (virtualHW_version < 0) {
+ return NULL;
+ }
+
def = virDomainDefParseString(priv->caps, domainXml, 0);
if (def == NULL) {
@@ -2738,8 +2736,7 @@ esxDomainXMLToNative(virConnectPtr conn, const char *nativeFormat,
ctx.formatFileName = esxFormatVMXFileName;
ctx.autodetectSCSIControllerModel = esxAutodetectSCSIControllerModel;
- vmx = esxVMX_FormatConfig(&ctx, priv->caps, def,
- priv->primary->productVersion);
+ vmx = virVMXFormatConfig(&ctx, priv->caps, def, virtualHW_version);
virDomainDefFree(def);
@@ -2922,7 +2919,8 @@ esxDomainDefineXML(virConnectPtr conn, const char *xml)
int i;
virDomainDiskDefPtr disk = NULL;
esxVI_ObjectContent *virtualMachine = NULL;
- esxVMX_Context ctx;
+ int virtualHW_version;
+ virVMXContext ctx;
esxVMX_Data data;
char *datastoreName = NULL;
char *directoryName = NULL;
@@ -2973,6 +2971,13 @@ esxDomainDefineXML(virConnectPtr conn, const char *xml)
}
/* Build VMX from domain XML */
+ virtualHW_version = esxVI_ProductVersionToDefaultVirtualHWVersion
+ (priv->primary->productVersion);
+
+ if (virtualHW_version < 0) {
+ goto cleanup;
+ }
+
data.ctx = priv->primary;
data.datastorePathWithoutFileName = NULL;
@@ -2981,8 +2986,7 @@ esxDomainDefineXML(virConnectPtr conn, const char *xml)
ctx.formatFileName = esxFormatVMXFileName;
ctx.autodetectSCSIControllerModel = esxAutodetectSCSIControllerModel;
- vmx = esxVMX_FormatConfig(&ctx, priv->caps, def,
- priv->primary->productVersion);
+ vmx = virVMXFormatConfig(&ctx, priv->caps, def, virtualHW_version);
if (vmx == NULL) {
goto cleanup;
diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
index 9ab0f70..2603957 100644
--- a/src/esx/esx_util.c
+++ b/src/esx/esx_util.c
@@ -24,7 +24,6 @@
#include <config.h>
-#include <c-ctype.h>
#include <netdb.h>
#include "internal.h"
@@ -34,6 +33,7 @@
#include "memory.h"
#include "logging.h"
#include "uuid.h"
+#include "vmx.h"
#include "esx_private.h"
#include "esx_util.h"
@@ -415,198 +415,6 @@ esxUtil_ResolveHostname(const char *hostname,
int
-esxUtil_GetConfigString(virConfPtr conf, const char *name, char **string,
- bool optional)
-{
- virConfValuePtr value;
-
- *string = NULL;
- value = virConfGetValue(conf, name);
-
- if (value == NULL) {
- if (optional) {
- return 0;
- }
-
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
-
- if (value->type != VIR_CONF_STRING) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must be a string"), name);
- return -1;
- }
-
- if (value->str == NULL) {
- if (optional) {
- return 0;
- }
-
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
-
- *string = strdup(value->str);
-
- if (*string == NULL) {
- virReportOOMError();
- return -1;
- }
-
- return 0;
-}
-
-
-
-int
-esxUtil_GetConfigUUID(virConfPtr conf, const char *name, unsigned char *uuid,
- bool optional)
-{
- virConfValuePtr value;
-
- value = virConfGetValue(conf, name);
-
- if (value == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (value->type != VIR_CONF_STRING) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must be a string"), name);
- return -1;
- }
-
- if (value->str == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (virUUIDParse(value->str, uuid) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Could not parse UUID from string '%s'"), value->str);
- return -1;
- }
-
- return 0;
-}
-
-
-
-int
-esxUtil_GetConfigLong(virConfPtr conf, const char *name, long long *number,
- long long default_, bool optional)
-{
- virConfValuePtr value;
-
- *number = default_;
- value = virConfGetValue(conf, name);
-
- if (value == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (value->type == VIR_CONF_STRING) {
- if (value->str == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (STREQ(value->str, "unlimited")) {
- *number = -1;
- } else if (virStrToLong_ll(value->str, NULL, 10, number) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must represent an integer value"),
- name);
- return -1;
- }
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must be a string"), name);
- return -1;
- }
-
- return 0;
-}
-
-
-
-int
-esxUtil_GetConfigBoolean(virConfPtr conf, const char *name, bool *boolean_,
- bool default_, bool optional)
-{
- virConfValuePtr value;
-
- *boolean_ = default_;
- value = virConfGetValue(conf, name);
-
- if (value == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (value->type == VIR_CONF_STRING) {
- if (value->str == NULL) {
- if (optional) {
- return 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Missing essential config entry '%s'"), name);
- return -1;
- }
- }
-
- if (STRCASEEQ(value->str, "true")) {
- *boolean_ = 1;
- } else if (STRCASEEQ(value->str, "false")) {
- *boolean_ = 0;
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must represent a boolean value "
- "(true|false)"), name);
- return -1;
- }
- } else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Config entry '%s' must be a string"), name);
- return -1;
- }
-
- return 0;
-}
-
-
-
-int
esxUtil_ReformatUuid(const char *input, char *output)
{
unsigned char uuid[VIR_UUID_BUFLEN];
@@ -626,81 +434,6 @@ esxUtil_ReformatUuid(const char *input, char *output)
char *
-esxUtil_EscapeHex(const char *string, char escape, const char *special)
-{
- char *escaped = NULL;
- size_t length = 1; /* 1 byte for termination */
- const char *tmp1 = string;
- char *tmp2;
-
- /* Calculate length of escaped string */
- while (*tmp1 != '\0') {
- if (*tmp1 == escape || strspn(tmp1, special) > 0) {
- length += 2;
- }
-
- ++tmp1;
- ++length;
- }
-
- if (VIR_ALLOC_N(escaped, length) < 0) {
- virReportOOMError();
- return NULL;
- }
-
- tmp1 = string; /* reading from this one */
- tmp2 = escaped; /* writing to this one */
-
- /* Escape to 'cXX' where c is the escape char and X is a hex digit */
- while (*tmp1 != '\0') {
- if (*tmp1 == escape || strspn(tmp1, special) > 0) {
- *tmp2++ = escape;
-
- snprintf(tmp2, 3, "%02x", (unsigned int)*tmp1);
-
- tmp2 += 2;
- } else {
- *tmp2++ = *tmp1;
- }
-
- ++tmp1;
- }
-
- *tmp2 = '\0';
-
- return escaped;
-}
-
-
-
-int
-esxUtil_UnescapeHex(char *string, char escape)
-{
- char *tmp1 = string; /* reading from this one */
- char *tmp2 = string; /* writing to this one */
-
- /* Unescape from 'cXX' where c is the escape char and X is a hex digit */
- while (*tmp1 != '\0') {
- if (*tmp1 == escape) {
- if (!c_isxdigit(tmp1[1]) || !c_isxdigit(tmp1[2])) {
- return -1;
- }
-
- *tmp2++ = virHexToBin(tmp1[1]) * 16 + virHexToBin(tmp1[2]);
- tmp1 += 3;
- } else {
- *tmp2++ = *tmp1++;
- }
- }
-
- *tmp2 = '\0';
-
- return 0;
-}
-
-
-
-char *
esxUtil_EscapeBase64(const char *string)
{
/* 'normal' characters don't get base64 encoded */
@@ -805,7 +538,7 @@ esxUtil_EscapeDatastoreItem(const char *string)
esxUtil_ReplaceSpecialWindowsPathChars(replaced);
- escaped1 = esxUtil_EscapeHexPercent(replaced);
+ escaped1 = virVMXEscapeHexPercent(replaced);
if (escaped1 == NULL) {
goto cleanup;
@@ -819,41 +552,3 @@ esxUtil_EscapeDatastoreItem(const char *string)
return escaped2;
}
-
-
-
-char *
-esxUtil_ConvertToUTF8(const char *encoding, const char *string)
-{
- char *result = NULL;
- xmlCharEncodingHandlerPtr handler;
- xmlBufferPtr input;
- xmlBufferPtr utf8;
-
- handler = xmlFindCharEncodingHandler(encoding);
-
- if (handler == NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("libxml2 doesn't handle %s encoding"), encoding);
- return NULL;
- }
-
- input = xmlBufferCreateStatic((char *)string, strlen(string));
- utf8 = xmlBufferCreate();
-
- if (xmlCharEncInFunc(handler, utf8, input) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Could not convert from %s to UTF-8 encoding"), encoding);
- goto cleanup;
- }
-
- result = (char *)utf8->content;
- utf8->content = NULL;
-
- cleanup:
- xmlCharEncCloseFunc(handler);
- xmlBufferFree(input);
- xmlBufferFree(utf8);
-
- return result;
-}
diff --git a/src/esx/esx_util.h b/src/esx/esx_util.h
index 694e935..4cbf9b7 100644
--- a/src/esx/esx_util.h
+++ b/src/esx/esx_util.h
@@ -27,7 +27,6 @@
# include <libxml/uri.h>
# include "internal.h"
-# include "conf.h"
typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri;
@@ -57,38 +56,12 @@ int esxUtil_ParseDatastorePath(const char *datastorePath, char **datastoreName,
int esxUtil_ResolveHostname(const char *hostname,
char *ipAddress, size_t ipAddress_length);
-int esxUtil_GetConfigString(virConfPtr conf, const char *name, char **string,
- bool optional);
-
-int esxUtil_GetConfigUUID(virConfPtr conf, const char *name,
- unsigned char *uuid, bool optional);
-
-int esxUtil_GetConfigLong(virConfPtr conf, const char *name, long long *number,
- long long default_, bool optional);
-
-int esxUtil_GetConfigBoolean(virConfPtr conf, const char *name, bool *boolean_,
- bool default_, bool optional);
-
int esxUtil_ReformatUuid(const char *input, char *output);
-char *esxUtil_EscapeHex(const char *string, char escape, const char *special);
-
-# define esxUtil_EscapeHexPipe(_string) esxUtil_EscapeHex(_string, '|', "\"")
-
-# define esxUtil_EscapeHexPercent(_string) esxUtil_EscapeHex(_string, '%', "/\\")
-
-int esxUtil_UnescapeHex(char *string, char escape);
-
-# define esxUtil_UnescapeHexPipe(_string) esxUtil_UnescapeHex(_string, '|')
-
-# define esxUtil_UnescapeHexPercent(_string) esxUtil_UnescapeHex(_string, '%')
-
char *esxUtil_EscapeBase64(const char *string);
void esxUtil_ReplaceSpecialWindowsPathChars(char *string);
char *esxUtil_EscapeDatastoreItem(const char *string);
-char *esxUtil_ConvertToUTF8(const char *encoding, const char *string);
-
#endif /* __ESX_UTIL_H__ */
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index 482a118..76be5a4 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -31,6 +31,7 @@
#include "logging.h"
#include "util.h"
#include "uuid.h"
+#include "vmx.h"
#include "xml.h"
#include "esx_vi.h"
#include "esx_vi_methods.h"
@@ -2048,7 +2049,7 @@ esxVI_GetVirtualMachineIdentity(esxVI_ObjectContent *virtualMachine,
goto failure;
}
- if (esxUtil_UnescapeHexPercent(*name) < 0) {
+ if (virVMXUnescapeHexPercent(*name) < 0) {
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("Domain name contains invalid escape sequence"));
goto failure;
@@ -3723,3 +3724,40 @@ esxVI_ParseHostCpuIdInfo(esxVI_ParsedHostCpuIdInfo *parsedHostCpuIdInfo,
return 0;
}
+
+
+
+int
+esxVI_ProductVersionToDefaultVirtualHWVersion(esxVI_ProductVersion productVersion)
+{
+ /*
+ * virtualHW.version compatibility matrix:
+ *
+ * 4 7 API
+ * ESX 3.5 + 2.5
+ * ESX 4.0 + + 4.0
+ * ESX 4.1 + + 4.1
+ * GSX 2.0 + + 2.5
+ */
+ switch (productVersion) {
+ case esxVI_ProductVersion_ESX35:
+ case esxVI_ProductVersion_VPX25:
+ return 4;
+
+ case esxVI_ProductVersion_GSX20:
+ case esxVI_ProductVersion_ESX40:
+ case esxVI_ProductVersion_ESX41:
+ case esxVI_ProductVersion_VPX40:
+ case esxVI_ProductVersion_VPX41:
+ return 7;
+
+ case esxVI_ProductVersion_ESX4x:
+ case esxVI_ProductVersion_VPX4x:
+ return 7;
+
+ default:
+ ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Unexpected product version"));
+ return -1;
+ }
+}
diff --git a/src/esx/esx_vi.h b/src/esx/esx_vi.h
index 20e6fb5..d512add 100644
--- a/src/esx/esx_vi.h
+++ b/src/esx/esx_vi.h
@@ -435,4 +435,6 @@ int esxVI_WaitForTaskCompletion(esxVI_Context *ctx,
int esxVI_ParseHostCpuIdInfo(esxVI_ParsedHostCpuIdInfo *parsedHostCpuIdInfo,
esxVI_HostCpuIdInfo *hostCpuIdInfo);
+int esxVI_ProductVersionToDefaultVirtualHWVersion(esxVI_ProductVersion productVersion);
+
#endif /* __ESX_VI_H__ */
diff --git a/src/esx/esx_vmx.h b/src/esx/esx_vmx.h
deleted file mode 100644
index 12fc5af..0000000
--- a/src/esx/esx_vmx.h
+++ /dev/null
@@ -1,154 +0,0 @@
-
-/*
- * esx_vmx.h: VMX related functions for the VMware ESX driver
- *
- * Copyright (C) 2009 Matthias Bolte <matthias.bolte(a)googlemail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#ifndef __ESX_VMX_H__
-# define __ESX_VMX_H__
-
-# include <stdbool.h>
-
-# include "internal.h"
-# include "conf.h"
-# include "domain_conf.h"
-# include "esx_vi.h"
-
-typedef struct _esxVMX_Context esxVMX_Context;
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Context
- */
-
-typedef char * (*esxVMX_ParseFileName)(const char *fileName, void *opaque);
-typedef char * (*esxVMX_FormatFileName)(const char *src, void *opaque);
-typedef int (*esxVMX_AutodetectSCSIControllerModel)(virDomainDiskDefPtr def,
- int *model, void *opaque);
-
-/*
- * esxVMX_ParseFileName is only used by esxVMX_ParseConfig.
- * esxVMX_FormatFileName is only used by esxVMX_FormatConfig.
- * esxVMX_AutodetectSCSIControllerModel is optionally used by esxVMX_FormatConfig.
- */
-struct _esxVMX_Context {
- void *opaque;
- esxVMX_ParseFileName parseFileName;
- esxVMX_FormatFileName formatFileName;
- esxVMX_AutodetectSCSIControllerModel autodetectSCSIControllerModel;
-};
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Helpers
- */
-
-int
-esxVMX_SCSIDiskNameToControllerAndUnit(const char *name, int *controller,
- int *unit);
-
-int
-esxVMX_IDEDiskNameToBusAndUnit(const char *name, int *bus, int *unit);
-
-int
-esxVMX_FloppyDiskNameToUnit(const char *name, int *unit);
-
-int
-esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk);
-
-int
-esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
- virDomainDiskDefPtr disk);
-
-int
-esxVMX_GatherSCSIControllers(esxVMX_Context *ctx, virDomainDefPtr def,
- int virtualDev[4], bool present[4]);
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * VMX -> Domain XML
- */
-
-virDomainDefPtr
-esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
- esxVI_ProductVersion productVersion);
-
-int
-esxVMX_ParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def);
-
-int
-esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
- int *virtualDev);
-
-int
-esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
- int device, int busType, int controllerOrBus, int unit,
- virDomainDiskDefPtr *def);
-int
-esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def);
-
-int
-esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
- virDomainChrDefPtr *def);
-
-int
-esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
- virDomainChrDefPtr *def);
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Domain XML -> VMX
- */
-
-char *
-esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
- esxVI_ProductVersion productVersion);
-
-int
-esxVMX_FormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer);
-
-int
-esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer);
-
-int
-esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer);
-
-int
-esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer, bool floppy_present[2]);
-
-int
-esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
- virBufferPtr buffer);
-
-int
-esxVMX_FormatSerial(esxVMX_Context *ctx, virDomainChrDefPtr def,
- virBufferPtr buffer);
-
-int
-esxVMX_FormatParallel(esxVMX_Context *ctx, virDomainChrDefPtr def,
- virBufferPtr buffer);
-
-#endif /* __ESX_VMX_H__ */
diff --git a/src/libvirt_vmx.syms b/src/libvirt_vmx.syms
new file mode 100644
index 0000000..01252f8
--- /dev/null
+++ b/src/libvirt_vmx.syms
@@ -0,0 +1,23 @@
+#
+# These symbols are dependent upon --with-esx via WITH_ESX or --with-vmware via WITH_VMWARE.
+#
+
+# vmx.h
+virVMXConvertToUTF8;
+virVMXEscapeHex;
+virVMXUnescapeHex;
+virVMXParseConfig;
+virVMXParseVNC;
+virVMXParseSCSIController;
+virVMXParseDisk;
+virVMXParseEthernet;
+virVMXParseSerial;
+virVMXParseParallel;
+virVMXFormatConfig;
+virVMXFormatVNC;
+virVMXFormatHardDisk;
+virVMXFormatCDROM;
+virVMXFormatFloppy;
+virVMXFormatEthernet;
+virVMXFormatSerial;
+virVMXFormatParallel;
diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c
index 41747c9..c3f53ea 100644
--- a/src/vmware/vmware_conf.c
+++ b/src/vmware/vmware_conf.c
@@ -27,10 +27,10 @@
#include "dirname.h"
#include "memory.h"
#include "nodeinfo.h"
-#include "util/files.h"
+#include "files.h"
#include "uuid.h"
#include "virterror_internal.h"
-#include "../esx/esx_vmx.h"
+#include "vmx.h"
#include "vmware_conf.h"
@@ -137,13 +137,13 @@ vmwareLoadDomains(struct vmware_driver *driver)
char *directoryName = NULL;
char *fileName = NULL;
int ret = -1;
- esxVMX_Context ctx;
+ virVMXContext ctx;
char *outbuf = NULL;
char *str;
char *saveptr = NULL;
virCommandPtr cmd;
- ctx.parseFileName = esxCopyVMXFileName;
+ ctx.parseFileName = vmwareCopyVMXFileName;
cmd = virCommandNewArgList(VMRUN, "-T",
driver->type == TYPE_PLAYER ? "player" : "ws",
@@ -162,8 +162,7 @@ vmwareLoadDomains(struct vmware_driver *driver)
goto cleanup;
if ((vmdef =
- esxVMX_ParseConfig(&ctx, driver->caps, vmx,
- esxVI_ProductVersion_ESX4x)) == NULL) {
+ virVMXParseConfig(&ctx, driver->caps, vmx)) == NULL) {
goto cleanup;
}
@@ -487,7 +486,7 @@ cleanup:
}
char *
-esxCopyVMXFileName(const char *datastorePath, void *opaque ATTRIBUTE_UNUSED)
+vmwareCopyVMXFileName(const char *datastorePath, void *opaque ATTRIBUTE_UNUSED)
{
char *path = strdup(datastorePath);
diff --git a/src/vmware/vmware_conf.h b/src/vmware/vmware_conf.h
index b1cdf8f..e47ce62 100644
--- a/src/vmware/vmware_conf.h
+++ b/src/vmware/vmware_conf.h
@@ -78,6 +78,6 @@ int vmwareMakePath(char *srcDir, char *srcName, char *srcExt,
int vmwareExtractPid(const char * vmxPath);
-char * esxCopyVMXFileName(const char *datastorePath, void *opaque);
+char *vmwareCopyVMXFileName(const char *datastorePath, void *opaque);
#endif
diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c
index 9662f46..47314f8 100644
--- a/src/vmware/vmware_driver.c
+++ b/src/vmware/vmware_driver.c
@@ -21,15 +21,17 @@
#include <fcntl.h>
+#include "internal.h"
+#include "virterror_internal.h"
+#include "datatypes.h"
#include "files.h"
#include "memory.h"
#include "uuid.h"
-
-#include "../esx/esx_vmx.h"
+#include "vmx.h"
#include "vmware_conf.h"
#include "vmware_driver.h"
-const char *vmw_types[] = { "player", "ws" };
+static const char *vmw_types[] = { "player", "ws" };
static void
vmwareDriverLock(struct vmware_driver *driver)
@@ -244,9 +246,9 @@ vmwareDomainDefineXML(virConnectPtr conn, const char *xml)
char *fileName = NULL;
char *vmxPath = NULL;
vmwareDomainPtr pDomain = NULL;
- esxVMX_Context ctx;
+ virVMXContext ctx;
- ctx.formatFileName = esxCopyVMXFileName;
+ ctx.formatFileName = vmwareCopyVMXFileName;
vmwareDriverLock(driver);
if ((vmdef = virDomainDefParseString(driver->caps, xml,
@@ -257,8 +259,7 @@ vmwareDomainDefineXML(virConnectPtr conn, const char *xml)
goto cleanup;
/* generate vmx file */
- vmx = esxVMX_FormatConfig(&ctx, driver->caps, vmdef,
- esxVI_ProductVersion_ESX4x);
+ vmx = virVMXFormatConfig(&ctx, driver->caps, vmdef, 7);
if (vmx == NULL)
goto cleanup;
@@ -497,9 +498,9 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
char *vmx = NULL;
char *vmxPath = NULL;
vmwareDomainPtr pDomain = NULL;
- esxVMX_Context ctx;
+ virVMXContext ctx;
- ctx.formatFileName = esxCopyVMXFileName;
+ ctx.formatFileName = vmwareCopyVMXFileName;
vmwareDriverLock(driver);
@@ -511,8 +512,7 @@ vmwareDomainCreateXML(virConnectPtr conn, const char *xml,
goto cleanup;
/* generate vmx file */
- vmx = esxVMX_FormatConfig(&ctx, driver->caps, vmdef,
- esxVI_ProductVersion_ESX4x);
+ vmx = virVMXFormatConfig(&ctx, driver->caps, vmdef, 7);
if (vmx == NULL)
goto cleanup;
diff --git a/src/esx/esx_vmx.c b/src/vmx/vmx.c
similarity index 79%
rename from src/esx/esx_vmx.c
rename to src/vmx/vmx.c
index 5cbb835..6e3e9af 100644
--- a/src/esx/esx_vmx.c
+++ b/src/vmx/vmx.c
@@ -1,9 +1,9 @@
/*
- * esx_vmx.c: VMX related functions for the VMware ESX driver
+ * vmx.c: VMware VMX parsing/formatting functions
*
* Copyright (C) 2010 Red Hat, Inc.
- * Copyright (C) 2009 Matthias Bolte <matthias.bolte(a)googlemail.com>
+ * Copyright (C) 2009-2010 Matthias Bolte <matthias.bolte(a)googlemail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -24,13 +24,15 @@
#include <config.h>
#include <c-ctype.h>
+#include <libxml/uri.h>
#include "internal.h"
#include "virterror_internal.h"
+#include "conf.h"
#include "memory.h"
#include "logging.h"
-#include "esx_private.h"
-#include "esx_vmx.h"
+#include "uuid.h"
+#include "vmx.h"
/*
@@ -454,19 +456,23 @@ def->parallels[0]...
*/
-#define VIR_FROM_THIS VIR_FROM_ESX
+#define VIR_FROM_THIS VIR_FROM_NONE
-#define ESX_BUILD_VMX_NAME_EXTRA(_suffix, _extra) \
+#define VMX_ERROR(code, ...) \
+ virReportErrorHelper(NULL, VIR_FROM_NONE, code, __FILE__, __FUNCTION__, \
+ __LINE__, __VA_ARGS__)
+
+#define VMX_BUILD_NAME_EXTRA(_suffix, _extra) \
snprintf(_suffix##_name, sizeof(_suffix##_name), "%s."_extra, prefix);
-#define ESX_BUILD_VMX_NAME(_suffix) \
- ESX_BUILD_VMX_NAME_EXTRA(_suffix, #_suffix)
+#define VMX_BUILD_NAME(_suffix) \
+ VMX_BUILD_NAME_EXTRA(_suffix, #_suffix)
-/* directly map the virDomainControllerModel to esxVMX_SCSIControllerModel,
+/* directly map the virDomainControllerModel to virVMXSCSIControllerModel,
* this is good enough for now because all virDomainControllerModel values
* are actually SCSI controller models in the ESX case */
-VIR_ENUM_DECL(esxVMX_SCSIControllerModel)
-VIR_ENUM_IMPL(esxVMX_SCSIControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
+VIR_ENUM_DECL(virVMXSCSIControllerModel)
+VIR_ENUM_IMPL(virVMXSCSIControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
"auto", /* just to match virDomainControllerModel, will never be used */
"buslogic",
"lsilogic",
@@ -479,13 +485,318 @@ VIR_ENUM_IMPL(esxVMX_SCSIControllerModel, VIR_DOMAIN_CONTROLLER_MODEL_LAST,
* Helpers
*/
+char *
+virVMXEscapeHex(const char *string, char escape, const char *special)
+{
+ char *escaped = NULL;
+ size_t length = 1; /* 1 byte for termination */
+ const char *tmp1 = string;
+ char *tmp2;
+
+ /* Calculate length of escaped string */
+ while (*tmp1 != '\0') {
+ if (*tmp1 == escape || strspn(tmp1, special) > 0) {
+ length += 2;
+ }
+
+ ++tmp1;
+ ++length;
+ }
+
+ if (VIR_ALLOC_N(escaped, length) < 0) {
+ virReportOOMError();
+ return NULL;
+ }
+
+ tmp1 = string; /* reading from this one */
+ tmp2 = escaped; /* writing to this one */
+
+ /* Escape to 'cXX' where c is the escape char and X is a hex digit */
+ while (*tmp1 != '\0') {
+ if (*tmp1 == escape || strspn(tmp1, special) > 0) {
+ *tmp2++ = escape;
+
+ snprintf(tmp2, 3, "%02x", (unsigned int)*tmp1);
+
+ tmp2 += 2;
+ } else {
+ *tmp2++ = *tmp1;
+ }
+
+ ++tmp1;
+ }
+
+ *tmp2 = '\0';
+
+ return escaped;
+}
+
+
+
int
-esxVMX_SCSIDiskNameToControllerAndUnit(const char *name, int *controller, int *unit)
+virVMXUnescapeHex(char *string, char escape)
+{
+ char *tmp1 = string; /* reading from this one */
+ char *tmp2 = string; /* writing to this one */
+
+ /* Unescape from 'cXX' where c is the escape char and X is a hex digit */
+ while (*tmp1 != '\0') {
+ if (*tmp1 == escape) {
+ if (!c_isxdigit(tmp1[1]) || !c_isxdigit(tmp1[2])) {
+ return -1;
+ }
+
+ *tmp2++ = virHexToBin(tmp1[1]) * 16 + virHexToBin(tmp1[2]);
+ tmp1 += 3;
+ } else {
+ *tmp2++ = *tmp1++;
+ }
+ }
+
+ *tmp2 = '\0';
+
+ return 0;
+}
+
+
+
+char *
+virVMXConvertToUTF8(const char *encoding, const char *string)
+{
+ char *result = NULL;
+ xmlCharEncodingHandlerPtr handler;
+ xmlBufferPtr input;
+ xmlBufferPtr utf8;
+
+ handler = xmlFindCharEncodingHandler(encoding);
+
+ if (handler == NULL) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("libxml2 doesn't handle %s encoding"), encoding);
+ return NULL;
+ }
+
+ input = xmlBufferCreateStatic((char *)string, strlen(string));
+ utf8 = xmlBufferCreate();
+
+ if (xmlCharEncInFunc(handler, utf8, input) < 0) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Could not convert from %s to UTF-8 encoding"), encoding);
+ goto cleanup;
+ }
+
+ result = (char *)utf8->content;
+ utf8->content = NULL;
+
+ cleanup:
+ xmlCharEncCloseFunc(handler);
+ xmlBufferFree(input);
+ xmlBufferFree(utf8);
+
+ return result;
+}
+
+
+
+static int
+virVMXGetConfigString(virConfPtr conf, const char *name, char **string,
+ bool optional)
+{
+ virConfValuePtr value;
+
+ *string = NULL;
+ value = virConfGetValue(conf, name);
+
+ if (value == NULL) {
+ if (optional) {
+ return 0;
+ }
+
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+
+ if (value->type != VIR_CONF_STRING) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must be a string"), name);
+ return -1;
+ }
+
+ if (value->str == NULL) {
+ if (optional) {
+ return 0;
+ }
+
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+
+ *string = strdup(value->str);
+
+ if (*string == NULL) {
+ virReportOOMError();
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
+static int
+virVMXGetConfigUUID(virConfPtr conf, const char *name, unsigned char *uuid,
+ bool optional)
+{
+ virConfValuePtr value;
+
+ value = virConfGetValue(conf, name);
+
+ if (value == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (value->type != VIR_CONF_STRING) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must be a string"), name);
+ return -1;
+ }
+
+ if (value->str == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (virUUIDParse(value->str, uuid) < 0) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Could not parse UUID from string '%s'"), value->str);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
+static int
+virVMXGetConfigLong(virConfPtr conf, const char *name, long long *number,
+ long long default_, bool optional)
+{
+ virConfValuePtr value;
+
+ *number = default_;
+ value = virConfGetValue(conf, name);
+
+ if (value == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (value->type == VIR_CONF_STRING) {
+ if (value->str == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (STREQ(value->str, "unlimited")) {
+ *number = -1;
+ } else if (virStrToLong_ll(value->str, NULL, 10, number) < 0) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must represent an integer value"),
+ name);
+ return -1;
+ }
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must be a string"), name);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
+static int
+virVMXGetConfigBoolean(virConfPtr conf, const char *name, bool *boolean_,
+ bool default_, bool optional)
+{
+ virConfValuePtr value;
+
+ *boolean_ = default_;
+ value = virConfGetValue(conf, name);
+
+ if (value == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (value->type == VIR_CONF_STRING) {
+ if (value->str == NULL) {
+ if (optional) {
+ return 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Missing essential config entry '%s'"), name);
+ return -1;
+ }
+ }
+
+ if (STRCASEEQ(value->str, "true")) {
+ *boolean_ = 1;
+ } else if (STRCASEEQ(value->str, "false")) {
+ *boolean_ = 0;
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must represent a boolean value "
+ "(true|false)"), name);
+ return -1;
+ }
+ } else {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Config entry '%s' must be a string"), name);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+
+static int
+virVMXSCSIDiskNameToControllerAndUnit(const char *name, int *controller, int *unit)
{
int idx;
if (! STRPREFIX(name, "sd")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("Expecting domain XML attribute 'dev' of entry "
"'devices/disk/target' to start with 'sd'"));
return -1;
@@ -494,14 +805,14 @@ esxVMX_SCSIDiskNameToControllerAndUnit(const char *name, int *controller, int *u
idx = virDiskNameToIndex(name);
if (idx < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Could not parse valid disk index from '%s'"), name);
return -1;
}
/* Each of the 4 SCSI controllers has 1 bus with 15 units each for devices */
if (idx >= (4 * 15)) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI disk index (parsed from '%s') is too large"), name);
return -1;
}
@@ -519,13 +830,13 @@ esxVMX_SCSIDiskNameToControllerAndUnit(const char *name, int *controller, int *u
-int
-esxVMX_IDEDiskNameToBusAndUnit(const char *name, int *bus, int *unit)
+static int
+virVMXIDEDiskNameToBusAndUnit(const char *name, int *bus, int *unit)
{
int idx;
if (! STRPREFIX(name, "hd")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("Expecting domain XML attribute 'dev' of entry "
"'devices/disk/target' to start with 'hd'"));
return -1;
@@ -534,14 +845,14 @@ esxVMX_IDEDiskNameToBusAndUnit(const char *name, int *bus, int *unit)
idx = virDiskNameToIndex(name);
if (idx < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Could not parse valid disk index from '%s'"), name);
return -1;
}
/* The IDE controller has 2 buses with 2 units each for devices */
if (idx >= (2 * 2)) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE disk index (parsed from '%s') is too large"), name);
return -1;
}
@@ -554,13 +865,13 @@ esxVMX_IDEDiskNameToBusAndUnit(const char *name, int *bus, int *unit)
-int
-esxVMX_FloppyDiskNameToUnit(const char *name, int *unit)
+static int
+virVMXFloppyDiskNameToUnit(const char *name, int *unit)
{
int idx;
if (! STRPREFIX(name, "fd")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("Expecting domain XML attribute 'dev' of entry "
"'devices/disk/target' to start with 'fd'"));
return -1;
@@ -569,14 +880,14 @@ esxVMX_FloppyDiskNameToUnit(const char *name, int *unit)
idx = virDiskNameToIndex(name);
if (idx < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Could not parse valid disk index from '%s'"), name);
return -1;
}
/* The FDC controller has 1 bus with 2 units for devices */
if (idx >= 2) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Floppy disk index (parsed from '%s') is too large"), name);
return -1;
}
@@ -588,8 +899,8 @@ esxVMX_FloppyDiskNameToUnit(const char *name, int *unit)
-int
-esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
+static int
+virVMXVerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
{
virDomainDiskDef def;
virDomainDeviceDriveAddressPtr drive;
@@ -597,7 +908,7 @@ esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
memset(&def, 0, sizeof(def));
if (disk->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported disk address type '%s'"),
virDomainDeviceAddressTypeToString(disk->info.type));
return -1;
@@ -609,7 +920,7 @@ esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
def.bus = disk->bus;
if (virDomainDiskDefAssignAddress(caps, &def) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("Could not verify disk address"));
return -1;
}
@@ -617,7 +928,7 @@ esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
if (def.info.addr.drive.controller != drive->controller ||
def.info.addr.drive.bus != drive->bus ||
def.info.addr.drive.unit != drive->unit) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Disk address %d:%d:%d doesn't match target device '%s'"),
drive->controller, drive->bus, drive->unit, disk->dst);
return -1;
@@ -626,69 +937,69 @@ esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
/* drive->{controller|bus|unit} is unsigned, no >= 0 checks are necessary */
if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
if (drive->controller > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI controller index %d out of [0..3] range"),
drive->controller);
return -1;
}
if (drive->bus != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI bus index %d out of [0] range"),
drive->bus);
return -1;
}
if (drive->unit > 15 || drive->unit == 7) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI unit index %d out of [0..6,8..15] range"),
drive->unit);
return -1;
}
} else if (disk->bus == VIR_DOMAIN_DISK_BUS_IDE) {
if (drive->controller != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE controller index %d out of [0] range"),
drive->controller);
return -1;
}
if (drive->bus > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE bus index %d out of [0..1] range"),
drive->bus);
return -1;
}
if (drive->unit > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE unit index %d out of [0..1] range"),
drive->unit);
return -1;
}
} else if (disk->bus == VIR_DOMAIN_DISK_BUS_FDC) {
if (drive->controller != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("FDC controller index %d out of [0] range"),
drive->controller);
return -1;
}
if (drive->bus != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("FDC bus index %d out of [0] range"),
drive->bus);
return -1;
}
if (drive->unit > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("FDC unit index %d out of [0..1] range"),
drive->unit);
return -1;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported bus type '%s'"),
virDomainDiskBusTypeToString(disk->bus));
return -1;
@@ -699,9 +1010,9 @@ esxVMX_VerifyDiskAddress(virCapsPtr caps, virDomainDiskDefPtr disk)
-int
-esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
- virDomainDiskDefPtr disk)
+static int
+virVMXHandleLegacySCSIDiskDriverName(virDomainDefPtr def,
+ virDomainDiskDefPtr disk)
{
char *tmp;
int model, i;
@@ -720,7 +1031,7 @@ esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
model = virDomainControllerModelTypeFromString(disk->driverName);
if (model < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unknown driver name '%s'"), disk->driverName);
return -1;
}
@@ -733,7 +1044,7 @@ esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
}
if (controller == NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Missing SCSI controller for index %d"),
disk->info.addr.drive.controller);
return -1;
@@ -742,7 +1053,7 @@ esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
if (controller->model == -1) {
controller->model = model;
} else if (controller->model != model) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Inconsistent SCSI controller model ('%s' is not '%s') "
"for SCSI controller index %d"), disk->driverName,
virDomainControllerModelTypeToString(controller->model),
@@ -755,9 +1066,9 @@ esxVMX_HandleLegacySCSIDiskDriverName(virDomainDefPtr def,
-int
-esxVMX_GatherSCSIControllers(esxVMX_Context *ctx, virDomainDefPtr def,
- int virtualDev[4], bool present[4])
+static int
+virVMXGatherSCSIControllers(virVMXContext *ctx, virDomainDefPtr def,
+ int virtualDev[4], bool present[4])
{
int result = -1;
int i, k;
@@ -822,7 +1133,7 @@ esxVMX_GatherSCSIControllers(esxVMX_Context *ctx, virDomainDefPtr def,
// have inconsistent SCSI controller models
for (k = 0; k < count; ++k) {
if (autodetectedModels[k] != autodetectedModels[0]) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Disks on SCSI controller %d have inconsistent "
"controller models, cannot autodetect model"),
controller->idx);
@@ -838,7 +1149,7 @@ esxVMX_GatherSCSIControllers(esxVMX_Context *ctx, virDomainDefPtr def,
controller->model != VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC &&
controller->model != VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068 &&
controller->model != VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML attribute 'model' of entry "
"'controller' to be 'buslogic' or 'lsilogic' or "
"'lsisas1068' or 'vmpvscsi' but found '%s'"),
@@ -865,8 +1176,7 @@ esxVMX_GatherSCSIControllers(esxVMX_Context *ctx, virDomainDefPtr def,
*/
virDomainDefPtr
-esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
- esxVI_ProductVersion productVersion)
+virVMXParseConfig(virVMXContext *ctx, virCapsPtr caps, const char *vmx)
{
bool success = false;
virConfPtr conf = NULL;
@@ -890,8 +1200,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
int unit;
if (ctx->parseFileName == NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
- _("esxVMX_Context has no parseFileName function set"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("virVMXContext has no parseFileName function set"));
return NULL;
}
@@ -902,7 +1212,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:.encoding */
- if (esxUtil_GetConfigString(conf, ".encoding", &encoding, true) < 0) {
+ if (virVMXGetConfigString(conf, ".encoding", &encoding, true) < 0) {
goto cleanup;
}
@@ -912,7 +1222,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
virConfFree(conf);
conf = NULL;
- utf8 = esxUtil_ConvertToUTF8(encoding, vmx);
+ utf8 = virVMXConvertToUTF8(encoding, vmx);
if (utf8 == NULL) {
goto cleanup;
@@ -933,104 +1243,65 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
return NULL;
}
- def->virtType = VIR_DOMAIN_VIRT_VMWARE; /* FIXME: maybe add VIR_DOMAIN_VIRT_ESX ? */
+ def->virtType = VIR_DOMAIN_VIRT_VMWARE;
def->id = -1;
/* vmx:config.version */
- if (esxUtil_GetConfigLong(conf, "config.version", &config_version, 0,
- false) < 0) {
+ if (virVMXGetConfigLong(conf, "config.version", &config_version, 0,
+ false) < 0) {
goto cleanup;
}
if (config_version != 8) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'config.version' to be 8 but found "
"%lld"), config_version);
goto cleanup;
}
/* vmx:virtualHW.version */
- if (esxUtil_GetConfigLong(conf, "virtualHW.version", &virtualHW_version, 0,
- false) < 0) {
+ if (virVMXGetConfigLong(conf, "virtualHW.version", &virtualHW_version, 0,
+ false) < 0) {
goto cleanup;
}
- /*
- * virtualHW.version compatibility matrix:
- *
- * 4 7 API
- * ESX 3.5 + 2.5
- * ESX 4.0 + + 4.0
- * ESX 4.1 + + 4.1
- * GSX 2.0 + + 2.5
- */
- switch (productVersion) {
- case esxVI_ProductVersion_ESX35:
- case esxVI_ProductVersion_VPX25:
- if (virtualHW_version != 4) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Expecting VMX entry 'virtualHW.version' to be 4 "
- "but found %lld"),
- virtualHW_version);
- goto cleanup;
- }
-
- break;
-
- case esxVI_ProductVersion_GSX20:
- case esxVI_ProductVersion_ESX40:
- case esxVI_ProductVersion_ESX41:
- case esxVI_ProductVersion_VPX40:
- case esxVI_ProductVersion_VPX41:
- if (virtualHW_version != 4 && virtualHW_version != 7) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
- _("Expecting VMX entry 'virtualHW.version' to be 4 or 7 "
- "but found %lld"),
- virtualHW_version);
- goto cleanup;
- }
-
- break;
-
- case esxVI_ProductVersion_ESX4x:
- case esxVI_ProductVersion_VPX4x:
- break;
-
- default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Unexpected product version"));
+ if (virtualHW_version != 4 && virtualHW_version != 7) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ _("Expecting VMX entry 'virtualHW.version' to be 4 or 7 "
+ "but found %lld"),
+ virtualHW_version);
goto cleanup;
}
/* vmx:uuid.bios -> def:uuid */
/* FIXME: Need to handle 'uuid.action = "create"' */
- if (esxUtil_GetConfigUUID(conf, "uuid.bios", def->uuid, true) < 0) {
+ if (virVMXGetConfigUUID(conf, "uuid.bios", def->uuid, true) < 0) {
goto cleanup;
}
/* vmx:displayName -> def:name */
- if (esxUtil_GetConfigString(conf, "displayName", &def->name, true) < 0) {
+ if (virVMXGetConfigString(conf, "displayName", &def->name, true) < 0) {
goto cleanup;
}
if (def->name != NULL) {
- if (esxUtil_UnescapeHexPercent(def->name) < 0 ||
- esxUtil_UnescapeHexPipe(def->name) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ if (virVMXUnescapeHexPercent(def->name) < 0 ||
+ virVMXUnescapeHexPipe(def->name) < 0) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("VMX entry 'name' contains invalid escape sequence"));
goto cleanup;
}
}
/* vmx:annotation -> def:description */
- if (esxUtil_GetConfigString(conf, "annotation", &def->description,
- true) < 0) {
+ if (virVMXGetConfigString(conf, "annotation", &def->description,
+ true) < 0) {
goto cleanup;
}
if (def->description != NULL) {
- if (esxUtil_UnescapeHexPipe(def->description) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ if (virVMXUnescapeHexPipe(def->description) < 0) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
_("VMX entry 'annotation' contains invalid escape "
"sequence"));
goto cleanup;
@@ -1038,12 +1309,12 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:memsize -> def:mem.max_balloon */
- if (esxUtil_GetConfigLong(conf, "memsize", &memsize, 32, true) < 0) {
+ if (virVMXGetConfigLong(conf, "memsize", &memsize, 32, true) < 0) {
goto cleanup;
}
if (memsize <= 0 || memsize % 4 != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'memsize' to be an unsigned "
"integer (multiple of 4) but found %lld"), memsize);
goto cleanup;
@@ -1052,8 +1323,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
def->mem.max_balloon = memsize * 1024; /* Scale from megabytes to kilobytes */
/* vmx:sched.mem.max -> def:mem.cur_balloon */
- if (esxUtil_GetConfigLong(conf, "sched.mem.max", &sched_mem_max, memsize,
- true) < 0) {
+ if (virVMXGetConfigLong(conf, "sched.mem.max", &sched_mem_max, memsize,
+ true) < 0) {
goto cleanup;
}
@@ -1068,8 +1339,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:sched.mem.minsize -> def:mem.min_guarantee */
- if (esxUtil_GetConfigLong(conf, "sched.mem.minsize", &sched_mem_minsize, 0,
- true) < 0) {
+ if (virVMXGetConfigLong(conf, "sched.mem.minsize", &sched_mem_minsize, 0,
+ true) < 0) {
goto cleanup;
}
@@ -1084,12 +1355,12 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:numvcpus -> def:vcpus */
- if (esxUtil_GetConfigLong(conf, "numvcpus", &numvcpus, 1, true) < 0) {
+ if (virVMXGetConfigLong(conf, "numvcpus", &numvcpus, 1, true) < 0) {
goto cleanup;
}
if (numvcpus <= 0 || (numvcpus % 2 != 0 && numvcpus != 1)) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'numvcpus' to be an unsigned "
"integer (1 or a multiple of 2) but found %lld"), numvcpus);
goto cleanup;
@@ -1099,8 +1370,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
/* vmx:sched.cpu.affinity -> def:cpumask */
// VirtualMachine:config.cpuAffinity.affinitySet
- if (esxUtil_GetConfigString(conf, "sched.cpu.affinity", &sched_cpu_affinity,
- true) < 0) {
+ if (virVMXGetConfigString(conf, "sched.cpu.affinity", &sched_cpu_affinity,
+ true) < 0) {
goto cleanup;
}
@@ -1121,7 +1392,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
number = virParseNumber(¤t);
if (number < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'sched.cpu.affinity' to be "
"a comma separated list of unsigned integers but "
"found '%s'"), sched_cpu_affinity);
@@ -1129,7 +1400,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
if (number >= VIR_DOMAIN_CPUMASK_LEN) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("VMX entry 'sched.cpu.affinity' contains a %d, "
"this value is too large"), number);
goto cleanup;
@@ -1149,7 +1420,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
} else if (*current == '\0') {
break;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'sched.cpu.affinity' to be "
"a comma separated list of unsigned integers but "
"found '%s'"), sched_cpu_affinity);
@@ -1160,7 +1431,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
if (count < numvcpus) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry 'sched.cpu.affinity' to contain "
"at least as many values as 'numvcpus' (%lld) but "
"found only %d value(s)"), numvcpus, count);
@@ -1182,7 +1453,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:guestOS -> def:os.arch */
- if (esxUtil_GetConfigString(conf, "guestOS", &guestOS, true) < 0) {
+ if (virVMXGetConfigString(conf, "guestOS", &guestOS, true) < 0) {
goto cleanup;
}
@@ -1198,8 +1469,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
}
/* vmx:smbios.reflecthost -> def:os.smbios_mode */
- if (esxUtil_GetConfigBoolean(conf, "smbios.reflecthost",
- &smbios_reflecthost, false, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, "smbios.reflecthost",
+ &smbios_reflecthost, false, true) < 0) {
goto cleanup;
}
@@ -1221,7 +1492,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
def->ngraphics = 0;
- if (esxVMX_ParseVNC(conf, &def->graphics[def->ngraphics]) < 0) {
+ if (virVMXParseVNC(conf, &def->graphics[def->ngraphics]) < 0) {
goto cleanup;
}
@@ -1239,8 +1510,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
/* def:disks (scsi) */
for (controller = 0; controller < 4; ++controller) {
- if (esxVMX_ParseSCSIController(conf, controller, &present,
- &scsi_virtualDev[controller]) < 0) {
+ if (virVMXParseSCSIController(conf, controller, &present,
+ &scsi_virtualDev[controller]) < 0) {
goto cleanup;
}
@@ -1257,9 +1528,9 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
continue;
}
- if (esxVMX_ParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_DISK,
- VIR_DOMAIN_DISK_BUS_SCSI, controller, unit,
- &def->disks[def->ndisks]) < 0) {
+ if (virVMXParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_DISK,
+ VIR_DOMAIN_DISK_BUS_SCSI, controller, unit,
+ &def->disks[def->ndisks]) < 0) {
goto cleanup;
}
@@ -1268,7 +1539,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
continue;
}
- if (esxVMX_ParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_CDROM,
+ if (virVMXParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_CDROM,
VIR_DOMAIN_DISK_BUS_SCSI, controller, unit,
&def->disks[def->ndisks]) < 0) {
goto cleanup;
@@ -1283,9 +1554,9 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
/* def:disks (ide) */
for (bus = 0; bus < 2; ++bus) {
for (unit = 0; unit < 2; ++unit) {
- if (esxVMX_ParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_DISK,
- VIR_DOMAIN_DISK_BUS_IDE, bus, unit,
- &def->disks[def->ndisks]) < 0) {
+ if (virVMXParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_DISK,
+ VIR_DOMAIN_DISK_BUS_IDE, bus, unit,
+ &def->disks[def->ndisks]) < 0) {
goto cleanup;
}
@@ -1294,9 +1565,9 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
continue;
}
- if (esxVMX_ParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_CDROM,
- VIR_DOMAIN_DISK_BUS_IDE, bus, unit,
- &def->disks[def->ndisks]) < 0) {
+ if (virVMXParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_CDROM,
+ VIR_DOMAIN_DISK_BUS_IDE, bus, unit,
+ &def->disks[def->ndisks]) < 0) {
goto cleanup;
}
@@ -1308,9 +1579,9 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
/* def:disks (floppy) */
for (unit = 0; unit < 2; ++unit) {
- if (esxVMX_ParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_FLOPPY,
- VIR_DOMAIN_DISK_BUS_FDC, 0, unit,
- &def->disks[def->ndisks]) < 0) {
+ if (virVMXParseDisk(ctx, caps, conf, VIR_DOMAIN_DISK_DEVICE_FLOPPY,
+ VIR_DOMAIN_DISK_BUS_FDC, 0, unit,
+ &def->disks[def->ndisks]) < 0) {
goto cleanup;
}
@@ -1321,7 +1592,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
/* def:controllers */
if (virDomainDefAddImplicitControllers(def) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not add controllers"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not add controllers"));
goto cleanup;
}
@@ -1329,7 +1600,7 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
if (def->controllers[controller]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
if (def->controllers[controller]->idx < 0 ||
def->controllers[controller]->idx > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI controller index %d out of [0..3] range"),
def->controllers[controller]->idx);
goto cleanup;
@@ -1352,8 +1623,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
def->nnets = 0;
for (controller = 0; controller < 4; ++controller) {
- if (esxVMX_ParseEthernet(conf, controller,
- &def->nets[def->nnets]) < 0) {
+ if (virVMXParseEthernet(conf, controller,
+ &def->nets[def->nnets]) < 0) {
goto cleanup;
}
@@ -1380,8 +1651,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
def->nserials = 0;
for (port = 0; port < 4; ++port) {
- if (esxVMX_ParseSerial(ctx, conf, port,
- &def->serials[def->nserials]) < 0) {
+ if (virVMXParseSerial(ctx, conf, port,
+ &def->serials[def->nserials]) < 0) {
goto cleanup;
}
@@ -1399,8 +1670,8 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
def->nparallels = 0;
for (port = 0; port < 3; ++port) {
- if (esxVMX_ParseParallel(ctx, conf, port,
- &def->parallels[def->nparallels]) < 0) {
+ if (virVMXParseParallel(ctx, conf, port,
+ &def->parallels[def->nparallels]) < 0) {
goto cleanup;
}
@@ -1428,18 +1699,18 @@ esxVMX_ParseConfig(esxVMX_Context *ctx, virCapsPtr caps, const char *vmx,
int
-esxVMX_ParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def)
+virVMXParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def)
{
bool enabled = false;
long long port = 0;
if (def == NULL || *def != NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
- if (esxUtil_GetConfigBoolean(conf, "RemoteDisplay.vnc.enabled", &enabled,
- false, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, "RemoteDisplay.vnc.enabled", &enabled,
+ false, true) < 0) {
return -1;
}
@@ -1454,14 +1725,14 @@ esxVMX_ParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def)
(*def)->type = VIR_DOMAIN_GRAPHICS_TYPE_VNC;
- if (esxUtil_GetConfigLong(conf, "RemoteDisplay.vnc.port", &port, -1,
- true) < 0 ||
- esxUtil_GetConfigString(conf, "RemoteDisplay.vnc.ip",
- &(*def)->data.vnc.listenAddr, true) < 0 ||
- esxUtil_GetConfigString(conf, "RemoteDisplay.vnc.keymap",
- &(*def)->data.vnc.keymap, true) < 0 ||
- esxUtil_GetConfigString(conf, "RemoteDisplay.vnc.password",
- &(*def)->data.vnc.auth.passwd, true) < 0) {
+ if (virVMXGetConfigLong(conf, "RemoteDisplay.vnc.port", &port, -1,
+ true) < 0 ||
+ virVMXGetConfigString(conf, "RemoteDisplay.vnc.ip",
+ &(*def)->data.vnc.listenAddr, true) < 0 ||
+ virVMXGetConfigString(conf, "RemoteDisplay.vnc.keymap",
+ &(*def)->data.vnc.keymap, true) < 0 ||
+ virVMXGetConfigString(conf, "RemoteDisplay.vnc.password",
+ &(*def)->data.vnc.auth.passwd, true) < 0) {
goto failure;
}
@@ -1492,8 +1763,8 @@ esxVMX_ParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def)
int
-esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
- int *virtualDev)
+virVMXParseSCSIController(virConfPtr conf, int controller, bool *present,
+ int *virtualDev)
{
char present_name[32];
char virtualDev_name[32];
@@ -1501,12 +1772,12 @@ esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
char *tmp;
if (virtualDev == NULL || *virtualDev != -1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
if (controller < 0 || controller > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI controller index %d out of [0..3] range"),
controller);
return -1;
@@ -1516,8 +1787,7 @@ esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
snprintf(virtualDev_name, sizeof(virtualDev_name), "scsi%d.virtualDev",
controller);
- if (esxUtil_GetConfigBoolean(conf, present_name, present, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) {
goto failure;
}
@@ -1525,8 +1795,8 @@ esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
return 0;
}
- if (esxUtil_GetConfigString(conf, virtualDev_name, &virtualDev_string,
- true) < 0) {
+ if (virVMXGetConfigString(conf, virtualDev_name, &virtualDev_string,
+ true) < 0) {
goto failure;
}
@@ -1537,14 +1807,14 @@ esxVMX_ParseSCSIController(virConfPtr conf, int controller, bool *present,
*tmp = c_tolower(*tmp);
}
- *virtualDev = esxVMX_SCSIControllerModelTypeFromString(virtualDev_string);
+ *virtualDev = virVMXSCSIControllerModelTypeFromString(virtualDev_string);
if (*virtualDev == -1 ||
(*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_BUSLOGIC &&
*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_LSILOGIC &&
*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_LSISAS1068 &&
*virtualDev != VIR_DOMAIN_CONTROLLER_MODEL_VMPVSCSI)) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'buslogic' or 'lsilogic' "
"or 'lsisas1068' or 'pvscsi' but found '%s'"),
virtualDev_name, virtualDev_string);
@@ -1578,9 +1848,9 @@ struct _virDomainDiskDef {
};*/
int
-esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
- int device, int busType, int controllerOrBus, int unit,
- virDomainDiskDefPtr *def)
+virVMXParseDisk(virVMXContext *ctx, virCapsPtr caps, virConfPtr conf,
+ int device, int busType, int controllerOrBus, int unit,
+ virDomainDiskDefPtr *def)
{
/*
* device = {VIR_DOMAIN_DISK_DEVICE_DISK, VIR_DOMAIN_DISK_DEVICE_CDROM}
@@ -1624,7 +1894,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
bool writeThrough = false;
if (def == NULL || *def != NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
@@ -1641,14 +1911,14 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
device == VIR_DOMAIN_DISK_DEVICE_CDROM) {
if (busType == VIR_DOMAIN_DISK_BUS_SCSI) {
if (controllerOrBus < 0 || controllerOrBus > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI controller index %d out of [0..3] range"),
controllerOrBus);
goto cleanup;
}
if (unit < 0 || unit > 15 || unit == 7) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("SCSI unit index %d out of [0..6,8..15] range"),
unit);
goto cleanup;
@@ -1668,14 +1938,14 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
}
} else if (busType == VIR_DOMAIN_DISK_BUS_IDE) {
if (controllerOrBus < 0 || controllerOrBus > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE bus index %d out of [0..1] range"),
controllerOrBus);
goto cleanup;
}
if (unit < 0 || unit > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("IDE unit index %d out of [0..1] range"), unit);
goto cleanup;
}
@@ -1691,7 +1961,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported bus type '%s' for device type '%s'"),
virDomainDiskBusTypeToString(busType),
virDomainDiskDeviceTypeToString(device));
@@ -1700,14 +1970,14 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
} else if (device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
if (busType == VIR_DOMAIN_DISK_BUS_FDC) {
if (controllerOrBus != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("FDC controller index %d out of [0] range"),
controllerOrBus);
goto cleanup;
}
if (unit < 0 || unit > 1) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("FDC unit index %d out of [0..1] range"),
unit);
goto cleanup;
@@ -1724,36 +1994,35 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported bus type '%s' for device type '%s'"),
virDomainDiskBusTypeToString(busType),
virDomainDiskDeviceTypeToString(device));
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported device type '%s'"),
virDomainDiskDeviceTypeToString(device));
goto cleanup;
}
- ESX_BUILD_VMX_NAME(present);
- ESX_BUILD_VMX_NAME(startConnected);
- ESX_BUILD_VMX_NAME(deviceType);
- ESX_BUILD_VMX_NAME(clientDevice);
- ESX_BUILD_VMX_NAME(fileType);
- ESX_BUILD_VMX_NAME(fileName);
- ESX_BUILD_VMX_NAME(writeThrough);
+ VMX_BUILD_NAME(present);
+ VMX_BUILD_NAME(startConnected);
+ VMX_BUILD_NAME(deviceType);
+ VMX_BUILD_NAME(clientDevice);
+ VMX_BUILD_NAME(fileType);
+ VMX_BUILD_NAME(fileName);
+ VMX_BUILD_NAME(writeThrough);
/* vmx:present */
- if (esxUtil_GetConfigBoolean(conf, present_name, &present, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, present_name, &present, false, true) < 0) {
goto cleanup;
}
/* vmx:startConnected */
- if (esxUtil_GetConfigBoolean(conf, startConnected_name, &startConnected,
- true, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, startConnected_name, &startConnected,
+ true, true) < 0) {
goto cleanup;
}
@@ -1763,13 +2032,13 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
}
/* vmx:deviceType -> def:type */
- if (esxUtil_GetConfigString(conf, deviceType_name, &deviceType, true) < 0) {
+ if (virVMXGetConfigString(conf, deviceType_name, &deviceType, true) < 0) {
goto cleanup;
}
/* vmx:clientDevice */
- if (esxUtil_GetConfigBoolean(conf, clientDevice_name, &clientDevice, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, clientDevice_name, &clientDevice, false,
+ true) < 0) {
goto cleanup;
}
@@ -1782,18 +2051,18 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
}
/* vmx:fileType -> def:type */
- if (esxUtil_GetConfigString(conf, fileType_name, &fileType, true) < 0) {
+ if (virVMXGetConfigString(conf, fileType_name, &fileType, true) < 0) {
goto cleanup;
}
/* vmx:fileName -> def:src, def:type */
- if (esxUtil_GetConfigString(conf, fileName_name, &fileName, false) < 0) {
+ if (virVMXGetConfigString(conf, fileName_name, &fileName, false) < 0) {
goto cleanup;
}
/* vmx:writeThrough -> def:cachemode */
- if (esxUtil_GetConfigBoolean(conf, writeThrough_name, &writeThrough, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, writeThrough_name, &writeThrough, false,
+ true) < 0) {
goto cleanup;
}
@@ -1804,7 +2073,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
if (busType == VIR_DOMAIN_DISK_BUS_SCSI &&
STRCASENEQ(deviceType, "scsi-hardDisk") &&
STRCASENEQ(deviceType, "disk")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'scsi-hardDisk' "
"or 'disk' but found '%s'"), deviceType_name,
deviceType);
@@ -1812,7 +2081,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
} else if (busType == VIR_DOMAIN_DISK_BUS_IDE &&
STRCASENEQ(deviceType, "ata-hardDisk") &&
STRCASENEQ(deviceType, "disk")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'ata-hardDisk' "
"or 'disk' but found '%s'"), deviceType_name,
deviceType);
@@ -1838,7 +2107,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
*/
goto ignore;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Invalid or not yet handled value '%s' for VMX entry "
"'%s'"), fileName, fileName_name);
goto cleanup;
@@ -1847,7 +2116,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
if (virFileHasSuffix(fileName, ".iso")) {
if (deviceType != NULL) {
if (STRCASENEQ(deviceType, "cdrom-image")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'cdrom-image' "
"but found '%s'"), deviceType_name, deviceType);
goto cleanup;
@@ -1874,7 +2143,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
fileName = NULL;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Invalid or not yet handled value '%s' for VMX entry "
"'%s'"), fileName, fileName_name);
goto cleanup;
@@ -1883,7 +2152,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
if (virFileHasSuffix(fileName, ".flp")) {
if (fileType != NULL) {
if (STRCASENEQ(fileType, "file")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'file' but "
"found '%s'"), fileType_name, fileType);
goto cleanup;
@@ -1902,19 +2171,19 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
fileName = NULL;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Invalid or not yet handled value '%s' for VMX entry "
"'%s'"), fileName, fileName_name);
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, _("Unsupported device type '%s'"),
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, _("Unsupported device type '%s'"),
virDomainDiskDeviceTypeToString(device));
goto cleanup;
}
if (virDomainDiskDefAssignAddress(caps, *def) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Could not assign address to disk '%s'"), (*def)->src);
goto cleanup;
}
@@ -1946,7 +2215,7 @@ esxVMX_ParseDisk(esxVMX_Context *ctx, virCapsPtr caps, virConfPtr conf,
int
-esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
+virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
{
int result = -1;
char prefix[48] = "";
@@ -1982,12 +2251,12 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
char *networkName = NULL;
if (def == NULL || *def != NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
if (controller < 0 || controller > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Ethernet controller index %d out of [0..3] range"),
controller);
return -1;
@@ -2000,26 +2269,25 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
snprintf(prefix, sizeof(prefix), "ethernet%d", controller);
- ESX_BUILD_VMX_NAME(present);
- ESX_BUILD_VMX_NAME(startConnected);
- ESX_BUILD_VMX_NAME(connectionType);
- ESX_BUILD_VMX_NAME(addressType);
- ESX_BUILD_VMX_NAME(generatedAddress);
- ESX_BUILD_VMX_NAME(address);
- ESX_BUILD_VMX_NAME(virtualDev);
- ESX_BUILD_VMX_NAME(features);
- ESX_BUILD_VMX_NAME(networkName);
- ESX_BUILD_VMX_NAME(vnet);
+ VMX_BUILD_NAME(present);
+ VMX_BUILD_NAME(startConnected);
+ VMX_BUILD_NAME(connectionType);
+ VMX_BUILD_NAME(addressType);
+ VMX_BUILD_NAME(generatedAddress);
+ VMX_BUILD_NAME(address);
+ VMX_BUILD_NAME(virtualDev);
+ VMX_BUILD_NAME(features);
+ VMX_BUILD_NAME(networkName);
+ VMX_BUILD_NAME(vnet);
/* vmx:present */
- if (esxUtil_GetConfigBoolean(conf, present_name, &present, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, present_name, &present, false, true) < 0) {
goto cleanup;
}
/* vmx:startConnected */
- if (esxUtil_GetConfigBoolean(conf, startConnected_name, &startConnected,
- true, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, startConnected_name, &startConnected,
+ true, true) < 0) {
goto cleanup;
}
@@ -2029,17 +2297,17 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
}
/* vmx:connectionType -> def:type */
- if (esxUtil_GetConfigString(conf, connectionType_name, &connectionType,
- true) < 0) {
+ if (virVMXGetConfigString(conf, connectionType_name, &connectionType,
+ true) < 0) {
goto cleanup;
}
/* vmx:addressType, vmx:generatedAddress, vmx:address -> def:mac */
- if (esxUtil_GetConfigString(conf, addressType_name, &addressType,
- true) < 0 ||
- esxUtil_GetConfigString(conf, generatedAddress_name, &generatedAddress,
- true) < 0 ||
- esxUtil_GetConfigString(conf, address_name, &address, true) < 0) {
+ if (virVMXGetConfigString(conf, addressType_name, &addressType,
+ true) < 0 ||
+ virVMXGetConfigString(conf, generatedAddress_name, &generatedAddress,
+ true) < 0 ||
+ virVMXGetConfigString(conf, address_name, &address, true) < 0) {
goto cleanup;
}
@@ -2047,7 +2315,7 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
STRCASEEQ(addressType, "vpx")) {
if (generatedAddress != NULL) {
if (virParseMacAddr(generatedAddress, (*def)->mac) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), generatedAddress_name,
generatedAddress);
@@ -2057,22 +2325,22 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
} else if (STRCASEEQ(addressType, "static")) {
if (address != NULL) {
if (virParseMacAddr(address, (*def)->mac) < 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be MAC address but "
"found '%s'"), address_name, address);
goto cleanup;
}
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'generated' or 'static' or "
"'vpx' but found '%s'"), addressType_name, addressType);
goto cleanup;
}
/* vmx:virtualDev, vmx:features -> def:model */
- if (esxUtil_GetConfigString(conf, virtualDev_name, &virtualDev, true) < 0 ||
- esxUtil_GetConfigLong(conf, features_name, &features, 0, true) < 0) {
+ if (virVMXGetConfigString(conf, virtualDev_name, &virtualDev, true) < 0 ||
+ virVMXGetConfigLong(conf, features_name, &features, 0, true) < 0) {
goto cleanup;
}
@@ -2081,7 +2349,7 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
STRCASENEQ(virtualDev, "vmxnet") &&
STRCASENEQ(virtualDev, "vmxnet3") &&
STRCASENEQ(virtualDev, "e1000")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'vlance' or 'vmxnet' or "
"'vmxnet3' or 'e1000' but found '%s'"), virtualDev_name,
virtualDev);
@@ -2104,14 +2372,14 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
if ((connectionType == NULL ||
STRCASEEQ(connectionType, "bridged") ||
STRCASEEQ(connectionType, "custom")) &&
- esxUtil_GetConfigString(conf, networkName_name, &networkName,
- false) < 0) {
+ virVMXGetConfigString(conf, networkName_name, &networkName,
+ false) < 0) {
goto cleanup;
}
/* vmx:vnet -> def:data.ifname */
if (connectionType != NULL && STRCASEEQ(connectionType, "custom") &&
- esxUtil_GetConfigString(conf, vnet_name, &vnet, false) < 0) {
+ virVMXGetConfigString(conf, vnet_name, &vnet, false) < 0) {
goto cleanup;
}
@@ -2125,13 +2393,13 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
networkName = NULL;
} else if (STRCASEEQ(connectionType, "hostonly")) {
/* FIXME */
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("No yet handled value '%s' for VMX entry '%s'"),
connectionType, connectionType_name);
goto cleanup;
} else if (STRCASEEQ(connectionType, "nat")) {
/* FIXME */
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("No yet handled value '%s' for VMX entry '%s'"),
connectionType, connectionType_name);
goto cleanup;
@@ -2145,7 +2413,7 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
networkName = NULL;
vnet = NULL;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Invalid value '%s' for VMX entry '%s'"), connectionType,
connectionType_name);
goto cleanup;
@@ -2180,8 +2448,8 @@ esxVMX_ParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def)
int
-esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
- virDomainChrDefPtr *def)
+virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
+ virDomainChrDefPtr *def)
{
int result = -1;
char prefix[48] = "";
@@ -2204,12 +2472,12 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
xmlURIPtr parsedUri = NULL;
if (def == NULL || *def != NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
if (port < 0 || port > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Serial port index %d out of [0..3] range"), port);
return -1;
}
@@ -2223,21 +2491,20 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
snprintf(prefix, sizeof(prefix), "serial%d", port);
- ESX_BUILD_VMX_NAME(present);
- ESX_BUILD_VMX_NAME(startConnected);
- ESX_BUILD_VMX_NAME(fileType);
- ESX_BUILD_VMX_NAME(fileName);
- ESX_BUILD_VMX_NAME_EXTRA(network_endPoint, "network.endPoint");
+ VMX_BUILD_NAME(present);
+ VMX_BUILD_NAME(startConnected);
+ VMX_BUILD_NAME(fileType);
+ VMX_BUILD_NAME(fileName);
+ VMX_BUILD_NAME_EXTRA(network_endPoint, "network.endPoint");
/* vmx:present */
- if (esxUtil_GetConfigBoolean(conf, present_name, &present, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, present_name, &present, false, true) < 0) {
goto cleanup;
}
/* vmx:startConnected */
- if (esxUtil_GetConfigBoolean(conf, startConnected_name, &startConnected,
- true, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, startConnected_name, &startConnected,
+ true, true) < 0) {
goto cleanup;
}
@@ -2247,18 +2514,18 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
}
/* vmx:fileType -> def:type */
- if (esxUtil_GetConfigString(conf, fileType_name, &fileType, false) < 0) {
+ if (virVMXGetConfigString(conf, fileType_name, &fileType, false) < 0) {
goto cleanup;
}
/* vmx:fileName -> def:data.file.path */
- if (esxUtil_GetConfigString(conf, fileName_name, &fileName, false) < 0) {
+ if (virVMXGetConfigString(conf, fileName_name, &fileName, false) < 0) {
goto cleanup;
}
/* vmx:network.endPoint -> def:data.tcp.listen */
- if (esxUtil_GetConfigString(conf, network_endPoint_name, &network_endPoint,
- true) < 0) {
+ if (virVMXGetConfigString(conf, network_endPoint_name, &network_endPoint,
+ true) < 0) {
goto cleanup;
}
@@ -2299,7 +2566,7 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
}
if (parsedUri->port == 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("VMX entry '%s' doesn't contain a port part"),
fileName_name);
goto cleanup;
@@ -2333,7 +2600,7 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
STRCASEEQ(parsedUri->scheme, "tcp6+ssl")) {
(*def)->data.tcp.protocol = VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("VMX entry '%s' contains unsupported scheme '%s'"),
fileName_name, parsedUri->scheme);
goto cleanup;
@@ -2344,13 +2611,13 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
} else if (STRCASEEQ(network_endPoint, "client")) {
(*def)->data.tcp.listen = 0;
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'server' or 'client' "
"but found '%s'"), network_endPoint_name, network_endPoint);
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'device', 'file' or 'pipe' "
"or 'network' but found '%s'"), fileType_name, fileType);
goto cleanup;
@@ -2383,8 +2650,8 @@ esxVMX_ParseSerial(esxVMX_Context *ctx, virConfPtr conf, int port,
int
-esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
- virDomainChrDefPtr *def)
+virVMXParseParallel(virVMXContext *ctx, virConfPtr conf, int port,
+ virDomainChrDefPtr *def)
{
int result = -1;
char prefix[48] = "";
@@ -2402,12 +2669,12 @@ esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
char *fileName = NULL;
if (def == NULL || *def != NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
if (port < 0 || port > 2) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Parallel port index %d out of [0..2] range"), port);
return -1;
}
@@ -2421,20 +2688,19 @@ esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
snprintf(prefix, sizeof(prefix), "parallel%d", port);
- ESX_BUILD_VMX_NAME(present);
- ESX_BUILD_VMX_NAME(startConnected);
- ESX_BUILD_VMX_NAME(fileType);
- ESX_BUILD_VMX_NAME(fileName);
+ VMX_BUILD_NAME(present);
+ VMX_BUILD_NAME(startConnected);
+ VMX_BUILD_NAME(fileType);
+ VMX_BUILD_NAME(fileName);
/* vmx:present */
- if (esxUtil_GetConfigBoolean(conf, present_name, &present, false,
- true) < 0) {
+ if (virVMXGetConfigBoolean(conf, present_name, &present, false, true) < 0) {
goto cleanup;
}
/* vmx:startConnected */
- if (esxUtil_GetConfigBoolean(conf, startConnected_name, &startConnected,
- true, true) < 0) {
+ if (virVMXGetConfigBoolean(conf, startConnected_name, &startConnected,
+ true, true) < 0) {
goto cleanup;
}
@@ -2444,12 +2710,12 @@ esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
}
/* vmx:fileType -> def:type */
- if (esxUtil_GetConfigString(conf, fileType_name, &fileType, false) < 0) {
+ if (virVMXGetConfigString(conf, fileType_name, &fileType, false) < 0) {
goto cleanup;
}
/* vmx:fileName -> def:data.file.path */
- if (esxUtil_GetConfigString(conf, fileName_name, &fileName, false) < 0) {
+ if (virVMXGetConfigString(conf, fileName_name, &fileName, false) < 0) {
goto cleanup;
}
@@ -2469,7 +2735,7 @@ esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
goto cleanup;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting VMX entry '%s' to be 'device' or 'file' but "
"found '%s'"), fileType_name, fileType);
goto cleanup;
@@ -2504,8 +2770,8 @@ esxVMX_ParseParallel(esxVMX_Context *ctx, virConfPtr conf, int port,
*/
char *
-esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
- esxVI_ProductVersion productVersion)
+virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps, virDomainDefPtr def,
+ int virtualHW_version)
{
char *vmx = NULL;
int i;
@@ -2520,15 +2786,15 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
bool floppy_present[2] = { false, false };
if (ctx->formatFileName == NULL) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
- _("esxVMX_Context has no formatFileName function set"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("virVMXContext has no formatFileName function set"));
return NULL;
}
memset(zero, 0, VIR_UUID_BUFLEN);
- if (def->virtType != VIR_DOMAIN_VIRT_VMWARE) { /* FIXME: maybe add VIR_DOMAIN_VIRT_ESX ? */
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ if (def->virtType != VIR_DOMAIN_VIRT_VMWARE) {
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting virt type to be '%s' but found '%s'"),
virDomainVirtTypeToString(VIR_DOMAIN_VIRT_VMWARE),
virDomainVirtTypeToString(def->virtType));
@@ -2542,27 +2808,8 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
virBufferAddLit(&buffer, "config.version = \"8\"\n");
/* vmx:virtualHW.version */
- switch (productVersion) {
- case esxVI_ProductVersion_ESX35:
- virBufferAddLit(&buffer, "virtualHW.version = \"4\"\n");
- break;
-
- case esxVI_ProductVersion_GSX20:
- case esxVI_ProductVersion_ESX40:
- case esxVI_ProductVersion_ESX41:
- case esxVI_ProductVersion_ESX4x:
- /* FIXME: Putting VPX* here is a hack until a more fine grained system is in place */
- case esxVI_ProductVersion_VPX40:
- case esxVI_ProductVersion_VPX41:
- case esxVI_ProductVersion_VPX4x:
- virBufferAddLit(&buffer, "virtualHW.version = \"7\"\n");
- break;
-
- default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Unexpected product version"));
- goto cleanup;
- }
+ virBufferVSprintf(&buffer, "virtualHW.version = \"%d\"\n",
+ virtualHW_version);
/* def:os.arch -> vmx:guestOS */
if (def->os.arch == NULL || STRCASEEQ(def->os.arch, "i686")) {
@@ -2570,7 +2817,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
} else if (STRCASEEQ(def->os.arch, "x86_64")) {
virBufferAddLit(&buffer, "guestOS = \"other-64\"\n");
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML attribute 'arch' of entry 'os/type' "
"to be 'i686' or 'x86_64' but found '%s'"), def->os.arch);
goto cleanup;
@@ -2583,7 +2830,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
} else if (def->os.smbios_mode == VIR_DOMAIN_SMBIOS_HOST) {
virBufferAddLit(&buffer, "smbios.reflecthost = \"true\"\n");
} else {
- ESX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED,
+ VMX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED,
_("Unsupported SMBIOS mode '%s'"),
virDomainSmbiosModeTypeToString(def->os.smbios_mode));
goto cleanup;
@@ -2603,13 +2850,13 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
}
/* def:name -> vmx:displayName */
- preliminaryDisplayName = esxUtil_EscapeHexPipe(def->name);
+ preliminaryDisplayName = virVMXEscapeHexPipe(def->name);
if (preliminaryDisplayName == NULL) {
goto cleanup;
}
- displayName = esxUtil_EscapeHexPercent(preliminaryDisplayName);
+ displayName = virVMXEscapeHexPercent(preliminaryDisplayName);
if (displayName == NULL) {
goto cleanup;
@@ -2619,14 +2866,14 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:description -> vmx:annotation */
if (def->description != NULL) {
- annotation = esxUtil_EscapeHexPipe(def->description);
+ annotation = virVMXEscapeHexPipe(def->description);
virBufferVSprintf(&buffer, "annotation = \"%s\"\n", annotation);
}
/* def:mem.max_balloon -> vmx:memsize */
if (def->mem.max_balloon <= 0 || def->mem.max_balloon % 4096 != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'memory' to be an unsigned "
"integer (multiple of 4096) but found %lld"),
(unsigned long long)def->mem.max_balloon);
@@ -2640,7 +2887,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:mem.cur_balloon -> vmx:sched.mem.max */
if (def->mem.cur_balloon < def->mem.max_balloon) {
if (def->mem.cur_balloon <= 0 || def->mem.cur_balloon % 1024 != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'currentMemory' to be an "
"unsigned integer (multiple of 1024) but found %llu"),
(unsigned long long)def->mem.cur_balloon);
@@ -2655,7 +2902,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:mem.min_guarantee -> vmx:sched.mem.minsize */
if (def->mem.min_guarantee > 0) {
if (def->mem.min_guarantee % 1024 != 0) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'memtune/min_guarantee' to "
"be an unsigned integer (multiple of 1024) but found %llu"),
(unsigned long long)def->mem.min_guarantee);
@@ -2669,13 +2916,13 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:maxvcpus -> vmx:numvcpus */
if (def->vcpus != def->maxvcpus) {
- ESX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ VMX_ERROR(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("No support for domain XML entry 'vcpu' attribute "
"'current'"));
goto cleanup;
}
if (def->maxvcpus <= 0 || (def->maxvcpus % 2 != 0 && def->maxvcpus != 1)) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'vcpu' to be an unsigned "
"integer (1 or a multiple of 2) but found %d"),
def->maxvcpus);
@@ -2697,7 +2944,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
}
if (sched_cpu_affinity_length < def->maxvcpus) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML attribute 'cpuset' of entry "
"'vcpu' to contain at least %d CPU(s)"),
def->maxvcpus);
@@ -2723,14 +2970,14 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
for (i = 0; i < def->ngraphics; ++i) {
switch (def->graphics[i]->type) {
case VIR_DOMAIN_GRAPHICS_TYPE_VNC:
- if (esxVMX_FormatVNC(def->graphics[i], &buffer) < 0) {
+ if (virVMXFormatVNC(def->graphics[i], &buffer) < 0) {
goto cleanup;
}
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported graphics type '%s'"),
virDomainGraphicsTypeToString(def->graphics[i]->type));
goto cleanup;
@@ -2739,14 +2986,14 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:disks */
for (i = 0; i < def->ndisks; ++i) {
- if (esxVMX_VerifyDiskAddress(caps, def->disks[i]) < 0 ||
- esxVMX_HandleLegacySCSIDiskDriverName(def, def->disks[i]) < 0) {
+ if (virVMXVerifyDiskAddress(caps, def->disks[i]) < 0 ||
+ virVMXHandleLegacySCSIDiskDriverName(def, def->disks[i]) < 0) {
goto cleanup;
}
}
- if (esxVMX_GatherSCSIControllers(ctx, def, scsi_virtualDev,
- scsi_present) < 0) {
+ if (virVMXGatherSCSIControllers(ctx, def, scsi_virtualDev,
+ scsi_present) < 0) {
goto cleanup;
}
@@ -2756,7 +3003,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
if (scsi_virtualDev[i] != -1) {
virBufferVSprintf(&buffer, "scsi%d.virtualDev = \"%s\"\n", i,
- esxVMX_SCSIControllerModelTypeToString
+ virVMXSCSIControllerModelTypeToString
(scsi_virtualDev[i]));
}
}
@@ -2765,29 +3012,29 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
for (i = 0; i < def->ndisks; ++i) {
switch (def->disks[i]->device) {
case VIR_DOMAIN_DISK_DEVICE_DISK:
- if (esxVMX_FormatHardDisk(ctx, def->disks[i], &buffer) < 0) {
+ if (virVMXFormatHardDisk(ctx, def->disks[i], &buffer) < 0) {
goto cleanup;
}
break;
case VIR_DOMAIN_DISK_DEVICE_CDROM:
- if (esxVMX_FormatCDROM(ctx, def->disks[i], &buffer) < 0) {
+ if (virVMXFormatCDROM(ctx, def->disks[i], &buffer) < 0) {
goto cleanup;
}
break;
case VIR_DOMAIN_DISK_DEVICE_FLOPPY:
- if (esxVMX_FormatFloppy(ctx, def->disks[i], &buffer,
- floppy_present) < 0) {
+ if (virVMXFormatFloppy(ctx, def->disks[i], &buffer,
+ floppy_present) < 0) {
goto cleanup;
}
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported disk device type '%s'"),
virDomainDiskDeviceTypeToString(def->disks[i]->device));
goto cleanup;
@@ -2806,7 +3053,7 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:nets */
for (i = 0; i < def->nnets; ++i) {
- if (esxVMX_FormatEthernet(def->nets[i], i, &buffer) < 0) {
+ if (virVMXFormatEthernet(def->nets[i], i, &buffer) < 0) {
goto cleanup;
}
}
@@ -2822,14 +3069,14 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
/* def:serials */
for (i = 0; i < def->nserials; ++i) {
- if (esxVMX_FormatSerial(ctx, def->serials[i], &buffer) < 0) {
+ if (virVMXFormatSerial(ctx, def->serials[i], &buffer) < 0) {
goto cleanup;
}
}
/* def:parallels */
for (i = 0; i < def->nparallels; ++i) {
- if (esxVMX_FormatParallel(ctx, def->parallels[i], &buffer) < 0) {
+ if (virVMXFormatParallel(ctx, def->parallels[i], &buffer) < 0) {
goto cleanup;
}
}
@@ -2857,10 +3104,10 @@ esxVMX_FormatConfig(esxVMX_Context *ctx, virCapsPtr caps, virDomainDefPtr def,
int
-esxVMX_FormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer)
+virVMXFormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer)
{
if (def->type != VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
@@ -2900,8 +3147,8 @@ esxVMX_FormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer)
int
-esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer)
+virVMXFormatHardDisk(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer)
{
int controllerOrBus, unit;
const char *busName = NULL;
@@ -2910,7 +3157,7 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
char *fileName = NULL;
if (def->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
@@ -2919,8 +3166,8 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
entryPrefix = "scsi";
deviceTypePrefix = "scsi";
- if (esxVMX_SCSIDiskNameToControllerAndUnit(def->dst, &controllerOrBus,
- &unit) < 0) {
+ if (virVMXSCSIDiskNameToControllerAndUnit(def->dst, &controllerOrBus,
+ &unit) < 0) {
return -1;
}
} else if (def->bus == VIR_DOMAIN_DISK_BUS_IDE) {
@@ -2928,19 +3175,19 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
entryPrefix = "ide";
deviceTypePrefix = "ata";
- if (esxVMX_IDEDiskNameToBusAndUnit(def->dst, &controllerOrBus,
+ if (virVMXIDEDiskNameToBusAndUnit(def->dst, &controllerOrBus,
&unit) < 0) {
return -1;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported bus type '%s' for harddisk"),
virDomainDiskBusTypeToString(def->bus));
return -1;
}
if (def->type != VIR_DOMAIN_DISK_TYPE_FILE) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("%s harddisk '%s' has unsupported type '%s', expecting '%s'"),
busName, def->dst, virDomainDiskTypeToString(def->type),
virDomainDiskTypeToString(VIR_DOMAIN_DISK_TYPE_FILE));
@@ -2954,7 +3201,7 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
if (def->src != NULL) {
if (! virFileHasSuffix(def->src, ".vmdk")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Image file for %s harddisk '%s' has unsupported suffix, "
"expecting '.vmdk'"), busName, def->dst);
return -1;
@@ -2977,7 +3224,7 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
virBufferVSprintf(buffer, "%s%d:%d.writeThrough = \"true\"\n",
entryPrefix, controllerOrBus, unit);
} else if (def->cachemode != VIR_DOMAIN_DISK_CACHE_DEFAULT) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("%s harddisk '%s' has unsupported cache mode '%s'"),
busName, def->dst,
virDomainDiskCacheTypeToString(def->cachemode));
@@ -2991,8 +3238,8 @@ esxVMX_FormatHardDisk(esxVMX_Context *ctx, virDomainDiskDefPtr def,
int
-esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer)
+virVMXFormatCDROM(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer)
{
int controllerOrBus, unit;
const char *busName = NULL;
@@ -3000,7 +3247,7 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
char *fileName = NULL;
if (def->device != VIR_DOMAIN_DISK_DEVICE_CDROM) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
@@ -3008,20 +3255,20 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
busName = "SCSI";
entryPrefix = "scsi";
- if (esxVMX_SCSIDiskNameToControllerAndUnit(def->dst, &controllerOrBus,
- &unit) < 0) {
+ if (virVMXSCSIDiskNameToControllerAndUnit(def->dst, &controllerOrBus,
+ &unit) < 0) {
return -1;
}
} else if (def->bus == VIR_DOMAIN_DISK_BUS_IDE) {
busName = "IDE";
entryPrefix = "ide";
- if (esxVMX_IDEDiskNameToBusAndUnit(def->dst, &controllerOrBus,
- &unit) < 0) {
+ if (virVMXIDEDiskNameToBusAndUnit(def->dst, &controllerOrBus,
+ &unit) < 0) {
return -1;
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported bus type '%s' for cdrom"),
virDomainDiskBusTypeToString(def->bus));
return -1;
@@ -3036,7 +3283,7 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
if (def->src != NULL) {
if (! virFileHasSuffix(def->src, ".iso")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Image file for %s cdrom '%s' has unsupported "
"suffix, expecting '.iso'"), busName, def->dst);
return -1;
@@ -3062,7 +3309,7 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
entryPrefix, controllerOrBus, unit, def->src);
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("%s cdrom '%s' has unsupported type '%s', expecting '%s' "
"or '%s'"), busName, def->dst,
virDomainDiskTypeToString(def->type),
@@ -3077,18 +3324,18 @@ esxVMX_FormatCDROM(esxVMX_Context *ctx, virDomainDiskDefPtr def,
int
-esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
- virBufferPtr buffer, bool floppy_present[2])
+virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer, bool floppy_present[2])
{
int unit;
char *fileName = NULL;
if (def->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
return -1;
}
- if (esxVMX_FloppyDiskNameToUnit(def->dst, &unit) < 0) {
+ if (virVMXFloppyDiskNameToUnit(def->dst, &unit) < 0) {
return -1;
}
@@ -3101,7 +3348,7 @@ esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
if (def->src != NULL) {
if (! virFileHasSuffix(def->src, ".flp")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Image file for floppy '%s' has unsupported "
"suffix, expecting '.flp'"), def->dst);
return -1;
@@ -3126,7 +3373,7 @@ esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
unit, def->src);
}
} else {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Floppy '%s' has unsupported type '%s', expecting '%s' "
"or '%s'"), def->dst,
virDomainDiskTypeToString(def->type),
@@ -3141,14 +3388,14 @@ esxVMX_FormatFloppy(esxVMX_Context *ctx, virDomainDiskDefPtr def,
int
-esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
- virBufferPtr buffer)
+virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
+ virBufferPtr buffer)
{
char mac_string[VIR_MAC_STRING_BUFLEN];
unsigned int prefix, suffix;
if (controller < 0 || controller > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Ethernet controller index %d out of [0..3] range"),
controller);
return -1;
@@ -3163,7 +3410,7 @@ esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
STRCASENEQ(def->model, "vmxnet2") &&
STRCASENEQ(def->model, "vmxnet3") &&
STRCASENEQ(def->model, "e1000")) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Expecting domain XML entry 'devices/interfase/model' "
"to be 'vlance' or 'vmxnet' or 'vmxnet2' or 'vmxnet3' "
"or 'e1000' but found '%s'"), def->model);
@@ -3200,7 +3447,7 @@ esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR, _("Unsupported net type '%s'"),
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR, _("Unsupported net type '%s'"),
virDomainNetTypeToString(def->type));
return -1;
}
@@ -3243,14 +3490,14 @@ esxVMX_FormatEthernet(virDomainNetDefPtr def, int controller,
int
-esxVMX_FormatSerial(esxVMX_Context *ctx, virDomainChrDefPtr def,
- virBufferPtr buffer)
+virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
+ virBufferPtr buffer)
{
char *fileName = NULL;
const char *protocol;
if (def->target.port < 0 || def->target.port > 3) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Serial port index %d out of [0..3] range"),
def->target.port);
return -1;
@@ -3315,7 +3562,7 @@ esxVMX_FormatSerial(esxVMX_Context *ctx, virDomainChrDefPtr def,
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported character device TCP protocol '%s'"),
virDomainChrTcpProtocolTypeToString(def->data.tcp.protocol));
return -1;
@@ -3332,7 +3579,7 @@ esxVMX_FormatSerial(esxVMX_Context *ctx, virDomainChrDefPtr def,
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported character device type '%s'"),
virDomainChrTypeToString(def->type));
return -1;
@@ -3349,13 +3596,13 @@ esxVMX_FormatSerial(esxVMX_Context *ctx, virDomainChrDefPtr def,
int
-esxVMX_FormatParallel(esxVMX_Context *ctx, virDomainChrDefPtr def,
- virBufferPtr buffer)
+virVMXFormatParallel(virVMXContext *ctx, virDomainChrDefPtr def,
+ virBufferPtr buffer)
{
char *fileName = NULL;
if (def->target.port < 0 || def->target.port > 2) {
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Parallel port index %d out of [0..2] range"),
def->target.port);
return -1;
@@ -3390,7 +3637,7 @@ esxVMX_FormatParallel(esxVMX_Context *ctx, virDomainChrDefPtr def,
break;
default:
- ESX_ERROR(VIR_ERR_INTERNAL_ERROR,
+ VMX_ERROR(VIR_ERR_INTERNAL_ERROR,
_("Unsupported character device type '%s'"),
virDomainChrTypeToString(def->type));
return -1;
diff --git a/src/vmx/vmx.h b/src/vmx/vmx.h
new file mode 100644
index 0000000..1a4fd9c
--- /dev/null
+++ b/src/vmx/vmx.h
@@ -0,0 +1,132 @@
+
+/*
+ * vmx.h: VMware VMX parsing/formatting functions
+ *
+ * Copyright (C) 2009-2010 Matthias Bolte <matthias.bolte(a)googlemail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __VIR_VMX_H__
+# define __VIR_VMX_H__
+
+# include <stdbool.h>
+
+# include "internal.h"
+# include "conf.h"
+# include "domain_conf.h"
+
+typedef struct _virVMXContext virVMXContext;
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Context
+ */
+
+typedef char * (*virVMXParseFileName)(const char *fileName, void *opaque);
+typedef char * (*virVMXFormatFileName)(const char *src, void *opaque);
+typedef int (*virVMXAutodetectSCSIControllerModel)(virDomainDiskDefPtr def,
+ int *model, void *opaque);
+
+/*
+ * virVMXParseFileName is only used by virVMXParseConfig.
+ * virVMXFormatFileName is only used by virVMXFormatConfig.
+ * virVMXAutodetectSCSIControllerModel is optionally used by virVMXFormatConfig.
+ */
+struct _virVMXContext {
+ void *opaque;
+ virVMXParseFileName parseFileName;
+ virVMXFormatFileName formatFileName;
+ virVMXAutodetectSCSIControllerModel autodetectSCSIControllerModel;
+};
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Helpers
+ */
+
+char *virVMXEscapeHex(const char *string, char escape, const char *special);
+
+# define virVMXEscapeHexPipe(_string) virVMXEscapeHex(_string, '|', "\"")
+
+# define virVMXEscapeHexPercent(_string) virVMXEscapeHex(_string, '%', "/\\")
+
+int virVMXUnescapeHex(char *string, char escape);
+
+# define virVMXUnescapeHexPipe(_string) virVMXUnescapeHex(_string, '|')
+
+# define virVMXUnescapeHexPercent(_string) virVMXUnescapeHex(_string, '%')
+
+char *virVMXConvertToUTF8(const char *encoding, const char *string);
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * VMX -> Domain XML
+ */
+
+virDomainDefPtr virVMXParseConfig(virVMXContext *ctx, virCapsPtr caps,
+ const char *vmx);
+
+int virVMXParseVNC(virConfPtr conf, virDomainGraphicsDefPtr *def);
+
+int virVMXParseSCSIController(virConfPtr conf, int controller, bool *present,
+ int *virtualDev);
+
+int virVMXParseDisk(virVMXContext *ctx, virCapsPtr caps, virConfPtr conf,
+ int device, int busType, int controllerOrBus, int unit,
+ virDomainDiskDefPtr *def);
+
+int virVMXParseEthernet(virConfPtr conf, int controller, virDomainNetDefPtr *def);
+
+int virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
+ virDomainChrDefPtr *def);
+
+int virVMXParseParallel(virVMXContext *ctx, virConfPtr conf, int port,
+ virDomainChrDefPtr *def);
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Domain XML -> VMX
+ */
+
+char *virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps,
+ virDomainDefPtr def, int virtualHW_version);
+
+int virVMXFormatVNC(virDomainGraphicsDefPtr def, virBufferPtr buffer);
+
+int virVMXFormatHardDisk(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer);
+
+int virVMXFormatCDROM(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer);
+
+int virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def,
+ virBufferPtr buffer, bool floppy_present[2]);
+
+int virVMXFormatEthernet(virDomainNetDefPtr def, int controller,
+ virBufferPtr buffer);
+
+int virVMXFormatSerial(virVMXContext *ctx, virDomainChrDefPtr def,
+ virBufferPtr buffer);
+
+int virVMXFormatParallel(virVMXContext *ctx, virDomainChrDefPtr def,
+ virBufferPtr buffer);
+
+#endif /* __VIR_VMX_H__ */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 69731d3..697b401 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -91,7 +91,11 @@ check_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
endif
if WITH_ESX
-check_PROGRAMS += esxutilstest vmx2xmltest xml2vmxtest
+check_PROGRAMS += esxutilstest
+endif
+
+if WITH_VMX
+check_PROGRAMS += vmx2xmltest xml2vmxtest
endif
if WITH_SECDRIVER_SELINUX
@@ -180,7 +184,11 @@ TESTS += nwfilterxml2xmltest
endif
if WITH_ESX
-TESTS += esxutilstest vmx2xmltest xml2vmxtest
+TESTS += esxutilstest
+endif
+
+if WITH_VMX
+TESTS += vmx2xmltest xml2vmxtest
endif
if WITH_SECDRIVER_SELINUX
@@ -292,18 +300,22 @@ esxutilstest_SOURCES = \
esxutilstest.c \
testutils.c testutils.h
esxutilstest_LDADD = ../src/libvirt_driver_esx.la $(LDADDS)
+else
+EXTRA_DIST += esxutilstest.c
+endif
+if WITH_VMX
vmx2xmltest_SOURCES = \
vmx2xmltest.c \
testutils.c testutils.h
-vmx2xmltest_LDADD = ../src/libvirt_driver_esx.la $(LDADDS)
+vmx2xmltest_LDADD = ../src/libvirt_vmx.la $(LDADDS)
xml2vmxtest_SOURCES = \
xml2vmxtest.c \
testutils.c testutils.h
-xml2vmxtest_LDADD = ../src/libvirt_driver_esx.la $(LDADDS)
+xml2vmxtest_LDADD = ../src/libvirt_vmx.la $(LDADDS)
else
-EXTRA_DIST += esxutilstest.c vmx2xmltest.c xml2vmxtest.c
+EXTRA_DIST += vmx2xmltest.c xml2vmxtest.c
endif
networkxml2xmltest_SOURCES = \
diff --git a/tests/esxutilstest.c b/tests/esxutilstest.c
index 97e154e..b6bf87b 100644
--- a/tests/esxutilstest.c
+++ b/tests/esxutilstest.c
@@ -10,6 +10,7 @@
# include "memory.h"
# include "testutils.h"
# include "util.h"
+# include "vmx/vmx.h"
# include "esx/esx_util.h"
# include "esx/esx_vi_types.h"
@@ -303,8 +304,8 @@ testConvertWindows1252ToUTF8(const void *data ATTRIBUTE_UNUSED)
for (i = 0; i < ARRAY_CARDINALITY(windows1252ToUTF8); ++i) {
VIR_FREE(utf8);
- utf8 = esxUtil_ConvertToUTF8("Windows-1252",
- windows1252ToUTF8[i].windows1252);
+ utf8 = virVMXConvertToUTF8("Windows-1252",
+ windows1252ToUTF8[i].windows1252);
if (utf8 == NULL) {
return -1;
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index ba50034..9378db3 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -1,6 +1,6 @@
#include <config.h>
-#ifdef WITH_ESX
+#ifdef WITH_VMX
# include <stdio.h>
# include <string.h>
@@ -9,12 +9,12 @@
# include "internal.h"
# include "memory.h"
# include "testutils.h"
-# include "esx/esx_vmx.h"
+# include "vmx/vmx.h"
static char *progname = NULL;
static char *abs_srcdir = NULL;
static virCapsPtr caps = NULL;
-static esxVMX_Context ctx;
+static virVMXContext ctx;
# define MAX_FILE 4096
@@ -68,8 +68,7 @@ testCapsInit(void)
}
static int
-testCompareFiles(const char *vmx, const char *xml,
- esxVI_ProductVersion productVersion)
+testCompareFiles(const char *vmx, const char *xml)
{
int result = -1;
char vmxData[MAX_FILE];
@@ -88,7 +87,7 @@ testCompareFiles(const char *vmx, const char *xml,
goto failure;
}
- def = esxVMX_ParseConfig(&ctx, caps, vmxData, productVersion);
+ def = virVMXParseConfig(&ctx, caps, vmxData);
if (def == NULL) {
err = virGetLastError();
@@ -121,7 +120,6 @@ testCompareFiles(const char *vmx, const char *xml,
struct testInfo {
const char *input;
const char *output;
- esxVI_ProductVersion version;
};
static int
@@ -136,7 +134,7 @@ testCompareHelper(const void *data)
snprintf(xml, PATH_MAX, "%s/vmx2xmldata/vmx2xml-%s.xml", abs_srcdir,
info->output);
- return testCompareFiles(vmx, xml, info->version);
+ return testCompareFiles(vmx, xml);
}
static char *
@@ -206,9 +204,9 @@ mymain(int argc, char **argv)
return EXIT_FAILURE;
}
-# define DO_TEST(_in, _out, _version) \
+# define DO_TEST(_in, _out) \
do { \
- struct testInfo info = { _in, _out, _version }; \
+ struct testInfo info = { _in, _out }; \
virResetLastError(); \
if (virtTestRun("VMware VMX-2-XML "_in" -> "_out, 1, \
testCompareHelper, &info) < 0) { \
@@ -227,65 +225,65 @@ mymain(int argc, char **argv)
ctx.formatFileName = NULL;
ctx.autodetectSCSIControllerModel = NULL;
- DO_TEST("case-insensitive-1", "case-insensitive-1", esxVI_ProductVersion_ESX35);
- DO_TEST("case-insensitive-2", "case-insensitive-2", esxVI_ProductVersion_ESX35);
+ DO_TEST("case-insensitive-1", "case-insensitive-1");
+ DO_TEST("case-insensitive-2", "case-insensitive-2");
- DO_TEST("minimal", "minimal", esxVI_ProductVersion_ESX35);
- DO_TEST("minimal-64bit", "minimal-64bit", esxVI_ProductVersion_ESX35);
+ DO_TEST("minimal", "minimal");
+ DO_TEST("minimal-64bit", "minimal-64bit");
- DO_TEST("graphics-vnc", "graphics-vnc", esxVI_ProductVersion_ESX35);
+ DO_TEST("graphics-vnc", "graphics-vnc");
- DO_TEST("scsi-driver", "scsi-driver", esxVI_ProductVersion_ESX35);
- DO_TEST("scsi-writethrough", "scsi-writethrough", esxVI_ProductVersion_ESX35);
+ DO_TEST("scsi-driver", "scsi-driver");
+ DO_TEST("scsi-writethrough", "scsi-writethrough");
- DO_TEST("harddisk-scsi-file", "harddisk-scsi-file", esxVI_ProductVersion_ESX35);
- DO_TEST("harddisk-ide-file", "harddisk-ide-file", esxVI_ProductVersion_ESX35);
+ DO_TEST("harddisk-scsi-file", "harddisk-scsi-file");
+ DO_TEST("harddisk-ide-file", "harddisk-ide-file");
- DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-ide-file", "cdrom-ide-file", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-ide-device", "cdrom-ide-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("cdrom-scsi-file", "cdrom-scsi-file");
+ DO_TEST("cdrom-scsi-device", "cdrom-scsi-device");
+ DO_TEST("cdrom-ide-file", "cdrom-ide-file");
+ DO_TEST("cdrom-ide-device", "cdrom-ide-device");
- DO_TEST("floppy-file", "floppy-file", esxVI_ProductVersion_ESX35);
- DO_TEST("floppy-device", "floppy-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("floppy-file", "floppy-file");
+ DO_TEST("floppy-device", "floppy-device");
- DO_TEST("ethernet-e1000", "ethernet-e1000", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-e1000", "ethernet-e1000");
+ DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2");
- DO_TEST("ethernet-custom", "ethernet-custom", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-bridged", "ethernet-bridged", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-custom", "ethernet-custom");
+ DO_TEST("ethernet-bridged", "ethernet-bridged");
- DO_TEST("ethernet-generated", "ethernet-generated", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-static", "ethernet-static", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-vpx", "ethernet-vpx", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-other", "ethernet-other", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-generated", "ethernet-generated");
+ DO_TEST("ethernet-static", "ethernet-static");
+ DO_TEST("ethernet-vpx", "ethernet-vpx");
+ DO_TEST("ethernet-other", "ethernet-other");
- DO_TEST("serial-file", "serial-file", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-device", "serial-device", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-pipe-client-app", "serial-pipe", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-pipe-server-vm", "serial-pipe", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-pipe-client-app", "serial-pipe", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-pipe-server-vm", "serial-pipe", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-network-server", "serial-network-server", esxVI_ProductVersion_ESX41);
- DO_TEST("serial-network-client", "serial-network-client", esxVI_ProductVersion_ESX41);
+ DO_TEST("serial-file", "serial-file");
+ DO_TEST("serial-device", "serial-device");
+ DO_TEST("serial-pipe-client-app", "serial-pipe");
+ DO_TEST("serial-pipe-server-vm", "serial-pipe");
+ DO_TEST("serial-pipe-client-app", "serial-pipe");
+ DO_TEST("serial-pipe-server-vm", "serial-pipe");
+ DO_TEST("serial-network-server", "serial-network-server");
+ DO_TEST("serial-network-client", "serial-network-client");
- DO_TEST("parallel-file", "parallel-file", esxVI_ProductVersion_ESX35);
- DO_TEST("parallel-device", "parallel-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("parallel-file", "parallel-file");
+ DO_TEST("parallel-device", "parallel-device");
- DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", esxVI_ProductVersion_ESX40);
+ DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1");
+ DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2");
+ DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3");
+ DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4");
+ DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5");
- DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4", esxVI_ProductVersion_ESX35);
+ DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1");
+ DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2");
+ DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3");
+ DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4");
- DO_TEST("annotation", "annotation", esxVI_ProductVersion_ESX35);
+ DO_TEST("annotation", "annotation");
- DO_TEST("smbios", "smbios", esxVI_ProductVersion_ESX35);
+ DO_TEST("smbios", "smbios");
virCapabilitiesFree(caps);
@@ -301,4 +299,4 @@ int main (void)
return 77; /* means 'test skipped' for automake */
}
-#endif /* WITH_ESX */
+#endif /* WITH_VMX */
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index 7041877..6a39582 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -1,6 +1,6 @@
#include <config.h>
-#ifdef WITH_ESX
+#ifdef WITH_VMX
# include <stdio.h>
# include <string.h>
@@ -9,12 +9,12 @@
# include "internal.h"
# include "memory.h"
# include "testutils.h"
-# include "esx/esx_vmx.h"
+# include "vmx/vmx.h"
static char *progname = NULL;
static char *abs_srcdir = NULL;
static virCapsPtr caps = NULL;
-static esxVMX_Context ctx;
+static virVMXContext ctx;
# define MAX_FILE 4096
@@ -68,8 +68,7 @@ testCapsInit(void)
}
static int
-testCompareFiles(const char *xml, const char *vmx,
- esxVI_ProductVersion productVersion)
+testCompareFiles(const char *xml, const char *vmx, int virtualHW_version)
{
int result = -1;
char xmlData[MAX_FILE];
@@ -93,7 +92,7 @@ testCompareFiles(const char *xml, const char *vmx,
goto failure;
}
- formatted = esxVMX_FormatConfig(&ctx, caps, def, productVersion);
+ formatted = virVMXFormatConfig(&ctx, caps, def, virtualHW_version);
if (formatted == NULL) {
goto failure;
@@ -116,7 +115,7 @@ testCompareFiles(const char *xml, const char *vmx,
struct testInfo {
const char *input;
const char *output;
- esxVI_ProductVersion version;
+ int virtualHW_version;
};
static int
@@ -131,7 +130,7 @@ testCompareHelper(const void *data)
snprintf(vmx, PATH_MAX, "%s/xml2vmxdata/xml2vmx-%s.vmx", abs_srcdir,
info->output);
- return testCompareFiles(xml, vmx, info->version);
+ return testCompareFiles(xml, vmx, info->virtualHW_version);
}
static int
@@ -147,17 +146,35 @@ static char *
testFormatVMXFileName(const char *src, void *opaque ATTRIBUTE_UNUSED)
{
bool success = false;
+ char *copyOfDatastorePath = NULL;
+ char *tmp = NULL;
+ char *saveptr = NULL;
char *datastoreName = NULL;
char *directoryAndFileName = NULL;
char *absolutePath = NULL;
if (STRPREFIX(src, "[")) {
/* Found potential datastore path */
- if (esxUtil_ParseDatastorePath(src, &datastoreName, NULL,
- &directoryAndFileName) < 0) {
+ copyOfDatastorePath = strdup(src);
+
+ if (copyOfDatastorePath == NULL) {
+ goto cleanup;
+ }
+
+ /* Expected format: '[<datastore>] <path>' where <path> is optional */
+ if ((tmp = STRSKIP(copyOfDatastorePath, "[")) == NULL || *tmp == ']' ||
+ (datastoreName = strtok_r(tmp, "]", &saveptr)) == NULL) {
goto cleanup;
}
+ directoryAndFileName = strtok_r(NULL, "", &saveptr);
+
+ if (directoryAndFileName == NULL) {
+ directoryAndFileName = (char *)"";
+ } else {
+ directoryAndFileName += strspn(directoryAndFileName, " ");
+ }
+
virAsprintf(&absolutePath, "/vmfs/volumes/%s/%s", datastoreName,
directoryAndFileName);
} else if (STRPREFIX(src, "/")) {
@@ -175,8 +192,7 @@ testFormatVMXFileName(const char *src, void *opaque ATTRIBUTE_UNUSED)
VIR_FREE(absolutePath);
}
- VIR_FREE(datastoreName);
- VIR_FREE(directoryAndFileName);
+ VIR_FREE(copyOfDatastorePath);
return absolutePath;
}
@@ -226,59 +242,59 @@ mymain(int argc, char **argv)
ctx.formatFileName = testFormatVMXFileName;
ctx.autodetectSCSIControllerModel = testAutodetectSCSIControllerModel;
- DO_TEST("minimal", "minimal", esxVI_ProductVersion_ESX35);
- DO_TEST("minimal-64bit", "minimal-64bit", esxVI_ProductVersion_ESX35);
+ DO_TEST("minimal", "minimal", 4);
+ DO_TEST("minimal-64bit", "minimal-64bit", 4);
- DO_TEST("graphics-vnc", "graphics-vnc", esxVI_ProductVersion_ESX35);
+ DO_TEST("graphics-vnc", "graphics-vnc", 4);
- DO_TEST("scsi-driver", "scsi-driver", esxVI_ProductVersion_ESX35);
- DO_TEST("scsi-writethrough", "scsi-writethrough", esxVI_ProductVersion_ESX35);
+ DO_TEST("scsi-driver", "scsi-driver", 4);
+ DO_TEST("scsi-writethrough", "scsi-writethrough", 4);
- DO_TEST("harddisk-scsi-file", "harddisk-scsi-file", esxVI_ProductVersion_ESX35);
- DO_TEST("harddisk-ide-file", "harddisk-ide-file", esxVI_ProductVersion_ESX35);
+ DO_TEST("harddisk-scsi-file", "harddisk-scsi-file", 4);
+ DO_TEST("harddisk-ide-file", "harddisk-ide-file", 4);
- DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-ide-file", "cdrom-ide-file", esxVI_ProductVersion_ESX35);
- DO_TEST("cdrom-ide-device", "cdrom-ide-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", 4);
+ DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", 4);
+ DO_TEST("cdrom-ide-file", "cdrom-ide-file", 4);
+ DO_TEST("cdrom-ide-device", "cdrom-ide-device", 4);
- DO_TEST("floppy-file", "floppy-file", esxVI_ProductVersion_ESX35);
- DO_TEST("floppy-device", "floppy-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("floppy-file", "floppy-file", 4);
+ DO_TEST("floppy-device", "floppy-device", 4);
- DO_TEST("ethernet-e1000", "ethernet-e1000", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-e1000", "ethernet-e1000", 4);
+ DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", 4);
- DO_TEST("ethernet-custom", "ethernet-custom", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-bridged", "ethernet-bridged", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-custom", "ethernet-custom", 4);
+ DO_TEST("ethernet-bridged", "ethernet-bridged", 4);
- DO_TEST("ethernet-generated", "ethernet-generated", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-static", "ethernet-static", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-vpx", "ethernet-vpx", esxVI_ProductVersion_ESX35);
- DO_TEST("ethernet-other", "ethernet-other", esxVI_ProductVersion_ESX35);
+ DO_TEST("ethernet-generated", "ethernet-generated", 4);
+ DO_TEST("ethernet-static", "ethernet-static", 4);
+ DO_TEST("ethernet-vpx", "ethernet-vpx", 4);
+ DO_TEST("ethernet-other", "ethernet-other", 4);
- DO_TEST("serial-file", "serial-file", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-device", "serial-device", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-pipe", "serial-pipe", esxVI_ProductVersion_ESX35);
- DO_TEST("serial-network-server", "serial-network-server", esxVI_ProductVersion_ESX41);
- DO_TEST("serial-network-client", "serial-network-client", esxVI_ProductVersion_ESX41);
+ DO_TEST("serial-file", "serial-file", 4);
+ DO_TEST("serial-device", "serial-device", 4);
+ DO_TEST("serial-pipe", "serial-pipe", 4);
+ DO_TEST("serial-network-server", "serial-network-server", 7);
+ DO_TEST("serial-network-client", "serial-network-client", 7);
- DO_TEST("parallel-file", "parallel-file", esxVI_ProductVersion_ESX35);
- DO_TEST("parallel-device", "parallel-device", esxVI_ProductVersion_ESX35);
+ DO_TEST("parallel-file", "parallel-file", 4);
+ DO_TEST("parallel-device", "parallel-device", 4);
- DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", esxVI_ProductVersion_ESX35);
- DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", esxVI_ProductVersion_ESX35);
+ DO_TEST("esx-in-the-wild-1", "esx-in-the-wild-1", 4);
+ DO_TEST("esx-in-the-wild-2", "esx-in-the-wild-2", 4);
+ DO_TEST("esx-in-the-wild-3", "esx-in-the-wild-3", 4);
+ DO_TEST("esx-in-the-wild-4", "esx-in-the-wild-4", 4);
+ DO_TEST("esx-in-the-wild-5", "esx-in-the-wild-5", 4);
- DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3", esxVI_ProductVersion_ESX35);
- DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4", esxVI_ProductVersion_ESX35);
+ DO_TEST("gsx-in-the-wild-1", "gsx-in-the-wild-1", 4);
+ DO_TEST("gsx-in-the-wild-2", "gsx-in-the-wild-2", 4);
+ DO_TEST("gsx-in-the-wild-3", "gsx-in-the-wild-3", 4);
+ DO_TEST("gsx-in-the-wild-4", "gsx-in-the-wild-4", 4);
- DO_TEST("annotation", "annotation", esxVI_ProductVersion_ESX35);
+ DO_TEST("annotation", "annotation", 4);
- DO_TEST("smbios", "smbios", esxVI_ProductVersion_ESX35);
+ DO_TEST("smbios", "smbios", 4);
virCapabilitiesFree(caps);
@@ -294,4 +310,4 @@ int main (void)
return 77; /* means 'test skipped' for automake */
}
-#endif /* WITH_ESX */
+#endif /* WITH_VMX */
--
1.7.0.4
14 years
[libvirt] [PATCH] esx: Fix cluster resource lookup when connecting to a vCenter
by Matthias Bolte
Connecting to a ESX(i) server that is part of a cluster failed
when the connection also involved a vCenter.
Accept ClusterComputeResource type in addition to ComputeResource
type in the object lookup function.
Reported by Guillaume Le Louët.
---
src/esx/esx_vi.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index 74a2a42..482a118 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -538,7 +538,7 @@ esxVI_Context_LookupObjectsByPath(esxVI_Context *ctx,
goto cleanup;
}
- /* Lookup ComputeResource */
+ /* Lookup (Cluster)ComputeResource */
esxVI_String_Free(&propertyNameList);
if (esxVI_String_AppendValueListToList(&propertyNameList,
@@ -699,7 +699,7 @@ esxVI_Context_LookupObjectsByHostSystemIp(esxVI_Context *ctx,
goto cleanup;
}
- /* Lookup ComputeResource */
+ /* Lookup (Cluster)ComputeResource */
esxVI_String_Free(&propertyNameList);
if (esxVI_String_AppendValueListToList(&propertyNameList,
@@ -1654,7 +1654,8 @@ esxVI_LookupObjectContentByType(esxVI_Context *ctx,
if (STRNEQ(root->type, type)) {
if (STREQ(root->type, "Folder")) {
- if (STREQ(type, "Datacenter") || STREQ(type, "ComputeResource")) {
+ if (STREQ(type, "Datacenter") || STREQ(type, "ComputeResource") ||
+ STREQ(type, "ClusterComputeResource")) {
objectSpec->selectSet = ctx->selectSet_folderToChildEntity;
} else {
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR,
@@ -1662,7 +1663,8 @@ esxVI_LookupObjectContentByType(esxVI_Context *ctx,
type, root->type);
goto cleanup;
}
- } else if (STREQ(root->type, "ComputeResource")) {
+ } else if (STREQ(root->type, "ComputeResource") ||
+ STREQ(root->type, "ClusterComputeResource")) {
if (STREQ(type, "HostSystem")) {
objectSpec->selectSet = ctx->selectSet_computeResourceToHost;
} else if (STREQ(type, "Datacenter")) {
@@ -1674,7 +1676,8 @@ esxVI_LookupObjectContentByType(esxVI_Context *ctx,
goto cleanup;
}
} else if (STREQ(root->type, "HostSystem")) {
- if (STREQ(type, "ComputeResource")) {
+ if (STREQ(type, "ComputeResource") ||
+ STREQ(type, "ClusterComputeResource")) {
objectSpec->selectSet = ctx->selectSet_hostSystemToParent;
} else if (STREQ(type, "VirtualMachine")) {
objectSpec->selectSet = ctx->selectSet_hostSystemToVm;
--
1.7.0.4
14 years
[libvirt] [PATCH] maint: avoid space-tab
by Eric Blake
* daemon/Makefile.am: Avoid spurious space before tabs.
* src/Makefile.am: Likewise.
* examples/dominfo/Makefile.am: Likewise.
* examples/domsuspend/Makefile.am: Likewise.
* tools/Makefile.am: Likewise.
* src/datatypes.h (VIR_CONNECT_MAGIC): Likewise.
* src/internal.h (TODO): Likewise.
* src/qemu/qemu_monitor.h (QEMU_MONITOR_MIGRATE): Likewise.
* src/xen/xen_hypervisor.c (XEN_V2_OP_GETAVAILHEAP): Likewise.
* src/xen/xs_internal.h: Likewise.
---
Pushing this under the trivial rule - I've got my editor set up
to highlight suspicious spacing, and when I noticed it in one
file, I decided to scrub the rest of the source tree.
There are also space-tab instances in a binary blob and in
docs/api_extension (where there are literal patchsets
containing doc changes that end up creating space-tab), but
those instances obviously should not be changed.
daemon/Makefile.am | 4 ++--
examples/dominfo/Makefile.am | 3 ++-
examples/domsuspend/Makefile.am | 3 ++-
src/Makefile.am | 4 ++--
src/datatypes.h | 4 ++--
src/internal.h | 2 +-
src/qemu/qemu_monitor.h | 2 +-
src/xen/xen_hypervisor.c | 2 +-
src/xen/xs_internal.h | 14 +++++++-------
tools/Makefile.am | 6 +++---
10 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 72778e5..3ffb7be 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -90,8 +90,8 @@ libvirtd_CFLAGS = \
-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
-DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\""
-libvirtd_LDFLAGS = \
- $(WARN_CFLAGS) \
+libvirtd_LDFLAGS = \
+ $(WARN_CFLAGS) \
$(COVERAGE_LDFLAGS)
libvirtd_LDADD = \
diff --git a/examples/dominfo/Makefile.am b/examples/dominfo/Makefile.am
index 2913e5b..678de68 100644
--- a/examples/dominfo/Makefile.am
+++ b/examples/dominfo/Makefile.am
@@ -1,6 +1,7 @@
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
-LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la $(COVERAGE_LDFLAGS)
+LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
+ $(COVERAGE_LDFLAGS)
noinst_PROGRAMS=info1
diff --git a/examples/domsuspend/Makefile.am b/examples/domsuspend/Makefile.am
index 14b4205..2c277a4 100644
--- a/examples/domsuspend/Makefile.am
+++ b/examples/domsuspend/Makefile.am
@@ -1,6 +1,7 @@
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
-LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la $(COVERAGE_LDFLAGS)
+LDADDS = $(STATIC_BINARIES) $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
+ $(COVERAGE_LDFLAGS)
noinst_PROGRAMS=suspend
diff --git a/src/Makefile.am b/src/Makefile.am
index fe34b7b..10c3c7e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -254,7 +254,7 @@ OPENVZ_DRIVER_SOURCES = \
openvz/openvz_conf.c openvz/openvz_conf.h \
openvz/openvz_driver.c openvz/openvz_driver.h
-VMWARE_DRIVER_SOURCES = \
+VMWARE_DRIVER_SOURCES = \
vmware/vmware_driver.c vmware/vmware_driver.h \
vmware/vmware_conf.c vmware/vmware_conf.h
@@ -266,7 +266,7 @@ VBOX_DRIVER_SOURCES = \
vbox/vbox_V3_1.c vbox/vbox_CAPI_v3_1.h \
vbox/vbox_V3_2.c vbox/vbox_CAPI_v3_2.h
-VBOX_DRIVER_EXTRA_DIST = \
+VBOX_DRIVER_EXTRA_DIST = \
vbox/vbox_tmpl.c vbox/README \
vbox/vbox_MSCOMGlue.c vbox/vbox_MSCOMGlue.h \
vbox/vbox_XPCOMCGlue.c vbox/vbox_XPCOMCGlue.h
diff --git a/src/datatypes.h b/src/datatypes.h
index bbeb7cf..07fa582 100644
--- a/src/datatypes.h
+++ b/src/datatypes.h
@@ -1,7 +1,7 @@
/*
* datatypes.h: management of structs for public data types
*
- * Copyright (C) 2006-2008 Red Hat, Inc.
+ * Copyright (C) 2006-2008, 2010 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -34,7 +34,7 @@
* magic value used to protect the API when pointers to connection structures
* are passed down by the uers.
*/
-# define VIR_CONNECT_MAGIC 0x4F23DEAD
+# define VIR_CONNECT_MAGIC 0x4F23DEAD
# define VIR_IS_CONNECT(obj) ((obj) && (obj)->magic==VIR_CONNECT_MAGIC)
diff --git a/src/internal.h b/src/internal.h
index 8473c3c..038b862 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -200,7 +200,7 @@
*
* macro to flag unimplemented blocks
*/
-# define TODO \
+# define TODO \
fprintf(stderr, "Unimplemented block at %s:%d\n", \
__FILE__, __LINE__);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 4d7aaf7..3ac5024 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -247,7 +247,7 @@ int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
unsigned long long *total);
typedef enum {
- QEMU_MONITOR_MIGRATE_BACKGROUND = 1 << 0,
+ QEMU_MONITOR_MIGRATE_BACKGROUND = 1 << 0,
QEMU_MONITOR_MIGRATE_NON_SHARED_DISK = 1 << 1, /* migration with non-shared storage with full disk copy */
QEMU_MONITOR_MIGRATE_NON_SHARED_INC = 1 << 2, /* migration with non-shared storage with incremental copy */
QEMU_MONITOR_MIGRATION_FLAGS_LAST
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index b7661c0..ead8ee9 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -647,7 +647,7 @@ typedef struct xen_v2d5_setvcpumap xen_v2d5_getvcpumap;
/*
* from V2 we get the available heap information
*/
-#define XEN_V2_OP_GETAVAILHEAP 9
+#define XEN_V2_OP_GETAVAILHEAP 9
/*
* from V2 we get the scheduler parameter
diff --git a/src/xen/xs_internal.h b/src/xen/xs_internal.h
index afbc15a..d58e6c0 100644
--- a/src/xen/xs_internal.h
+++ b/src/xen/xs_internal.h
@@ -1,7 +1,7 @@
/*
* xs_internal.h: internal API for access to XenStore
*
- * Copyright (C) 2006 Red Hat, Inc.
+ * Copyright (C) 2006, 2010 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
@@ -24,17 +24,17 @@ int xenStoreClose (virConnectPtr conn);
int xenStoreGetDomainInfo (virDomainPtr domain,
virDomainInfoPtr info);
int xenStoreNumOfDomains (virConnectPtr conn);
-int xenStoreListDomains (virConnectPtr conn,
+int xenStoreListDomains (virConnectPtr conn,
int *ids,
int maxids);
-virDomainPtr xenStoreLookupByName(virConnectPtr conn,
+virDomainPtr xenStoreLookupByName(virConnectPtr conn,
const char *name);
-unsigned long xenStoreGetMaxMemory (virDomainPtr domain);
+unsigned long xenStoreGetMaxMemory (virDomainPtr domain);
int xenStoreDomainSetMemory (virDomainPtr domain,
unsigned long memory);
-unsigned long xenStoreDomainGetMaxMemory(virDomainPtr domain);
-int xenStoreDomainShutdown (virDomainPtr domain);
-int xenStoreDomainReboot (virDomainPtr domain,
+unsigned long xenStoreDomainGetMaxMemory(virDomainPtr domain);
+int xenStoreDomainShutdown (virDomainPtr domain);
+int xenStoreDomainReboot (virDomainPtr domain,
unsigned int flags);
int xenStoreDomainGetVNCPort(virConnectPtr conn,
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 8a5fb52..271c11b 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -9,9 +9,9 @@ ICON_FILES = \
virsh_win_icon.rc
EXTRA_DIST = \
- $(ICON_FILES) \
- virt-xml-validate.in \
- virt-pki-validate.in \
+ $(ICON_FILES) \
+ virt-xml-validate.in \
+ virt-pki-validate.in \
virsh.pod \
libvirt-guests.init.in \
libvirt-guests.sysconf
--
1.7.3.3
14 years
[libvirt] [PATCH] command: avoid hanging on daemon processes
by Eric Blake
* src/util/command.c (virCommandRun): Don't capture output on
daemons.
* tests/commandtest.c (test18): Expose the bug.
Reported by Laine Stump.
---
Even though 'test4' in commandtest created a daemon, the daemon
exits rather quickly, so that no one noticed the problem. And
the existing qemu daemon use of virCommand was supplying log
file descriptors, rather than letting virCommand capture output.
I've verified that with just the tests/ changes, that the testsuite
fails (termination due to SIGALRM).
src/util/command.c | 24 ++++++++++++++----------
tests/commandtest.c | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/src/util/command.c b/src/util/command.c
index f9d475e..abd2dc4 100644
--- a/src/util/command.c
+++ b/src/util/command.c
@@ -1008,17 +1008,21 @@ virCommandRun(virCommandPtr cmd, int *exitstatus)
}
/* If caller hasn't requested capture of stdout/err, then capture
- * it ourselves so we can log it.
+ * it ourselves so we can log it. But the intermediate child for
+ * a daemon has no expected output, and we don't want our
+ * capturing pipes passed on to the daemon grandchild.
*/
- if (!cmd->outfdptr) {
- cmd->outfdptr = &cmd->outfd;
- cmd->outbuf = &outbuf;
- string_io = true;
- }
- if (!cmd->errfdptr) {
- cmd->errfdptr = &cmd->errfd;
- cmd->errbuf = &errbuf;
- string_io = true;
+ if (!(cmd->flags & VIR_EXEC_DAEMON)) {
+ if (!cmd->outfdptr) {
+ cmd->outfdptr = &cmd->outfd;
+ cmd->outbuf = &outbuf;
+ string_io = true;
+ }
+ if (!cmd->errfdptr) {
+ cmd->errfdptr = &cmd->errfd;
+ cmd->errbuf = &errbuf;
+ string_io = true;
+ }
}
if (virCommandRunAsync(cmd, NULL) < 0) {
diff --git a/tests/commandtest.c b/tests/commandtest.c
index 333dd4d..38a7816 100644
--- a/tests/commandtest.c
+++ b/tests/commandtest.c
@@ -668,6 +668,47 @@ cleanup:
return ret;
}
+/*
+ * Run long-running daemon, to ensure no hang.
+ */
+static int test18(const void *unused ATTRIBUTE_UNUSED)
+{
+ virCommandPtr cmd = virCommandNewArgList("sleep", "100", NULL);
+ char *pidfile = virFilePid(abs_builddir, "commandhelper");
+ pid_t pid;
+ int ret = -1;
+
+ if (!pidfile)
+ goto cleanup;
+
+ virCommandSetPidFile(cmd, pidfile);
+ virCommandDaemonize(cmd);
+
+ alarm(5);
+ if (virCommandRun(cmd, NULL) < 0) {
+ virErrorPtr err = virGetLastError();
+ printf("Cannot run child %s\n", err->message);
+ goto cleanup;
+ }
+ alarm(0);
+
+ if (virFileReadPid(abs_builddir, "commandhelper", &pid) != 0) {
+ printf("cannot read pidfile\n");
+ goto cleanup;
+ }
+ while (kill(pid, SIGINT) != -1)
+ usleep(100*1000);
+
+ ret = 0;
+
+cleanup:
+ virCommandFree(cmd);
+ unlink(pidfile);
+ VIR_FREE(pidfile);
+ return ret;
+}
+
+
static int
mymain(int argc, char **argv)
{
@@ -732,6 +773,7 @@ mymain(int argc, char **argv)
DO_TEST(test15);
DO_TEST(test16);
DO_TEST(test17);
+ DO_TEST(test18);
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
--
1.7.3.3
14 years
[libvirt] Anyone interested in forming a libvirt "docs" team?
by Justin Clift
Hi all,
There's a lot of documentation for libvirt that needs improving, so wondering
if anyone would be interested in forming a libvirt "docs" team to help make
that happen?
While some of the documentation needs people familiar with specific pieces
of libvirt, there's also a lot that doesn't, and just needs people with some free
time and willingness to help.
Anyone up for it? :)
Regards and best wishes,
Justin Clift
14 years
[libvirt] [PATCH] [v3] storage: Ignore dangling symbolic link for filesystem pool
by Osier Yang
If there is a dangling symbolic link in filesystem pool, the pool
will fail to start or refresh, this patch is to fix it by ignoring
it with a warning log.
---
src/storage/storage_backend.c | 10 +++++++++-
src/storage/storage_backend_fs.c | 2 +-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index 10ea33c..f4a17a2 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -977,7 +977,8 @@ virStorageBackendForType(int type) {
/*
* Allows caller to silently ignore files with improper mode
*
- * Returns -1 on error, -2 if file mode is unexpected.
+ * Returns -1 on error, -2 if file mode is unexpected or the
+ * volume is a dangling symbolic link.
*/
int
virStorageBackendVolOpenCheckMode(const char *path, unsigned int flags)
@@ -986,6 +987,13 @@ virStorageBackendVolOpenCheckMode(const char *path, unsigned int flags)
struct stat sb;
if ((fd = open(path, O_RDONLY|O_NONBLOCK|O_NOCTTY)) < 0) {
+ if (stat(path, &sb) < 0 &&
+ (errno == ENOENT || errno == ELOOP)) {
+ VIR_WARN(_("cannot open volume '%s' :%s"), path,
+ strerror(errno));
+ return -2;
+ }
+
virReportSystemError(errno,
_("cannot open volume '%s'"),
path);
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index d916d2d..ff39d48 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -651,7 +651,7 @@ virStorageBackendFileSystemRefresh(virConnectPtr conn ATTRIBUTE_UNUSED,
goto cleanup;
else {
/* Silently ignore non-regular files,
- * eg '.' '..', 'lost+found' */
+ * eg '.' '..', 'lost+found', dangling symbolic link */
virStorageVolDefFree(vol);
vol = NULL;
continue;
--
1.7.3.2
14 years
[libvirt] [PATCH 1/1] Skip file-based security checks for network disks
by Josh Durgin
Network disks are accessed by qemu directly, and have no
associated file on the host, so checking for file ownership etc.
is unnecessary.
Signed-off-by: Josh Durgin <joshd(a)hq.newdream.net>
---
src/conf/domain_conf.c | 2 +-
src/qemu/qemu_security_dac.c | 2 +-
src/security/security_apparmor.c | 2 +-
src/security/security_selinux.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d516fbe..c857a89 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8353,7 +8353,7 @@ int virDomainDiskDefForeachPath(virDomainDiskDefPtr disk,
size_t depth = 0;
char *nextpath = NULL;
- if (!disk->src)
+ if (!disk->src || disk->type == VIR_DOMAIN_DISK_TYPE_NETWORK)
return 0;
if (disk->driverType) {
diff --git a/src/qemu/qemu_security_dac.c b/src/qemu/qemu_security_dac.c
index 55dc0c6..88fdb8d 100644
--- a/src/qemu/qemu_security_dac.c
+++ b/src/qemu/qemu_security_dac.c
@@ -144,7 +144,7 @@ qemuSecurityDACRestoreSecurityImageLabelInt(virSecurityDriverPtr drv ATTRIBUTE_U
if (disk->readonly || disk->shared)
return 0;
- if (!disk->src)
+ if (!disk->src || disk->type == VIR_DOMAIN_DISK_TYPE_NETWORK)
return 0;
/* If we have a shared FS & doing migrated, we must not
diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c
index b43c4ac..468d0a3 100644
--- a/src/security/security_apparmor.c
+++ b/src/security/security_apparmor.c
@@ -619,7 +619,7 @@ AppArmorSetSecurityImageLabel(virSecurityDriverPtr drv,
if (secdef->type == VIR_DOMAIN_SECLABEL_STATIC)
return 0;
- if (!disk->src)
+ if (!disk->src || disk->type == VIR_DOMAIN_DISK_TYPE_NETWORK)
return 0;
if (secdef->imagelabel) {
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
index 49efa75..47da677 100644
--- a/src/security/security_selinux.c
+++ b/src/security/security_selinux.c
@@ -436,7 +436,7 @@ SELinuxRestoreSecurityImageLabelInt(virSecurityDriverPtr drv ATTRIBUTE_UNUSED,
if (disk->readonly || disk->shared)
return 0;
- if (!disk->src)
+ if (!disk->src || disk->type == VIR_DOMAIN_DISK_TYPE_NETWORK)
return 0;
/* If we have a shared FS & doing migrated, we must not
--
1.7.2.3
14 years