From 50723581b096427f2b7eee08ca725d56986d5fcf Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Sat, 6 Mar 2010 17:56:28 +0100 Subject: [PATCH] esx: Generate most SOAP mapping and improve inheritance handling The Python script generates the mappings based on the type descriptions in the esx_vi_generator.input file. This also improves the inheritance handling and allows to get rid of the ugly, inflexible, and error prone _base/_super approach. Now every struct that represents a SOAP type contains a _type member, that allows to recreate C++-like dynamic dispatch for "method" calls in C. --- src/Makefile.am | 23 +- src/esx/.gitignore | 1 + src/esx/esx_driver.c | 10 +- src/esx/esx_vi.c | 51 +- src/esx/esx_vi.h | 7 +- src/esx/esx_vi_generator.input | 426 ++++++ src/esx/esx_vi_generator.py | 1025 +++++++++++++++ src/esx/esx_vi_methods.c | 44 +- src/esx/esx_vi_types.c | 2264 ++++---------------------------- src/esx/esx_vi_types.h | 1090 +-------------- 10 files changed, 1871 insertions(+), 3070 deletions(-) create mode 100644 src/esx/.gitignore create mode 100644 src/esx/esx_vi_generator.input create mode 100755 src/esx/esx_vi_generator.py diff --git a/src/Makefile.am b/src/Makefile.am index c661a5cdc8..cfdecf5173 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -26,6 +26,8 @@ INCLUDES = \ EXTRA_DIST = $(conf_DATA) +BUILT_SOURCES = + if WITH_NETWORK UUID=$(shell uuidgen 2>/dev/null) endif @@ -250,6 +252,20 @@ ESX_DRIVER_SOURCES = \ esx/esx_vi_types.c esx/esx_vi_types.h \ esx/esx_vmx.c esx/esx_vmx.h +ESX_DRIVER_GENERATED = \ + esx/esx_vi_types.generated.c \ + esx/esx_vi_types.generated.h \ + esx/esx_vi_types.generated.typedef \ + esx/esx_vi_types.generated.typeenum \ + esx/esx_vi_types.generated.typetostring \ + esx/esx_vi_types.generated.typefromstring + +ESX_DRIVER_EXTRA_DIST = \ + esx/README \ + esx/esx_vi_generator.input \ + esx/esx_vi_generator.py \ + $(ESX_DRIVER_GENERATED) + NETWORK_DRIVER_SOURCES = \ network/bridge_driver.h network/bridge_driver.c @@ -594,7 +610,10 @@ libvirt_driver_one_la_SOURCES = $(ONE_DRIVER_SOURCES) endif +BUILT_SOURCES += $(ESX_DRIVER_GENERATED) +$(ESX_DRIVER_GENERATED): $(srcdir)/esx/esx_vi_generator.input $(srcdir)/esx/esx_vi_generator.py + -srcdir=$(srcdir) $(srcdir)/esx/esx_vi_generator.py if WITH_ESX if WITH_DRIVER_MODULES @@ -610,6 +629,7 @@ if WITH_DRIVER_MODULES libvirt_driver_esx_la_LDFLAGS += -module -avoid-version endif libvirt_driver_esx_la_SOURCES = $(ESX_DRIVER_SOURCES) +libvirt_driver_esx_la_DEPENDENCIES = $(ESX_DRIVER_GENERATED) endif if WITH_NETWORK @@ -784,6 +804,7 @@ EXTRA_DIST += \ $(VBOX_DRIVER_SOURCES) \ $(XENAPI_DRIVER_SOURCES) \ $(ESX_DRIVER_SOURCES) \ + $(ESX_DRIVER_EXTRA_DIST) \ $(NETWORK_DRIVER_SOURCES) \ $(INTERFACE_DRIVER_SOURCES) \ $(STORAGE_DRIVER_SOURCES) \ @@ -867,7 +888,7 @@ EXTRA_DIST += \ libvirt_macvtap.syms \ libvirt_daemon.syms -BUILT_SOURCES = libvirt.syms +BUILT_SOURCES += libvirt.syms libvirt.syms: libvirt_public.syms $(USED_SYM_FILES) rm -f $@-tmp $@ diff --git a/src/esx/.gitignore b/src/esx/.gitignore new file mode 100644 index 0000000000..29e1d4862b --- /dev/null +++ b/src/esx/.gitignore @@ -0,0 +1 @@ +*.generated.* diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index bbe8a519b9..663c5600cc 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -1924,8 +1924,14 @@ esxDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info) perfEntityMetric = perfEntityMetric->_next) { VIR_DEBUG0("perfEntityMetric ..."); - for (perfMetricIntSeries = perfEntityMetric->value; - perfMetricIntSeries != NULL; + perfMetricIntSeries = + esxVI_PerfMetricIntSeries_DynamicCast(perfEntityMetric->value); + + if (perfMetricIntSeries == NULL) { + VIR_ERROR0("QueryPerf returned object with unexpected type"); + } + + for (; perfMetricIntSeries != NULL; perfMetricIntSeries = perfMetricIntSeries->_next) { VIR_DEBUG0("perfMetricIntSeries ..."); diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index 326add71ca..c1fd4b4bb2 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -3,7 +3,7 @@ * esx_vi.c: client for the VMware VI API 2.5 to manage ESX hosts * * Copyright (C) 2010 Red Hat, Inc. - * Copyright (C) 2009 Matthias Bolte + * Copyright (C) 2009-2010 Matthias Bolte * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -480,12 +480,12 @@ esxVI_Context_Connect(esxVI_Context *ctx, const char *url, dynamicProperty = dynamicProperty->_next) { if (STREQ(dynamicProperty->name, "vmFolder")) { if (esxVI_ManagedObjectReference_CastFromAnyType - (dynamicProperty->val, &ctx->vmFolder, "Folder")) { + (dynamicProperty->val, &ctx->vmFolder)) { goto failure; } } else if (STREQ(dynamicProperty->name, "hostFolder")) { if (esxVI_ManagedObjectReference_CastFromAnyType - (dynamicProperty->val, &ctx->hostFolder, "Folder")) { + (dynamicProperty->val, &ctx->hostFolder)) { goto failure; } } else { @@ -720,6 +720,21 @@ esxVI_Context_Execute(esxVI_Context *ctx, const char *methodName, switch (occurrence) { case esxVI_Occurrence_RequiredItem: + if ((*response)->node == NULL) { + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, + "Call to '%s' returned an empty result, " + "expecting a non-empty result", methodName); + goto failure; + } else if ((*response)->node->next != NULL) { + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, + "Call to '%s' returned a list, expecting " + "exactly one item", methodName); + goto failure; + } + + break; + + case esxVI_Occurrence_RequiredList: if ((*response)->node == NULL) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Call to '%s' returned an empty result, " @@ -740,7 +755,7 @@ esxVI_Context_Execute(esxVI_Context *ctx, const char *methodName, break; - case esxVI_Occurrence_List: + case esxVI_Occurrence_OptionalList: /* Any amount of items is valid */ break; @@ -821,10 +836,11 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration, *value = 0; /* undefined */ - if (STRNEQ(anyType->other, enumeration->type)) { + if (anyType->type != enumeration->type) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - "Expecting type '%s' but found '%s'", enumeration->type, - anyType->other); + "Expecting type '%s' but found '%s'", + esxVI_Type_ToString(enumeration->type), + esxVI_Type_ToString(anyType->type)); return -1; } @@ -837,7 +853,7 @@ esxVI_Enumeration_CastFromAnyType(const esxVI_Enumeration *enumeration, ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Unknown value '%s' for %s", anyType->value, - enumeration->type); + esxVI_Type_ToString(enumeration->type)); return -1; } @@ -870,7 +886,8 @@ esxVI_Enumeration_Serialize(const esxVI_Enumeration *enumeration, return -1; } - ESV_VI__XML_TAG__OPEN(output, element, enumeration->type); + ESV_VI__XML_TAG__OPEN(output, element, + esxVI_Type_ToString(enumeration->type)); virBufferAdd(output, name, -1); @@ -906,7 +923,7 @@ esxVI_Enumeration_Deserialize(const esxVI_Enumeration *enumeration, } ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Unknown value '%s' for %s", - name, enumeration->type); + name, esxVI_Type_ToString(enumeration->type)); cleanup: VIR_FREE(name); @@ -1009,7 +1026,7 @@ esxVI_List_CastFromAnyType(esxVI_AnyType *anyType, esxVI_List **list, return -1; } - for (childNode = anyType->_node->children; childNode != NULL; + for (childNode = anyType->node->children; childNode != NULL; childNode = childNode->next) { if (childNode->type != XML_ELEMENT_NODE) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, @@ -1151,7 +1168,7 @@ esxVI_BuildFullTraversalSpecItem(esxVI_SelectionSpec **fullTraversalSpecList, } if (esxVI_TraversalSpec_Alloc(&traversalSpec) < 0 || - esxVI_String_DeepCopyValue(&traversalSpec->_base->name, name) < 0 || + esxVI_String_DeepCopyValue(&traversalSpec->name, name) < 0 || esxVI_String_DeepCopyValue(&traversalSpec->type, type) < 0 || esxVI_String_DeepCopyValue(&traversalSpec->path, path) < 0) { goto failure; @@ -1177,7 +1194,8 @@ esxVI_BuildFullTraversalSpecItem(esxVI_SelectionSpec **fullTraversalSpecList, } if (esxVI_SelectionSpec_AppendToList(fullTraversalSpecList, - traversalSpec->_base) < 0) { + esxVI_SelectionSpec_DynamicCast + (traversalSpec)) < 0) { goto failure; } @@ -1721,8 +1739,7 @@ esxVI_LookupResourcePoolByHostSystem dynamicProperty = dynamicProperty->_next) { if (STREQ(dynamicProperty->name, "parent")) { if (esxVI_ManagedObjectReference_CastFromAnyType - (dynamicProperty->val, &managedObjectReference, - "ComputeResource") < 0) { + (dynamicProperty->val, &managedObjectReference) < 0) { goto failure; } @@ -1756,7 +1773,7 @@ esxVI_LookupResourcePoolByHostSystem dynamicProperty = dynamicProperty->_next) { if (STREQ(dynamicProperty->name, "resourcePool")) { if (esxVI_ManagedObjectReference_CastFromAnyType - (dynamicProperty->val, resourcePool, "ResourcePool") < 0) { + (dynamicProperty->val, resourcePool) < 0) { goto failure; } @@ -2231,7 +2248,7 @@ esxVI_LookupPendingTaskInfoListByVirtualMachine dynamicProperty = dynamicProperty->_next) { if (STREQ(dynamicProperty->name, "recentTask")) { if (esxVI_ManagedObjectReference_CastListFromAnyType - (dynamicProperty->val, &recentTaskList, "Task") < 0) { + (dynamicProperty->val, &recentTaskList) < 0) { goto failure; } diff --git a/src/esx/esx_vi.h b/src/esx/esx_vi.h index 1349a1bb1c..555dad5815 100644 --- a/src/esx/esx_vi.h +++ b/src/esx/esx_vi.h @@ -2,7 +2,7 @@ /* * esx_vi.h: client for the VMware VI API 2.5 to manage ESX hosts * - * Copyright (C) 2009 Matthias Bolte + * Copyright (C) 2009-2010 Matthias Bolte * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -61,8 +61,9 @@ enum _esxVI_ProductVersion { enum _esxVI_Occurrence { esxVI_Occurrence_Undefined = 0, esxVI_Occurrence_RequiredItem, + esxVI_Occurrence_RequiredList, esxVI_Occurrence_OptionalItem, - esxVI_Occurrence_List, + esxVI_Occurrence_OptionalList, esxVI_Occurrence_None }; @@ -132,7 +133,7 @@ struct _esxVI_EnumerationValue { }; struct _esxVI_Enumeration { - const char *type; + esxVI_Type type; esxVI_EnumerationValue values[10]; }; diff --git a/src/esx/esx_vi_generator.input b/src/esx/esx_vi_generator.input new file mode 100644 index 0000000000..06dddbf2a4 --- /dev/null +++ b/src/esx/esx_vi_generator.input @@ -0,0 +1,426 @@ +# +# Definitions of vSphere API 2.5 enumeration and objects types used as input +# for the esx_vi_generator.py script. +# +# This format is line-based, so end-of-line is important. +# +# +# Enumeration definition: +# +# enum +# +# ... +# end +# +# +# Object definition: +# +# object [extends ] +# +# ... +# end +# +# Possible values for the field are: +# +# - r for a required item +# - rl for a required list +# - o for an optional item +# - ol for an optional list +# - i for an ignored item or list +# +# Object member sequence has to match the WSDL sequence +# + + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Enumerations +# + +enum ManagedEntityStatus + gray + green + yellow + red +end + + +enum ObjectUpdateKind + modify + enter + leave +end + + +enum PerfStatsType + absolute + delta + rate +end + + +enum PerfSummaryType + average + maximum + minimum + latest + summation + none +end + + +enum PropertyChangeOp + add + remove + assign + indirectRemove +end + + +enum SharesLevel + low + normal + high + custom +end + + +enum TaskInfoState + queued + running + success + error +end + + +enum VirtualMachineMovePriority + lowPriority + highPriority + defaultPriority +end + + +enum VirtualMachinePowerState + poweredOff + poweredOn + suspended +end + + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Objects +# + +object AboutInfo + String name r + String fullName r + String vendor r + String version r + String build r + String localeVersion o + String localeBuild o + String osType r + String productLineId r + String apiType r + String apiVersion r +end + + +object ChoiceOption extends OptionType + ElementDescription choiceInfo rl + Int defaultIndex o +end + + +object Description + String label r + String summary r +end + + +object DynamicProperty + String name r + AnyType val r +end + + +object ElementDescription extends Description + String key r +end + + +object Event + Int key r + Int chainId r + DateTime createdTime r + String userName r + DatacenterEventArgument datacenter i + ComputeResourceEventArgument computeResource i + HostEventArgument host i + VmEventArgument vm i + String fullFormattedMessage o +end + + +object HostCpuIdInfo + Int level r + String vendor o + String eax o + String ebx o + String ecx o + String edx o +end + + +object ObjectContent + ManagedObjectReference obj r + DynamicProperty propSet ol + MissingProperty missingSet i +end + + +object ObjectSpec + ManagedObjectReference obj r + Boolean skip o + SelectionSpec selectSet ol +end + + +object ObjectUpdate + ObjectUpdateKind kind r + ManagedObjectReference obj r + PropertyChange changeSet ol + MissingProperty missingSet i +end + + +object OptionType + Boolean valueIsReadonly o +end + + +object PerfCounterInfo + Int key r + ElementDescription nameInfo r + ElementDescription groupInfo r + ElementDescription unitInfo r + PerfSummaryType rollupType r + PerfStatsType statsType r + Int level o + Int associatedCounterId ol +end + + +object PerfEntityMetric extends PerfEntityMetricBase + PerfSampleInfo sampleInfo ol + PerfMetricSeries value ol +end + + +object PerfEntityMetricBase + ManagedObjectReference entity r +end + + +object PerfMetricId + Int counterId r + String instance r +end + + +object PerfMetricIntSeries extends PerfMetricSeries + Long value ol +end + + +object PerfMetricSeries + PerfMetricId id r +end + + +object PerfQuerySpec + ManagedObjectReference entity r + DateTime startTime o + DateTime endTime o + Int maxSample o + PerfMetricId metricId ol + Int intervalId o + String format o +end + + +object PerfSampleInfo + DateTime timestamp r + Int interval r +end + + +object PropertyChange + String name r + PropertyChangeOp op r + AnyType val o +end + + +object PropertyFilterSpec + PropertySpec propSet rl + ObjectSpec objectSet rl +end + + +object PropertyFilterUpdate + ManagedObjectReference filter r + ObjectUpdate objectSet ol + MissingObject missingSet i +end + + +object PropertySpec + String type r + Boolean all o + String pathSet ol +end + + +object ResourceAllocationInfo + Long reservation o + Boolean expandableReservation o + Long limit o + SharesInfo shares o + Long overheadLimit o +end + + +object ResourcePoolResourceUsage + Long reservationUsed r + Long reservationUsedForVm r + Long unreservedForPool r + Long unreservedForVm r + Long overallUsage r + Long maxUsage r +end + + +object SelectionSpec + String name o +end + + +object ServiceContent + ManagedObjectReference rootFolder r + ManagedObjectReference propertyCollector r + ManagedObjectReference viewManager o + AboutInfo about r + ManagedObjectReference setting o + ManagedObjectReference userDirectory o + ManagedObjectReference sessionManager o + ManagedObjectReference authorizationManager o + ManagedObjectReference perfManager o + ManagedObjectReference scheduledTaskManager o + ManagedObjectReference alarmManager o + ManagedObjectReference eventManager o + ManagedObjectReference taskManager o + ManagedObjectReference extensionManager o + ManagedObjectReference customizationSpecManager o + ManagedObjectReference customFieldsManager o + ManagedObjectReference accountManager o + ManagedObjectReference diagnosticManager o + ManagedObjectReference licenseManager o + ManagedObjectReference searchIndex o + ManagedObjectReference fileManager o + ManagedObjectReference virtualDiskManager o + ManagedObjectReference virtualizationManager o +end + + +object SharesInfo + Int shares r + SharesLevel level r +end + + +object TaskInfo + String key r + ManagedObjectReference task r + String name o + String descriptionId r + ManagedObjectReference entity o + String entityName o + ManagedObjectReference locked ol + TaskInfoState state r + Boolean cancelled r + Boolean cancelable r + LocalizedMethodFault error i + AnyType result o + Int progress o + TaskReason reason i + DateTime queueTime r + DateTime startTime o + DateTime completeTime o + Int eventChainId r +end + + +object TraversalSpec extends SelectionSpec + String type r + String path r + Boolean skip o + SelectionSpec selectSet ol +end + + +object UpdateSet + String version r + PropertyFilterUpdate filterSet ol +end + + +object UserSession + String key r + String userName r + String fullName r + DateTime loginTime r + DateTime lastActiveTime r + String locale r + String messageLocale r +end + + +object VirtualMachineConfigSpec + String changeVersion o + String name o + String version o + String uuid o + Long npivNodeWorldWideName ol + Long npivPortWorldWideName ol + String npivWorldWideNameType o + String npivWorldWideNameOp o + String locationId o + String guestId o + String alternateGuestName o + String annotation o + VirtualMachineFileInfo files i + ToolsConfigInfo tools i + VirtualMachineFlagInfo flags i + VirtualMachineConsolePreferences consolePreferences i + VirtualMachineDefaultPowerOpInfo powerOpInfo i + Int numCPUs o + Long memoryMB o + VirtualDeviceConfigSpec deviceChange i + ResourceAllocationInfo cpuAllocation o + ResourceAllocationInfo memoryAllocation o + VirtualMachineAffinityInfo cpuAffinity i + VirtualMachineAffinityInfo memoryAffinity i + VirtualMachineNetworkShaperInfo networkShaper i + VirtualMachineCpuIdInfoSpec cpuFeatureMask i + OptionValue extraConfig i + String swapPlacement o + VirtualMachineBootOptions bootOptions i +end + + +object VirtualMachineQuestionInfo + String id r + String text r + ChoiceOption choice r + VirtualMachineMessage message i +end diff --git a/src/esx/esx_vi_generator.py b/src/esx/esx_vi_generator.py new file mode 100755 index 0000000000..5ca61380b1 --- /dev/null +++ b/src/esx/esx_vi_generator.py @@ -0,0 +1,1025 @@ +#!/usr/bin/python + +# +# esx_vi_generator.py: generates most of the SOAP type mapping code +# +# Copyright (C) 2010 Matthias Bolte +# +# 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 +# + +import sys +import os +import os.path + + + + + + +class Property: + OCCURRENCE__REQUIRED_ITEM = "r" + OCCURRENCE__REQUIRED_LIST = "rl" + OCCURRENCE__OPTIONAL_ITEM = "o" + OCCURRENCE__OPTIONAL_LIST = "ol" + OCCURRENCE__IGNORED = "i" + + valid_occurrences = [OCCURRENCE__REQUIRED_ITEM, + OCCURRENCE__REQUIRED_LIST, + OCCURRENCE__OPTIONAL_ITEM, + OCCURRENCE__OPTIONAL_LIST, + OCCURRENCE__IGNORED] + + def __init__(self, type, name, occurrence): + self.type = type + self.name = name + self.occurrence = occurrence + + def is_enum(self): + global predefined_enums + global enums_by_name + + return self.type in predefined_enums or self.type in enums_by_name + + def generate_struct_member(self): + if self.occurrence == Property.OCCURRENCE__IGNORED: + return " /* FIXME: %s is currently ignored */\n" % self.name + else: + string = " %s%s; " % (self.get_type_string(), self.name) + + while len(string) < 59: + string += " " + + return string + "/* %s */\n" % self.get_occurrence_string() + + def generate_free_code(self): + if self.type == "String" and \ + self.occurrence not in [Property.OCCURRENCE__REQUIRED_LIST, + Property.OCCURRENCE__OPTIONAL_LIST, + Property.OCCURRENCE__IGNORED]: + return " VIR_FREE(item->%s);\n" % self.name + elif self.is_enum(): + return "" + else: + if self.occurrence == Property.OCCURRENCE__IGNORED: + return " /* FIXME: %s is currently ignored */\n" % self.name + else: + return " esxVI_%s_Free(&item->%s);\n" % (self.type, self.name) + + def generate_validate_code(self): + if self.occurrence in [Property.OCCURRENCE__REQUIRED_ITEM, + Property.OCCURRENCE__REQUIRED_LIST]: + return " ESX_VI__TEMPLATE__PROPERTY__REQUIRE(%s)\n" % self.name + elif self.occurrence == Property.OCCURRENCE__IGNORED: + return " /* FIXME: %s is currently ignored */\n" % self.name + else: + return "" + + def generate_deep_copy_code(self): + if self.occurrence == Property.OCCURRENCE__IGNORED: + return " /* FIXME: %s is currently ignored */\n" % self.name + elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST, + Property.OCCURRENCE__OPTIONAL_LIST]: + return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_LIST(%s, %s)\n" % (self.type, self.name) + elif self.type == "String": + return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(String, %s)\n" % self.name + else: + return " ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY(%s, %s)\n" % (self.type, self.name) + + def generate_serialize_code(self): + if self.occurrence == Property.OCCURRENCE__IGNORED: + return " /* FIXME: %s is currently ignored */\n" % self.name + elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST, + Property.OCCURRENCE__OPTIONAL_LIST]: + return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(%s, %s)\n" % (self.type, self.name) + elif self.type == "String": + return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, %s)\n" % self.name + else: + return " ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(%s, %s)\n" % (self.type, self.name) + + def generate_deserialize_code(self): + if self.occurrence == Property.OCCURRENCE__IGNORED: + return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_IGNORE(%s) /* FIXME */\n" % self.name + elif self.occurrence in [Property.OCCURRENCE__REQUIRED_LIST, + Property.OCCURRENCE__OPTIONAL_LIST]: + return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(%s, %s)\n" % (self.type, self.name) + elif self.type == "String": + return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, %s)\n" % self.name + else: + return " ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(%s, %s)\n" % (self.type, self.name) + + def get_type_string(self): + if self.type == "String" and \ + self.occurrence not in [Property.OCCURRENCE__REQUIRED_LIST, + Property.OCCURRENCE__OPTIONAL_LIST]: + return "char *" + elif self.is_enum(): + return "esxVI_%s " % self.type + else: + return "esxVI_%s *" % self.type + + def get_occurrence_string(self): + if self.occurrence == Property.OCCURRENCE__REQUIRED_ITEM: + return "required" + elif self.occurrence == Property.OCCURRENCE__REQUIRED_LIST: + return "required, list" + elif self.occurrence == Property.OCCURRENCE__OPTIONAL_ITEM: + return "optional" + elif self.occurrence == Property.OCCURRENCE__OPTIONAL_LIST: + return "optional, list" + + raise ValueError("unknown cardinality value '%s'" % self.cardinality) + + + + + + + + +class Object: + FEATURE__DYNAMIC_CAST = (1 << 1) + FEATURE__LIST = (1 << 2) + FEATURE__DEEP_COPY = (1 << 3) + FEATURE__ANY_TYPE = (1 << 4) + FEATURE__SERIALIZE = (1 << 5) + FEATURE__DESERIALIZE = (1 << 6) + + def __init__(self, name, extends, properties, features = 0, extended_by = None): + self.name = name + self.extends = extends + self.features = features | Object.FEATURE__SERIALIZE | Object.FEATURE__DESERIALIZE + self.properties = properties + self.extended_by = extended_by + + self.properties_by_name = {} + + for property in self.properties: + self.properties_by_name[property.name] = property + + def generate_struct_members(self, add_banner = False, struct_gap = False): + global objects_by_name + members = "" + + if self.extends is None: + struct_gap = True + string = " esxVI_Type _type; " + + while len(string) < 59: + string += " " + + members += string + "/* required */\n" + + if struct_gap and self.extends is None: + members += "\n" + + if self.extends is not None: + members += objects_by_name[self.extends].generate_struct_members(add_banner = True, struct_gap = False) + "\n" + + if self.extends is not None or add_banner: + members += " /* %s */\n" % self.name + + for property in self.properties: + members += property.generate_struct_member() + + if len(self.properties) < 1: + members += " /* no properties */\n" + + return members + + def generate_free_code(self, add_banner = False): + global objects_by_name + source = "" + + if self.extends is not None: + source += objects_by_name[self.extends].generate_free_code(add_banner = True) + "\n" + + if self.extends is not None or add_banner: + source += " /* %s */\n" % self.name + + if len(self.properties) < 1: + source += " /* no properties */\n" + else: + string = "" + + for property in self.properties: + string += property.generate_free_code() + + if len(string) < 1: + source += " /* no properties to be freed */\n" + else: + source += string + + return source + + def generate_validate_code(self, add_banner = False): + global objects_by_name + source = "" + + if self.extends is not None: + source += objects_by_name[self.extends].generate_validate_code(add_banner = True) + "\n" + + if self.extends is not None or add_banner: + source += " /* %s */\n" % self.name + + if len(self.properties) < 1: + source += " /* no properties */\n" + else: + string = "" + + for property in self.properties: + string += property.generate_validate_code() + + if len(string) < 1: + source += " /* no required properties */\n" + else: + source += string + + return source + + def generate_dynamic_cast_code(self): + global objects_by_name + source = "" + + if self.extended_by is not None: + source += " /* %s */\n" % self.name + + for extended_by in self.extended_by: + source += " ESX_VI__TEMPLATE__DYNAMIC_CAST__ACCEPT(%s)\n" % extended_by + + for extended_by in self.extended_by: + source += objects_by_name[extended_by].generate_dynamic_cast_code() + + return source + + def generate_deep_copy_code(self, add_banner = False): + global objects_by_name + source = "" + + if self.extends is not None: + source += objects_by_name[self.extends].generate_deep_copy_code(add_banner = True) + "\n" + + if self.extends is not None or add_banner: + source += " /* %s */\n" % self.name + + if len(self.properties) < 1: + source += " /* no properties */\n" + else: + string = "" + + for property in self.properties: + string += property.generate_deep_copy_code() + + if len(string) < 1: + source += " /* no properties to be deep copied */\n" + else: + source += string + + return source + + def generate_serialize_code(self, add_banner = False): + global objects_by_name + source = "" + + if self.extends is not None: + source += objects_by_name[self.extends].generate_serialize_code(add_banner = True) + "\n" + + if self.extends is not None or add_banner: + source += " /* %s */\n" % self.name + + if len(self.properties) < 1: + source += " /* no properties */\n" + else: + for property in self.properties: + source += property.generate_serialize_code() + + return source + + def generate_deserialize_code(self, add_banner = False): + global objects_by_name + source = "" + + if self.extends is not None: + source += objects_by_name[self.extends].generate_deserialize_code(add_banner = True) + "\n" + + if self.extends is not None or add_banner: + source += " /* %s */\n" % self.name + + if len(self.properties) < 1: + source += " /* no properties */\n" + else: + for property in self.properties: + source += property.generate_deserialize_code() + + return source + + def generate_typedef(self): + return "typedef struct _esxVI_%s esxVI_%s;\n" % (self.name, self.name) + + def generate_typeenum(self): + return " esxVI_Type_%s,\n" % self.name + + def generate_typetostring(self): + string = " case esxVI_Type_%s:\n" % self.name + string += " return \"%s\";\n\n" % self.name + + return string + + def generate_typefromstring(self): + string = " else if (STREQ(type, \"%s\")) {\n" % self.name + string += " return esxVI_Type_%s;\n" % self.name + string += " }\n" + + return string + + def generate_header(self): + header = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + header += " * VI Type: %s\n" % self.name + + if self.extends is not None: + header += " * extends %s\n" % self.extends + + first = True + + if self.extended_by is not None: + for extended_by in self.extended_by: + if first: + header += " * extended by %s\n" % extended_by + first = False + else: + header += " * %s\n" % extended_by + + header += " */\n\n" + + # struct + header += "struct _esxVI_%s {\n" % self.name + + if self.features & Object.FEATURE__LIST: + string = " esxVI_%s *_next; " % self.name + else: + string = " esxVI_%s *_unused; " % self.name + + while len(string) < 59: + string += " " + + header += string + "/* optional */\n" + + header += self.generate_struct_members(struct_gap = True) + + header += "};\n\n" + + # functions + header += "int esxVI_%s_Alloc(esxVI_%s **item);\n" % (self.name, self.name) + header += "void esxVI_%s_Free(esxVI_%s **item);\n" % (self.name, self.name) + header += "int esxVI_%s_Validate(esxVI_%s *item);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__DYNAMIC_CAST: + if self.extended_by is not None or self.extends is not None: + header += "esxVI_%s *esxVI_%s_DynamicCast(void *item);\n" % (self.name, self.name) + else: + report_error("cannot add dynamic cast support for an untyped object") + + if self.features & Object.FEATURE__LIST: + header += "int esxVI_%s_AppendToList(esxVI_%s **list, esxVI_%s *item);\n" % (self.name, self.name, self.name) + + if self.features & Object.FEATURE__DEEP_COPY: + header += "int esxVI_%s_DeepCopy(esxVI_%s **dst, esxVI_%s *src);\n" % (self.name, self.name, self.name) + + if self.features & Object.FEATURE__LIST: + header += "int esxVI_%s_DeepCopyList(esxVI_%s **dstList, esxVI_%s *srcList);\n" % (self.name, self.name, self.name) + + if self.features & Object.FEATURE__ANY_TYPE: + header += "int esxVI_%s_CastFromAnyType(esxVI_AnyType *anyType, esxVI_%s **item);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__LIST: + header += "int esxVI_%s_CastListFromAnyType(esxVI_AnyType *anyType, esxVI_%s **list);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__SERIALIZE: + header += "int esxVI_%s_Serialize(esxVI_%s *item, const char *element, virBufferPtr output);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__LIST: + header += "int esxVI_%s_SerializeList(esxVI_%s *list, const char *element, virBufferPtr output);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__DESERIALIZE: + header += "int esxVI_%s_Deserialize(xmlNodePtr node, esxVI_%s **item);\n" % (self.name, self.name) + + if self.features & Object.FEATURE__LIST: + header += "int esxVI_%s_DeserializeList(xmlNodePtr node, esxVI_%s **list);\n" % (self.name, self.name) + + header += "\n\n\n" + + return header + + def generate_source(self): + source = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + source += " * VI Type: %s\n" % self.name + + if self.extends is not None: + source += " * extends %s\n" % self.extends + + first = True + + if self.extended_by is not None: + for extended_by in self.extended_by: + if first: + source += " * extended by %s\n" % extended_by + first = False + else: + source += " * %s\n" % extended_by + + source += " */\n\n" + + # functions + source += "/* esxVI_%s_Alloc */\n" % self.name + source += "ESX_VI__TEMPLATE__ALLOC(%s)\n\n" % self.name + + # free + if self.extended_by is None: + source += "/* esxVI_%s_Free */\n" % self.name + source += "ESX_VI__TEMPLATE__FREE(%s,\n" % self.name + source += "{\n" + + if self.features & Object.FEATURE__LIST: + source += " esxVI_%s_Free(&item->_next);\n\n" % self.name + + source += self.generate_free_code() + + source += "})\n\n" + else: + source += "/* esxVI_%s_Free */\n" % self.name + source += "ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,\n" % self.name + source += "{\n" + + for extended_by in self.extended_by: + source += " ESX_VI__TEMPLATE__DISPATCH__FREE(%s)\n" % extended_by + + source += "},\n" + source += "{\n" + + if self.features & Object.FEATURE__LIST: + source += " esxVI_%s_Free(&item->_next);\n\n" % self.name + + source += self.generate_free_code() + + source += "})\n\n" + + # validate + source += "/* esxVI_%s_Validate */\n" % self.name + source += "ESX_VI__TEMPLATE__VALIDATE(%s,\n" % self.name + source += "{\n" + + source += self.generate_validate_code() + + source += "})\n\n" + + # dynamic cast + if self.features & Object.FEATURE__DYNAMIC_CAST: + if self.extended_by is not None or self.extends is not None: + source += "/* esxVI_%s_DynamicCast */\n" % self.name + source += "ESX_VI__TEMPLATE__DYNAMIC_CAST(%s,\n" % self.name + source += "{\n" + + source += self.generate_dynamic_cast_code() + + source += "})\n\n" + else: + report_error("cannot add dynamic cast support for an untyped object") + + # append to list + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_AppendToList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__APPEND(%s)\n\n" % self.name + + # deep copy + if self.extended_by is None: + if self.features & Object.FEATURE__DEEP_COPY: + source += "/* esxVI_%s_DeepCopy */\n" % self.name + source += "ESX_VI__TEMPLATE__DEEP_COPY(%s,\n" % self.name + source += "{\n" + + source += self.generate_deep_copy_code() + + source += "})\n\n" + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_DeepCopyList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__DEEP_COPY(%s)\n\n" % self.name + else: + if self.features & Object.FEATURE__DEEP_COPY: + source += "/* esxVI_%s_DeepCopy */\n" % self.name + source += "ESX_VI__TEMPLATE__DYNAMIC_DEEP_COPY(%s)\n" % self.name + source += "{\n" + + for extended_by in self.extended_by: + source += " ESX_VI__TEMPLATE__DISPATCH__DEEP_COPY(%s)\n" % extended_by + + source += "},\n" + source += "{\n" + + source += self.generate_deep_copy_code() + + source += "})\n\n" + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_DeepCopyList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__DEEP_COPY(%s)\n\n" % self.name + + # cast from any type + if self.features & Object.FEATURE__ANY_TYPE: + source += "/* esxVI_%s_CastFromAnyType */\n" % self.name + source += "ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(%s)\n" % self.name + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_CastListFromAnyType */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__CAST_FROM_ANY_TYPE(%s)\n\n" % self.name + + # serialize + if self.extended_by is None: + if self.features & Object.FEATURE__SERIALIZE: + source += "/* esxVI_%s_Serialize */\n" % self.name + source += "ESX_VI__TEMPLATE__SERIALIZE(%s,\n" % self.name + source += "{\n" + + source += self.generate_serialize_code() + + source += "})\n\n" + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_SerializeList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__SERIALIZE(%s)\n\n" % self.name + else: + if self.features & Object.FEATURE__SERIALIZE: + source += "/* esxVI_%s_Serialize */\n" % self.name + source += "ESX_VI__TEMPLATE__DYNAMIC_SERIALIZE(%s,\n" % self.name + source += "{\n" + + for extended_by in self.extended_by: + source += " ESX_VI__TEMPLATE__DISPATCH__SERIALIZE(%s)\n" % extended_by + + source += "},\n" + source += "{\n" + + source += self.generate_serialize_code() + + source += "})\n\n" + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_SerializeList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__SERIALIZE(%s)\n\n" % self.name + + # deserilaize + if self.features & Object.FEATURE__DESERIALIZE: + source += "/* esxVI_%s_Deserialize */\n" % self.name + source += "ESX_VI__TEMPLATE__DESERIALIZE(%s,\n" % self.name + source += "{\n" + + source += self.generate_deserialize_code() + + source += "})\n\n" + + if self.features & Object.FEATURE__LIST: + source += "/* esxVI_%s_DeserializeList */\n" % self.name + source += "ESX_VI__TEMPLATE__LIST__DESERIALIZE(%s)\n\n" % self.name + + source += "\n\n" + + return source + + + + + + + + +class Enum: + FEATURE__ANY_TYPE = (1 << 1) + FEATURE__SERIALIZE = (1 << 2) + FEATURE__DESERIALIZE = (1 << 3) + + + def __init__(self, name, values, features = 0): + self.name = name + self.values = values + self.features = features | Enum.FEATURE__SERIALIZE | Enum.FEATURE__DESERIALIZE + + def generate_typedef(self): + return "typedef enum _esxVI_%s esxVI_%s;\n" % (self.name, self.name) + + def generate_typeenum(self): + return " esxVI_Type_%s,\n" % self.name + + def generate_typetostring(self): + string = " case esxVI_Type_%s:\n" % self.name + string += " return \"%s\";\n\n" % self.name + + return string + + def generate_typefromstring(self): + string = " else if (STREQ(type, \"%s\")) {\n" % self.name + string += " return esxVI_Type_%s;\n" % self.name + string += " }\n" + + return string + + def generate_header(self): + header = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + header += " * VI Enum: %s\n" % self.name + header += " */\n\n" + + # enum + header += "enum _esxVI_%s {\n" % self.name + header += " esxVI_%s_Undefined = 0,\n" % self.name + + for value in self.values: + header += " esxVI_%s_%s,\n" % (self.name, capitalize_first(value)) + + header += "};\n\n" + + # functions + if self.features & Enum.FEATURE__ANY_TYPE: + header += "int esxVI_%s_CastFromAnyType(esxVI_AnyType *anyType, esxVI_%s *item);\n" % (self.name, self.name) + + if self.features & Enum.FEATURE__SERIALIZE: + header += "int esxVI_%s_Serialize(esxVI_%s item, const char *element, virBufferPtr output);\n" % (self.name, self.name) + + if self.features & Enum.FEATURE__DESERIALIZE: + header += "int esxVI_%s_Deserialize(xmlNodePtr node, esxVI_%s *item);\n" % (self.name, self.name) + + header += "\n\n\n" + + return header + + def generate_source(self): + source = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + source += " * VI Enum: %s\n" % self.name + source += " */\n\n" + + source += "static const esxVI_Enumeration _esxVI_%s_Enumeration = {\n" % self.name + source += " esxVI_Type_%s, {\n" % self.name + + for value in self.values: + source += " { \"%s\", esxVI_%s_%s },\n" % (value, self.name, capitalize_first(value)) + + source += " { NULL, -1 },\n" + source += " },\n" + source += "};\n\n" + + # functions + if self.features & Enum.FEATURE__ANY_TYPE: + source += "/* esxVI_%s_CastFromAnyType */\n" % self.name + source += "ESX_VI__TEMPLATE__ENUMERATION__CAST_FROM_ANY_TYPE(%s)\n\n" % self.name + + if self.features & Enum.FEATURE__SERIALIZE: + source += "/* esxVI_%s_Serialize */\n" % self.name + source += "ESX_VI__TEMPLATE__ENUMERATION__SERIALIZE(%s)\n\n" % self.name + + if self.features & Enum.FEATURE__DESERIALIZE: + source += "/* esxVI_%s_Deserialize */\n" % self.name + source += "ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(%s)\n\n" % self.name + + source += "\n\n" + + return source + + + + + +def report_error(message): + print "error: " + message + sys.exit(1) + + + +def usage(): + print "%s " % sys.argv[0] + sys.exit(0) + + + +def capitalize_first(string): + return string[:1].upper() + string[1:] + + + +def parse_object(block): + # expected format: object [extends ] + header_items = block[0][1].split() + + if len(header_items) < 2: + report_error("line %d: invalid block header" % (number)) + + assert header_items[0] == "object" + + name = header_items[1] + extends = None + + if len(header_items) > 2: + if header_items[2] != "extends": + report_error("line %d: invalid block header" % (number)) + else: + extends = header_items[3] + + properties = [] + + for line in block[1:]: + # expected format: + items = line[1].split() + + if len(items) != 3: + report_error("line %d: invalid property" % line[0]) + + if items[2] not in Property.valid_occurrences: + report_error("line %d: invalid occurrence" % line[0]) + + properties.append(Property(type = items[0], name = items[1], + occurrence = items[2])) + + return Object(name = name, extends = extends, properties = properties) + + + +def parse_enum(block): + # expected format: enum + header_items = block[0][1].split() + + if len(header_items) < 2: + report_error("line %d: invalid block header" % (number)) + + assert header_items[0] == "enum" + + name = header_items[1] + + values = [] + + for line in block[1:]: + # expected format: + values.append(line[1]) + + return Enum(name = name, values = values) + + + +def inherit_features(obj): + if obj.extended_by is not None: + for extended_by in obj.extended_by: + objects_by_name[extended_by].features |= obj.features + + if obj.extends is not None: + objects_by_name[obj.extends].features |= obj.features + + if obj.extended_by is not None: + for extended_by in obj.extended_by: + inherit_features(objects_by_name[extended_by]) + + + +def is_known_type(type): + return type in predefined_objects or \ + type in predefined_enums or \ + type in objects_by_name or \ + type in enums_by_name + + + +def open_and_print(filename): + if filename.startswith("./"): + print " GEN " + filename[2:] + else: + print " GEN " + filename + + return open(filename, "wb") + + + + + + + + + + +predefined_enums = ["Boolean"] + +predefined_objects = ["AnyType", + "Int", + "Long", + "String", + "DateTime", + "ManagedObjectReference"] + + +additional_enum_features = { "ManagedEntityStatus" : Enum.FEATURE__ANY_TYPE, + "TaskInfoState" : Enum.FEATURE__ANY_TYPE, + "VirtualMachinePowerState" : Enum.FEATURE__ANY_TYPE } + + +additional_object_features = { "Event" : Object.FEATURE__LIST, + "HostCpuIdInfo" : Object.FEATURE__ANY_TYPE | Object.FEATURE__LIST, + "ManagedObjectReference" : Object.FEATURE__ANY_TYPE, + "ObjectContent" : Object.FEATURE__DEEP_COPY | Object.FEATURE__LIST, + "PerfCounterInfo" : Object.FEATURE__LIST, + "PerfEntityMetric" : Object.FEATURE__LIST, + "PerfQuerySpec" : Object.FEATURE__LIST, + "PerfMetricIntSeries" : Object.FEATURE__DYNAMIC_CAST, + "PropertyFilterSpec" : Object.FEATURE__LIST, + "ResourcePoolResourceUsage" : Object.FEATURE__ANY_TYPE, + "SelectionSpec" : Object.FEATURE__DYNAMIC_CAST, + "SharesInfo" : Object.FEATURE__ANY_TYPE, + "TaskInfo" : Object.FEATURE__ANY_TYPE | Object.FEATURE__LIST, + "UserSession" : Object.FEATURE__ANY_TYPE, + "VirtualMachineQuestionInfo" : Object.FEATURE__ANY_TYPE } + + +removed_object_features = { "DynamicProperty" : Object.FEATURE__SERIALIZE, + "ObjectContent" : Object.FEATURE__SERIALIZE, + "ObjectUpdate" : Object.FEATURE__SERIALIZE, + "PropertyChange" : Object.FEATURE__SERIALIZE, + "PropertyFilterUpdate" : Object.FEATURE__SERIALIZE, + "TaskInfo" : Object.FEATURE__SERIALIZE, + "UpdateSet" : Object.FEATURE__SERIALIZE, + "VirtualMachineConfigInfo" : Object.FEATURE__SERIALIZE } + + + + +if "srcdir" in os.environ: + input_filename = os.path.join(os.environ["srcdir"], "esx/esx_vi_generator.input") + output_dirname = os.path.join(os.environ["srcdir"], "esx") +else: + input_filename = os.path.join(os.getcwd(), "esx_vi_generator.input") + output_dirname = os.getcwd() + + + +typedef = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typedef")) +typeenum = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typeenum")) +typetostring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typetostring")) +typefromstring = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.typefromstring")) +header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.h")) +source = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.c")) + + + +number = 0 +objects_by_name = {} +enums_by_name = {} +block = None + + + +for line in file(input_filename, "rb").readlines(): + number += 1 + + if "#" in line: + line = line[:line.index("#")] + + line = line.lstrip().rstrip() + + if len(line) < 1: + continue + + if line.startswith("object") or line.startswith("enum"): + if block is not None: + report_error("line %d: nested block found" % (number)) + else: + block = [] + + if block is not None: + if line == "end": + if block[0][1].startswith("object"): + obj = parse_object(block) + objects_by_name[obj.name] = obj + else: + enum = parse_enum(block) + enums_by_name[enum.name] = enum + + block = None + else: + block.append((number, line)) + + + +for enum in enums_by_name.values(): + # apply additional features + if enum.name in additional_enum_features: + enum.features |= additional_enum_features[enum.name] + + + +for obj in objects_by_name.values(): + for property in obj.properties: + if property.occurrence != Property.OCCURRENCE__IGNORED and \ + not is_known_type(property.type): + report_error("object '%s' contains unknown property type '%s'" % (obj.name, property.type)) + + if obj.extends is not None: + if not is_known_type(obj.extends): + report_error("object '%s' extends unknown object '%s'" % (obj.name, obj.extends)) + + # detect list usage + for property in obj.properties: + if (property.occurrence == Property.OCCURRENCE__REQUIRED_LIST or \ + property.occurrence == Property.OCCURRENCE__OPTIONAL_LIST) and \ + property.type not in predefined_objects: + objects_by_name[property.type].features |= Object.FEATURE__LIST + + # apply/remove additional features + if obj.name in additional_object_features: + obj.features |= additional_object_features[obj.name] + + if obj.name in removed_object_features: + obj.features &= ~removed_object_features[obj.name] + + # spread deep copy onto properties + if obj.features & Object.FEATURE__DEEP_COPY: + for property in obj.properties: + if property.occurrence != Property.OCCURRENCE__IGNORED and \ + property.type not in predefined_objects: + objects_by_name[property.type].features |= Object.FEATURE__DEEP_COPY + + # detect extended_by relation + if obj.extends is not None: + extended_obj = objects_by_name[obj.extends] + + if extended_obj.extended_by is None: + extended_obj.extended_by = [obj.name] + else: + extended_obj.extended_by.append(obj.name) + + + + + +for obj in objects_by_name.values(): + inherit_features(obj) + + + + + +typedef.write("/* Generated by esx_vi_generator.py */\n\n\n\n") +typeenum.write("/* Generated by esx_vi_generator.py */\n\n") +typetostring.write("/* Generated by esx_vi_generator.py */\n\n") +typefromstring.write("/* Generated by esx_vi_generator.py */\n\n") +header.write("/* Generated by esx_vi_generator.py */\n\n\n\n") +source.write("/* Generated by esx_vi_generator.py */\n\n\n\n") + + +typedef.write("/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + + " * VI Enums\n" + + " */\n\n") + + + +names = enums_by_name.keys() +names.sort() + + +for name in names: + typedef.write(enums_by_name[name].generate_typedef()) + typeenum.write(enums_by_name[name].generate_typeenum()) + typetostring.write(enums_by_name[name].generate_typetostring()) + typefromstring.write(enums_by_name[name].generate_typefromstring()) + header.write(enums_by_name[name].generate_header()) + source.write(enums_by_name[name].generate_source()) + + + +typedef.write("\n\n\n" + + "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" + + " * VI Types\n" + + " */\n\n") + +typeenum.write("\n") + +typetostring.write("\n") + +typefromstring.write("\n") + + + +names = objects_by_name.keys() +names.sort() + + +for name in names: + typedef.write(objects_by_name[name].generate_typedef()) + typeenum.write(objects_by_name[name].generate_typeenum()) + typetostring.write(objects_by_name[name].generate_typetostring()) + typefromstring.write(objects_by_name[name].generate_typefromstring()) + header.write(objects_by_name[name].generate_header()) + source.write(objects_by_name[name].generate_source()) diff --git a/src/esx/esx_vi_methods.c b/src/esx/esx_vi_methods.c index 07cd82a34a..f1234aea72 100644 --- a/src/esx/esx_vi_methods.c +++ b/src/esx/esx_vi_methods.c @@ -304,7 +304,7 @@ ESX_VI__METHOD(RetrieveProperties, (esxVI_Context *ctx, esxVI_PropertyFilterSpec *specSet, /* list */ esxVI_ObjectContent **objectContentList), - List, + OptionalList, { ESX_VI__METHOD__CHECK_SERVICE() ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(objectContentList) @@ -344,8 +344,7 @@ ESX_VI__METHOD(PowerOnVM_Task, virtualMachine) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -369,8 +368,7 @@ ESX_VI__METHOD(PowerOffVM_Task, virtualMachine) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -394,8 +392,7 @@ ESX_VI__METHOD(SuspendVM_Task, virtualMachine) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -428,8 +425,7 @@ ESX_VI__METHOD(MigrateVM_Task, ESX_VI__METHOD__PARAMETER__SERIALIZE(VirtualMachinePowerState, state) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -456,8 +452,7 @@ ESX_VI__METHOD(ReconfigVM_Task, ESX_VI__METHOD__PARAMETER__SERIALIZE(VirtualMachineConfigSpec, spec) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -490,8 +485,7 @@ ESX_VI__METHOD(RegisterVM_Task, ESX_VI__METHOD__PARAMETER__SERIALIZE(ManagedObjectReference, host) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, task, - "Task") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, task) < 0) { goto failure; } }) @@ -583,8 +577,8 @@ ESX_VI__METHOD(CreateFilter, ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, partialUpdates) }, { - if (esxVI_ManagedObjectReference_Deserialize(response->node, propertyFilter, - "PropertyFilter") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, + propertyFilter) < 0) { goto failure; } }) @@ -684,7 +678,7 @@ ESX_VI__METHOD(ValidateMigration, esxVI_ManagedObjectReference *pool, esxVI_ManagedObjectReference *host, esxVI_Event **eventList), - List, + OptionalList, { ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(eventList) }, @@ -736,10 +730,8 @@ ESX_VI__METHOD(FindByIp, ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, vmSearch) }, { - if (esxVI_ManagedObjectReference_Deserialize - (response->node, managedObjectReference, - vmSearch == esxVI_Boolean_True ? "VirtualMachine" - : "HostSystem") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, + managedObjectReference) < 0) { goto failure; } }) @@ -771,10 +763,8 @@ ESX_VI__METHOD(FindByUuid, ESX_VI__METHOD__PARAMETER__SERIALIZE(Boolean, vmSearch) }, { - if (esxVI_ManagedObjectReference_Deserialize - (response->node, managedObjectReference, - vmSearch == esxVI_Boolean_True ? "VirtualMachine" - : "HostSystem") < 0) { + if (esxVI_ManagedObjectReference_Deserialize(response->node, + managedObjectReference) < 0) { goto failure; } }) @@ -789,7 +779,7 @@ ESX_VI__METHOD(QueryAvailablePerfMetric, esxVI_DateTime *endTime, esxVI_Int *intervalId, esxVI_PerfMetricId **perfMetricIdList), - List, + OptionalList, { ESX_VI__METHOD__CHECK_SERVICE() ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfMetricIdList) @@ -820,7 +810,7 @@ ESX_VI__METHOD(QueryPerfCounter, (esxVI_Context *ctx, esxVI_Int *counterId, /* list */ esxVI_PerfCounterInfo **perfCounterInfoList), - List, + OptionalList, { ESX_VI__METHOD__CHECK_SERVICE() ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfCounterInfoList) @@ -848,7 +838,7 @@ ESX_VI__METHOD(QueryPerf, (esxVI_Context *ctx, esxVI_PerfQuerySpec *querySpec, /* list */ esxVI_PerfEntityMetric **perfEntityMetricList), - List, + OptionalList, { ESX_VI__METHOD__CHECK_SERVICE() ESX_VI__METHOD__PARAMETER__CHECK_OUTPUT(perfEntityMetricList) diff --git a/src/esx/esx_vi_types.c b/src/esx/esx_vi_types.c index 87a13cbc5d..6f257b2954 100644 --- a/src/esx/esx_vi_types.c +++ b/src/esx/esx_vi_types.c @@ -64,11 +64,17 @@ -#define ESX_VI__TEMPLATE__ALLOC(_type) \ +#define ESX_VI__TEMPLATE__ALLOC(__type) \ int \ - esxVI_##_type##_Alloc(esxVI_##_type **ptrptr) \ + esxVI_##__type##_Alloc(esxVI_##__type **ptrptr) \ { \ - return esxVI_Alloc((void **)ptrptr, sizeof(esxVI_##_type)); \ + if (esxVI_Alloc((void **)ptrptr, sizeof (esxVI_##__type)) < 0) { \ + return -1; \ + } \ + \ + (*ptrptr)->_type = esxVI_Type_##__type; \ + \ + return 0; \ } @@ -92,11 +98,18 @@ -#define ESX_VI__TEMPLATE__VALIDATE(_type, _require) \ +#define ESX_VI__TEMPLATE__VALIDATE(__type, _require) \ int \ - esxVI_##_type##_Validate(esxVI_##_type *item) \ + esxVI_##__type##_Validate(esxVI_##__type *item) \ { \ - const char *type_name = #_type; \ + const char *type_name = esxVI_Type_ToString(esxVI_Type_##__type); \ + \ + if (item->_type <= esxVI_Type_Undefined || \ + item->_type >= esxVI_Type_Other) { \ + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \ + "%s object has invalid dynamic type", type_name); \ + return -1; \ + } \ \ _require \ \ @@ -105,11 +118,31 @@ -#define ESX_VI__TEMPLATE__VALIDATE_NOOP(_type) \ +#define ESX_VI__TEMPLATE__DEEP_COPY(_type, _deep_copy) \ int \ - esxVI_##_type##_Validate(esxVI_##_type *item ATTRIBUTE_UNUSED) \ + esxVI_##_type##_DeepCopy(esxVI_##_type **dest, esxVI_##_type *src) \ { \ + if (dest == NULL || *dest != NULL) { \ + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); \ + return -1; \ + } \ + \ + if (src == NULL) { \ + return 0; \ + } \ + \ + if (esxVI_##_type##_Alloc(dest) < 0) { \ + goto failure; \ + } \ + \ + _deep_copy \ + \ return 0; \ + \ + failure: \ + esxVI_##_type##_Free(dest); \ + \ + return -1; \ } @@ -184,19 +217,20 @@ return -1; \ } \ \ - if (STRNEQ(anyType->other, #_type)) { \ + if (anyType->type != esxVI_Type_##_type) { \ ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \ "Expecting type '%s' but found '%s'", \ - #_type, anyType->other); \ + esxVI_Type_ToString(esxVI_Type_##_type), \ + anyType->other); \ return -1; \ } \ \ - return esxVI_##_type##_Deserialize(anyType->_node, ptrptr); \ + return esxVI_##_type##_Deserialize(anyType->node, ptrptr); \ } -#define ESX_VI__TEMPLATE__SERIALIZE_EXTRA(_type, _type_string, _serialize) \ +#define ESX_VI__TEMPLATE__SERIALIZE_EXTRA(_type, _extra, _serialize) \ int \ esxVI_##_type##_Serialize(esxVI_##_type *item, \ const char *element, virBufferPtr output) \ @@ -210,11 +244,14 @@ return 0; \ } \ \ + _extra \ + \ if (esxVI_##_type##_Validate(item) < 0) { \ return -1; \ } \ \ - ESV_VI__XML_TAG__OPEN(output, element, _type_string); \ + ESV_VI__XML_TAG__OPEN(output, element, \ + esxVI_Type_ToString(esxVI_Type_##_type)); \ \ _serialize \ \ @@ -226,7 +263,7 @@ #define ESX_VI__TEMPLATE__SERIALIZE(_type, _serialize) \ - ESX_VI__TEMPLATE__SERIALIZE_EXTRA(_type, #_type, _serialize) + ESX_VI__TEMPLATE__SERIALIZE_EXTRA(_type, /* nothing */, _serialize) @@ -328,6 +365,31 @@ +/* + * Macros for property handling to be used as part of other macros + */ + +#define ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY(_type, _name) \ + if (esxVI_##_type##_DeepCopy(&(*dest)->_name, src->_name) < 0) { \ + goto failure; \ + } + + + +#define ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_LIST(_type, _name) \ + if (esxVI_##_type##_DeepCopyList(&(*dest)->_name, src->_name) < 0) { \ + goto failure; \ + } + + + +#define ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(_type, _name) \ + if (esxVI_##_type##_DeepCopyValue(&(*dest)->_name, src->_name) < 0) { \ + goto failure; \ + } + + + #define ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(_type, _name) \ if (esxVI_##_type##_Serialize(item->_name, #_name, output) < 0) { \ return -1; \ @@ -360,6 +422,13 @@ +#define ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_IGNORE(_name) \ + if (xmlStrEqual(childNode->name, BAD_CAST #_name)) { \ + continue; \ + } + + + #define ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(_type, _name) \ if (xmlStrEqual(childNode->name, BAD_CAST #_name)) { \ if (esxVI_##_type##_DeserializeValue(childNode, \ @@ -372,26 +441,6 @@ -#define ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(_type, _expected, \ - _name) \ - if (xmlStrEqual(childNode->name, BAD_CAST #_name)) { \ - if (esxVI_##_type##_Deserialize(childNode, &(*ptrptr)->_name, \ - _expected) < 0) { \ - goto failure; \ - } \ - \ - continue; \ - } - - - -#define ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(_name) \ - if (xmlStrEqual(childNode->name, BAD_CAST #_name)) { \ - continue; \ - } - - - #define ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(_type, _name) \ if (xmlStrEqual(childNode->name, BAD_CAST #_name)) { \ esxVI_##_type *_name##Item = NULL; \ @@ -427,6 +476,10 @@ +/* + * Macros to implement enumerations + */ + #define ESX_VI__TEMPLATE__ENUMERATION__CAST_FROM_ANY_TYPE(_type) \ int \ esxVI_##_type##_CastFromAnyType(esxVI_AnyType *anyType, \ @@ -459,20 +512,102 @@ +/* + * Macros to implement dynamic dispatched functions + */ + +#define ESX_VI__TEMPLATE__DISPATCH(__type, _dispatch, _error_return) \ + switch (item->_type) { \ + _dispatch \ + \ + case esxVI_Type_##__type: \ + break; \ + \ + default: \ + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \ + "Call to %s for unexpected type '%s'", __FUNCTION__, \ + esxVI_Type_ToString(item->_type)); \ + return _error_return; \ + } + + + +#define ESX_VI__TEMPLATE__DISPATCH__FREE(_type) \ + case esxVI_Type_##_type: \ + esxVI_##_type##_Free((esxVI_##_type **)ptrptr); \ + return; + + + +#define ESX_VI__TEMPLATE__DISPATCH__DEEP_COPY(_type) \ + case esxVI_Type_##_type: \ + return esxVI_##_type##_DeepCopy((esxVI_##_type **)dst, \ + (esxVI_##_type *)src); + + + +#define ESX_VI__TEMPLATE__DISPATCH__SERIALIZE(_type) \ + case esxVI_Type_##_type: \ + return esxVI_##_type##_Serialize((esxVI_##_type *)item, element, \ + output); + + + +#define ESX_VI__TEMPLATE__DYNAMIC_FREE(__type, _dispatch, _body) \ + ESX_VI__TEMPLATE__FREE(__type, \ + ESX_VI__TEMPLATE__DISPATCH(__type, _dispatch, /* nothing */) \ + _body) + + + +#define ESX_VI__TEMPLATE__DYNAMIC_CAST(__type, _accept) \ + esxVI_##__type * \ + esxVI_##__type##_DynamicCast(void *item) \ + { \ + if (item == NULL) { \ + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); \ + return NULL; \ + } \ + \ + _accept \ + \ + return NULL; \ + } + + + +#define ESX_VI__TEMPLATE__DYNAMIC_CAST__ACCEPT(__type) \ + if (((esxVI_Object *)item)->_type == esxVI_Type_##__type) { \ + return item; \ + } + + + +#define ESX_VI__TEMPLATE__DYNAMIC_SERIALIZE(__type, _dispatch, _serialize) \ + ESX_VI__TEMPLATE__SERIALIZE_EXTRA(__type, \ + ESX_VI__TEMPLATE__DISPATCH(__type, _dispatch, -1), \ + _serialize) + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * XSI: Type */ const char * -esxVI_Type_Name(esxVI_Type type) +esxVI_Type_ToString(esxVI_Type type) { switch (type) { + default: case esxVI_Type_Undefined: - return "undefined"; + return ""; case esxVI_Type_Boolean: return "xsd:boolean"; + case esxVI_Type_AnyType: + return "xsd:anyType"; + case esxVI_Type_String: return "xsd:string"; @@ -485,14 +620,53 @@ esxVI_Type_Name(esxVI_Type type) case esxVI_Type_Long: return "xsd:long"; - case esxVI_Type_Other: - return "other"; + case esxVI_Type_DateTime: + return "xsd:dateTime"; - default: - return "unknown"; + case esxVI_Type_Fault: + return "Fault"; + + case esxVI_Type_ManagedObjectReference: + return "ManagedObjectReference"; + +#include "esx_vi_types.generated.typetostring" + + case esxVI_Type_Other: + return ""; } } +esxVI_Type +esxVI_Type_FromString(const char *type) +{ + if (type == NULL || STREQ(type, "")) { + return esxVI_Type_Undefined; + } else if (STREQ(type, "xsd:boolean")) { + return esxVI_Type_Boolean; + } else if (STREQ(type, "xsd:anyType")) { + return esxVI_Type_AnyType; + } else if (STREQ(type, "xsd:string")) { + return esxVI_Type_String; + } else if (STREQ(type, "xsd:short")) { + return esxVI_Type_Short; + } else if (STREQ(type, "xsd:int")) { + return esxVI_Type_Int; + } else if (STREQ(type, "xsd:long")) { + return esxVI_Type_Long; + } else if (STREQ(type, "xsd:dateTime")) { + return esxVI_Type_DateTime; + } else if (STREQ(type, "Fault")) { + return esxVI_Type_Fault; + } else if (STREQ(type, "ManagedObjectReference")) { + return esxVI_Type_ManagedObjectReference; + } + +#include "esx_vi_types.generated.typefromstring" + + else { + return esxVI_Type_Other; + } +} /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -500,7 +674,7 @@ esxVI_Type_Name(esxVI_Type type) */ static const esxVI_Enumeration _esxVI_Boolean_Enumeration = { - "xsd:boolean", { + esxVI_Type_Boolean, { { "true", esxVI_Boolean_True }, { "false", esxVI_Boolean_False }, { NULL, -1 }, @@ -525,7 +699,7 @@ ESX_VI__TEMPLATE__ALLOC(AnyType); /* esxVI_AnyType_Free */ ESX_VI__TEMPLATE__FREE(AnyType, { - xmlFreeNode(item->_node); + xmlFreeNode(item->node); VIR_FREE(item->other); VIR_FREE(item->value); }); @@ -536,9 +710,9 @@ esxVI_AnyType_ExpectType(esxVI_AnyType *anyType, esxVI_Type type) if (anyType->type != type) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Expecting type '%s' but found '%s'", - esxVI_Type_Name(type), + esxVI_Type_ToString(type), anyType->type != esxVI_Type_Other - ? esxVI_Type_Name(anyType->type) + ? esxVI_Type_ToString(anyType->type) : anyType->other); return -1; } @@ -562,9 +736,10 @@ esxVI_AnyType_DeepCopy(esxVI_AnyType **dest, esxVI_AnyType *src) goto failure; } - (*dest)->_node = xmlCopyNode(src->_node, 1); + (*dest)->_type = src->_type; + (*dest)->node = xmlCopyNode(src->node, 1); - if ((*dest)->_node == NULL) { + if ((*dest)->node == NULL) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Could not copy an XML node"); goto failure; } @@ -612,7 +787,7 @@ esxVI_AnyType_DeepCopy(esxVI_AnyType **dest, esxVI_AnyType *src) int esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType) { - long long number; + long long int number; if (anyType == NULL || *anyType != NULL) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); @@ -623,9 +798,9 @@ esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType) return -1; } - (*anyType)->_node = xmlCopyNode(node, 1); + (*anyType)->node = xmlCopyNode(node, 1); - if ((*anyType)->_node == NULL) { + if ((*anyType)->node == NULL) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Could not copy an XML node"); goto failure; } @@ -641,6 +816,15 @@ esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType) goto failure; } + (*anyType)->type = esxVI_Type_FromString((*anyType)->other); + + if ((*anyType)->type == esxVI_Type_Undefined) { + ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, + "Unknown value '%s' for AnyType 'type' property", + (*anyType)->other); + goto failure; + } + (*anyType)->value = (char *)xmlNodeListGetString(node->doc, node->children, 1); @@ -669,13 +853,11 @@ esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType) goto failure; \ } \ \ - (*anyType)->type = esxVI_Type_##_type; \ (*anyType)->_name = number; \ } while (0) - if (STREQ((*anyType)->other, "xsd:boolean")) { - (*anyType)->type = esxVI_Type_Boolean; - + switch ((*anyType)->type) { + case esxVI_Type_Boolean: if (STREQ((*anyType)->value, "true")) { (*anyType)->boolean = esxVI_Boolean_True; } else if (STREQ((*anyType)->value, "false")) { @@ -686,15 +868,27 @@ esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType) (*anyType)->value); goto failure; } - } else if (STREQ((*anyType)->other, "xsd:string")) { - (*anyType)->type = esxVI_Type_String; + + break; + + case esxVI_Type_String: (*anyType)->string = (*anyType)->value; - } else if (STREQ((*anyType)->other, "xsd:short")) { + break; + + case esxVI_Type_Short: _DESERIALIZE_NUMBER(Short, "xsd:short", int16, INT16_MIN, INT16_MAX); - } else if (STREQ((*anyType)->other, "xsd:int")) { + break; + + case esxVI_Type_Int: _DESERIALIZE_NUMBER(Int, "xsd:int", int32, INT32_MIN, INT32_MAX); - } else if (STREQ((*anyType)->other, "xsd:long")) { + break; + + case esxVI_Type_Long: _DESERIALIZE_NUMBER(Long, "xsd:long", int64, INT64_MIN, INT64_MAX); + break; + + default: + break; } #undef _DESERIALIZE_NUMBER @@ -724,6 +918,12 @@ ESX_VI__TEMPLATE__FREE(String, VIR_FREE(item->value); }); +/* esxVI_String_Validate */ +ESX_VI__TEMPLATE__VALIDATE(String, +{ + ESX_VI__TEMPLATE__PROPERTY__REQUIRE(value) +}) + /* esxVI_String_AppendToList */ ESX_VI__TEMPLATE__LIST__APPEND(String); @@ -782,30 +982,11 @@ esxVI_String_AppendValueListToList(esxVI_String **stringList, return -1; } -int -esxVI_String_DeepCopy(esxVI_String **dest, esxVI_String *src) +/* esxVI_String_DeepCopy */ +ESX_VI__TEMPLATE__DEEP_COPY(String, { - if (dest == NULL || *dest != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (src == NULL) { - return 0; - } - - if (esxVI_String_Alloc(dest) < 0 || - esxVI_String_DeepCopyValue(&(*dest)->value, src->value)) { - goto failure; - } - - return 0; - - failure: - esxVI_String_Free(dest); - - return -1; -} + ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(String, value) +}) /* esxVI_String_DeepCopyList */ ESX_VI__TEMPLATE__LIST__DEEP_COPY(String); @@ -865,37 +1046,11 @@ esxVI_String_SerializeValue(const char *value, const char *element, return 0; } -int -esxVI_String_Deserialize(xmlNodePtr node, esxVI_String **string) +/* esxVI_String_Deserialize */ +ESX_VI__TEMPLATE__DESERIALIZE(String, { - if (string == NULL || *string != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (esxVI_String_Alloc(string) < 0) { - return -1; - } - - (*string)->value = - (char *)xmlNodeListGetString(node->doc, node->children, 1); - - if ((*string)->value == NULL) { - (*string)->value = strdup(""); - - if ((*string)->value == NULL) { - virReportOOMError(); - goto failure; - } - } - - return 0; - - failure: - esxVI_String_Free(string); - - return -1; -} + ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, value) +}) /* esxVI_String_DeserializeList */ ESX_VI__TEMPLATE__LIST__DESERIALIZE(String); @@ -938,39 +1093,21 @@ ESX_VI__TEMPLATE__FREE(Int, }); /* esxVI_Int_Validate */ -ESX_VI__TEMPLATE__VALIDATE_NOOP(Int); +ESX_VI__TEMPLATE__VALIDATE(Int, +{ +}) /* esxVI_Int_AppendToList */ ESX_VI__TEMPLATE__LIST__APPEND(Int); -int -esxVI_Int_DeepCopy(esxVI_Int **dest, esxVI_Int *src) +/* esxVI_Int_DeepCopy */ +ESX_VI__TEMPLATE__DEEP_COPY(Int, { - if (dest == NULL || *dest != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (src == NULL) { - return 0; - } - - if (esxVI_Int_Alloc(dest) < 0) { - goto failure; - } - (*dest)->value = src->value; - - return 0; - - failure: - esxVI_Int_Free(dest); - - return -1; -} +}) /* esxVI_Int_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE_EXTRA(Int, "xsd:int", +ESX_VI__TEMPLATE__SERIALIZE(Int, { virBufferVSprintf(output, "%d", (int)item->value); }); @@ -997,13 +1134,15 @@ ESX_VI__TEMPLATE__FREE(Long, }); /* esxVI_Long_Validate */ -ESX_VI__TEMPLATE__VALIDATE_NOOP(Long); +ESX_VI__TEMPLATE__VALIDATE(Long, +{ +}) /* esxVI_Long_AppendToList */ ESX_VI__TEMPLATE__LIST__APPEND(Long); /* esxVI_Long_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE_EXTRA(Long, "xsd:long", +ESX_VI__TEMPLATE__SERIALIZE(Long, { virBufferVSprintf(output, "%lld", (long long int)item->value); }); @@ -1036,7 +1175,7 @@ ESX_VI__TEMPLATE__VALIDATE(DateTime, }); /* esxVI_DateTime_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE_EXTRA(DateTime, "xsd:dateTime", +ESX_VI__TEMPLATE__SERIALIZE(DateTime, { virBufferAdd(output, item->value, -1); }); @@ -1073,184 +1212,6 @@ esxVI_DateTime_Deserialize(xmlNodePtr node, esxVI_DateTime **dateTime) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: ManagedEntityStatus - */ - -static const esxVI_Enumeration _esxVI_ManagedEntityStatus_Enumeration = { - "ManagedEntityStatus", { - { "gray", esxVI_ManagedEntityStatus_Gray }, - { "green", esxVI_ManagedEntityStatus_Green }, - { "yellow", esxVI_ManagedEntityStatus_Yellow }, - { "red", esxVI_ManagedEntityStatus_Red }, - { NULL, -1 }, - }, -}; - -/* esxVI_ManagedEntityStatus_CastFromAnyType */ -ESX_VI__TEMPLATE__ENUMERATION__CAST_FROM_ANY_TYPE(ManagedEntityStatus); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: ObjectUpdateKind - */ - -static const esxVI_Enumeration _esxVI_ObjectUpdateKind_Enumeration = { - "ObjectUpdateKind", { - { "enter", esxVI_ObjectUpdateKind_Enter }, - { "leave", esxVI_ObjectUpdateKind_Leave }, - { "modify", esxVI_ObjectUpdateKind_Modify }, - { NULL, -1 }, - }, -}; - -/* esxVI_ObjectUpdateKind_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(ObjectUpdateKind); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PerfSummaryType - */ - -static const esxVI_Enumeration _esxVI_PerfSummaryType_Enumeration = { - "PerfSummaryType", { - { "average", esxVI_PerfSummaryType_Average }, - { "latest", esxVI_PerfSummaryType_Latest }, - { "maximum", esxVI_PerfSummaryType_Maximum }, - { "minimum", esxVI_PerfSummaryType_Minimum }, - { "none", esxVI_PerfSummaryType_None }, - { "summation", esxVI_PerfSummaryType_Summation }, - { NULL, -1 }, - }, -}; - -/* esxVI_PerfSummaryType_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(PerfSummaryType); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PerfStatsType - */ - -static const esxVI_Enumeration _esxVI_PerfStatsType_Enumeration = { - "PerfStatsType", { - { "absolute", esxVI_PerfStatsType_Absolute }, - { "delta", esxVI_PerfStatsType_Delta }, - { "rate", esxVI_PerfStatsType_Rate }, - { NULL, -1 }, - }, -}; - -/* esxVI_PerfStatsType_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(PerfStatsType); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PropertyChangeOp - */ - -static const esxVI_Enumeration _esxVI_PropertyChangeOp_Enumeration = { - "PropertyChangeOp", { - { "add", esxVI_PropertyChangeOp_Add }, - { "remove", esxVI_PropertyChangeOp_Remove }, - { "assign", esxVI_PropertyChangeOp_Assign }, - { "indirectRemove", esxVI_PropertyChangeOp_IndirectRemove }, - { NULL, -1 }, - }, -}; - -/* esxVI_PropertyChangeOp_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(PropertyChangeOp); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: SharesLevel - */ - -static const esxVI_Enumeration _esxVI_SharesLevel_Enumeration = { - "SharesLevel", { - { "custom", esxVI_SharesLevel_Custom }, - { "high", esxVI_SharesLevel_High }, - { "low", esxVI_SharesLevel_Low }, - { "normal", esxVI_SharesLevel_Normal }, - { NULL, -1 }, - }, -}; - -/* esxVI_SharesLevel_Serialize */ -ESX_VI__TEMPLATE__ENUMERATION__SERIALIZE(SharesLevel); - -/* esxVI_SharesLevel_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(SharesLevel); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: TaskInfoState - */ - -static const esxVI_Enumeration _esxVI_TaskInfoState_Enumeration = { - "TaskInfoState", { - { "error", esxVI_TaskInfoState_Error }, - { "queued", esxVI_TaskInfoState_Queued }, - { "running", esxVI_TaskInfoState_Running }, - { "success", esxVI_TaskInfoState_Success }, - { NULL, -1 }, - }, -}; - -/* esxVI_TaskInfoState_CastFromAnyType */ -ESX_VI__TEMPLATE__ENUMERATION__CAST_FROM_ANY_TYPE(TaskInfoState); - -/* esxVI_TaskInfoState_Deserialize */ -ESX_VI__TEMPLATE__ENUMERATION__DESERIALIZE(TaskInfoState); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: VirtualMachineMovePriority - */ - -static const esxVI_Enumeration _esxVI_VirtualMachineMovePriority_Enumeration = { - "VirtualMachineMovePriority", { - { "lowPriority", esxVI_VirtualMachineMovePriority_LowPriority }, - { "highPriority", esxVI_VirtualMachineMovePriority_HighPriority }, - { "defaultPriority", esxVI_VirtualMachineMovePriority_DefaultPriority }, - { NULL, -1 }, - }, -}; - -/* esxVI_VirtualMachineMovePriority_Serialize */ -ESX_VI__TEMPLATE__ENUMERATION__SERIALIZE(VirtualMachineMovePriority); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: VirtualMachinePowerState - */ - -static const esxVI_Enumeration _esxVI_VirtualMachinePowerState_Enumeration = { - "VirtualMachinePowerState", { - { "poweredOff", esxVI_VirtualMachinePowerState_PoweredOff }, - { "poweredOn", esxVI_VirtualMachinePowerState_PoweredOn }, - { "suspended", esxVI_VirtualMachinePowerState_Suspended }, - { NULL, -1 }, - }, -}; - -/* esxVI_VirtualMachinePowerState_CastFromAnyType */ -ESX_VI__TEMPLATE__ENUMERATION__CAST_FROM_ANY_TYPE(VirtualMachinePowerState); - -/* esxVI_VirtualMachinePowerState_Serialize */ -ESX_VI__TEMPLATE__ENUMERATION__SERIALIZE(VirtualMachinePowerState); - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * VI Type: Fault */ @@ -1277,7 +1238,7 @@ ESX_VI__TEMPLATE__DESERIALIZE(Fault, { ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, faultcode); ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, faultstring); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(detail); /* FIXME */ + ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_IGNORE(detail); /* FIXME */ }); @@ -1298,128 +1259,21 @@ ESX_VI__TEMPLATE__FREE(ManagedObjectReference, VIR_FREE(item->value); }); -int -esxVI_ManagedObjectReference_DeepCopy(esxVI_ManagedObjectReference **dest, - esxVI_ManagedObjectReference *src) +/* esxVI_ManagedObjectReference_DeepCopy */ +ESX_VI__TEMPLATE__DEEP_COPY(ManagedObjectReference, { - if (dest == NULL || *dest != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (src == NULL) { - return 0; - } - - if (esxVI_ManagedObjectReference_Alloc(dest) < 0 || - esxVI_String_DeepCopyValue(&(*dest)->type, src->type) < 0 || - esxVI_String_DeepCopyValue(&(*dest)->value, src->value) < 0) { - goto failure; - } - - return 0; - - failure: - esxVI_ManagedObjectReference_Free(dest); - - return -1; -} + ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(String, type) + ESX_VI__TEMPLATE__PROPERTY__DEEP_COPY_VALUE(String, value) +}) /* esxVI_ManagedObjectReference_AppendToList */ ESX_VI__TEMPLATE__LIST__APPEND(ManagedObjectReference); -int -esxVI_ManagedObjectReference_CastFromAnyType - (esxVI_AnyType *anyType, - esxVI_ManagedObjectReference **managedObjectReference, - const char *expectedType) -{ - if (anyType == NULL || managedObjectReference == NULL || - *managedObjectReference != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } +/* esxVI_ManagedObjectReference_CastFromAnyType */ +ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(ManagedObjectReference) - if (STRNEQ(anyType->other, "ManagedObjectReference")) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - "Expecting type 'ManagedObjectReference' but found '%s'", - anyType->other); - return -1; - } - - return esxVI_ManagedObjectReference_Deserialize(anyType->_node, - managedObjectReference, - expectedType); -} - -int -esxVI_ManagedObjectReference_CastListFromAnyType - (esxVI_AnyType *anyType, - esxVI_ManagedObjectReference **managedObjectReferenceList, - const char *expectedType) -{ - int result = 0; - xmlNodePtr childNode = NULL; - esxVI_AnyType *childAnyType = NULL; - esxVI_ManagedObjectReference *managedObjectReference = NULL; - - if (managedObjectReferenceList == NULL || - *managedObjectReferenceList != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - goto failure; - } - - if (anyType == NULL) { - return 0; - } - - if (STRNEQ(anyType->other, "ArrayOfManagedObjectReference")) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - "Expecting type to be 'ArrayOfManagedObjectReference' " - "but found '%s'", anyType->other); - goto failure; - } - - for (childNode = anyType->_node->children; childNode != NULL; - childNode = childNode->next) { - if (childNode->type != XML_ELEMENT_NODE) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - "Wrong XML element type %d", childNode->type); - goto failure; - } - - esxVI_AnyType_Free(&childAnyType); - - if (esxVI_AnyType_Deserialize(childNode, &childAnyType) < 0) { - goto failure; - } - - managedObjectReference = NULL; - - if (esxVI_ManagedObjectReference_CastFromAnyType - (childAnyType, &managedObjectReference, expectedType) < 0) { - goto failure; - } - - if (esxVI_ManagedObjectReference_AppendToList - (managedObjectReferenceList, managedObjectReference) < 0) { - goto failure; - } - } - - - cleanup: - esxVI_AnyType_Free(&childAnyType); - - return result; - - failure: - esxVI_ManagedObjectReference_Free(managedObjectReferenceList); - - result = -1; - - goto cleanup; -} +/* esxVI_ManagedObjectReference_CastListFromAnyType */ +ESX_VI__TEMPLATE__LIST__CAST_FROM_ANY_TYPE(ManagedObjectReference) int esxVI_ManagedObjectReference_Serialize @@ -1454,8 +1308,7 @@ ESX_VI__TEMPLATE__LIST__SERIALIZE(ManagedObjectReference); int esxVI_ManagedObjectReference_Deserialize - (xmlNodePtr node, esxVI_ManagedObjectReference **managedObjectReference, - const char *expectedType) + (xmlNodePtr node, esxVI_ManagedObjectReference **managedObjectReference) { if (managedObjectReference == NULL || *managedObjectReference != NULL) { ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); @@ -1475,14 +1328,6 @@ esxVI_ManagedObjectReference_Deserialize goto failure; } - if (expectedType != NULL && - STRNEQ(expectedType, (*managedObjectReference)->type)) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, - "Expected type '%s' but found '%s'", expectedType, - (*managedObjectReference)->type); - goto failure; - } - if (esxVI_String_DeserializeValue(node, &(*managedObjectReference)->value) < 0) { goto failure; @@ -1496,1533 +1341,4 @@ esxVI_ManagedObjectReference_Deserialize return -1; } - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: DynamicProperty - */ - -/* esxVI_DynamicProperty_Alloc */ -ESX_VI__TEMPLATE__ALLOC(DynamicProperty); - -/* esxVI_DynamicProperty_Free */ -ESX_VI__TEMPLATE__FREE(DynamicProperty, -{ - esxVI_DynamicProperty_Free(&item->_next); - - VIR_FREE(item->name); - esxVI_AnyType_Free(&item->val); -}); - -/* esxVI_DynamicProperty_Validate */ -ESX_VI__TEMPLATE__VALIDATE(DynamicProperty, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(name); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(val); -}); - -int -esxVI_DynamicProperty_DeepCopy(esxVI_DynamicProperty **dest, - esxVI_DynamicProperty *src) -{ - if (dest == NULL || *dest != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (src == NULL) { - return 0; - } - - if (esxVI_DynamicProperty_Alloc(dest) < 0 || - esxVI_String_DeepCopyValue(&(*dest)->name, src->name) < 0 || - esxVI_AnyType_DeepCopy(&(*dest)->val, src->val) < 0) { - goto failure; - } - - return 0; - - failure: - esxVI_DynamicProperty_Free(dest); - - return -1; -} - -/* esxVI_DynamicProperty_DeepCopyList */ -ESX_VI__TEMPLATE__LIST__DEEP_COPY(DynamicProperty); - -/* esxVI_DynamicProperty_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(DynamicProperty); - -/* esxVI_DynamicProperty_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(DynamicProperty, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, name); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(AnyType, val); -}); - -/* esxVI_DynamicProperty_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(DynamicProperty); - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: HostCpuIdInfo - */ - -/* esxVI_HostCpuIdInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(HostCpuIdInfo); - -/* esxVI_HostCpuIdInfo_Free */ -ESX_VI__TEMPLATE__FREE(HostCpuIdInfo, -{ - esxVI_HostCpuIdInfo_Free(&item->_next); - - esxVI_Int_Free(&item->level); - VIR_FREE(item->vendor); - VIR_FREE(item->eax); - VIR_FREE(item->ebx); - VIR_FREE(item->ecx); - VIR_FREE(item->edx); -}); - -/* esxVI_HostCpuIdInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(HostCpuIdInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(level); -}); - -/* esxVI_HostCpuIdInfo_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(HostCpuIdInfo); - -/* esxVI_HostCpuIdInfo_CastListFromAnyType */ -ESX_VI__TEMPLATE__LIST__CAST_FROM_ANY_TYPE(HostCpuIdInfo); - -/* esxVI_HostCpuIdInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(HostCpuIdInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, level); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, vendor); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, eax); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, ebx); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, ecx); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, edx); -}); - -/* esxVI_HostCpuIdInfo_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(HostCpuIdInfo); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: SelectionSpec - */ - -/* esxVI_SelectionSpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(SelectionSpec); - -void -esxVI_SelectionSpec_Free(esxVI_SelectionSpec **selectionSpec) -{ - esxVI_SelectionSpec *local = NULL; - - if (selectionSpec == NULL || *selectionSpec == NULL) { - return; - } - - esxVI_SelectionSpec_Free(&(*selectionSpec)->_next); - - if ((*selectionSpec)->_super != NULL) { - /* - * Explicitly set this pointer to NULL here, otherwise this is will - * result in a dangling pointer. The actual memory of this object is - * freed by a call from the esxVI_TraversalSpec_Free function to the - * esxVI_SelectionSpec_Free function with the base pointer. - * - * Use a local copy of the pointer and set the reference to NULL, - * otherwise Valgrind complains about invalid writes. - */ - local = *selectionSpec; - *selectionSpec = NULL; - - esxVI_TraversalSpec_Free(&local->_super); - } else { - VIR_FREE((*selectionSpec)->name); - - VIR_FREE(*selectionSpec); - } -} - -/* esxVI_SelectionSpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(SelectionSpec, -{ - if (item->_super != NULL) { - return esxVI_TraversalSpec_Validate(item->_super); - } - - /* All properties are optional */ - (void)type_name; -}); - -/* esxVI_SelectionSpec_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(SelectionSpec); - -int -esxVI_SelectionSpec_Serialize(esxVI_SelectionSpec *selectionSpec, - const char *element, virBufferPtr output) -{ - if (element == NULL || output == NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (selectionSpec == NULL) { - return 0; - } - - if (selectionSpec->_super != NULL) { - return esxVI_TraversalSpec_Serialize(selectionSpec->_super, element, - output); - } - - if (esxVI_SelectionSpec_Validate(selectionSpec) < 0) { - return -1; - } - - ESV_VI__XML_TAG__OPEN(output, element, "SelectionSpec"); - - if (esxVI_String_SerializeValue(selectionSpec->name, "name", output) < 0) { - return -1; - } - - ESV_VI__XML_TAG__CLOSE(output, element); - - return 0; -} - -/* esxVI_SelectionSpec_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(SelectionSpec); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: TraversalSpec extends SelectionSpec - */ - -int -esxVI_TraversalSpec_Alloc(esxVI_TraversalSpec **traversalSpec) -{ - if (esxVI_Alloc((void **)traversalSpec, sizeof(esxVI_TraversalSpec)) < 0) { - return -1; - } - - if (esxVI_SelectionSpec_Alloc(&(*traversalSpec)->_base) < 0) { - esxVI_TraversalSpec_Free(traversalSpec); - return -1; - } - - (*traversalSpec)->_base->_super = *traversalSpec; - - return 0; -} - -void -esxVI_TraversalSpec_Free(esxVI_TraversalSpec **traversalSpec) -{ - esxVI_TraversalSpec *local = NULL; - - if (traversalSpec == NULL || *traversalSpec == NULL) { - return; - } - - /* - * Need to store the traversalSpec pointer in a local variable here, - * because it is possible that the traversalSpec pointer and the _super - * pointer represent the same location in memory, e.g. if - * esxVI_SelectionSpec_Free calls esxVI_TraversalSpec_Free with the _super - * pointer as argument. Setting the _super pointer to NULL sets the - * traversalSpec pointer also to NULL, because we're working on a reference - * to this pointer here. - * - * Also use a local copy of the pointer and set the reference to NULL, - * otherwise Valgrind complains about invalid writes. - */ - local = *traversalSpec; - *traversalSpec = NULL; - - /* - * Setting the _super pointer to NULL here is important, otherwise - * esxVI_SelectionSpec_Free would call esxVI_TraversalSpec_Free again, - * resulting in both functions calling each other trying to free the - * _base/_super object until a stackoverflow occurs. - */ - local->_base->_super = NULL; - - esxVI_SelectionSpec_Free(&local->_base); - VIR_FREE(local->type); - VIR_FREE(local->path); - esxVI_SelectionSpec_Free(&local->selectSet); - - VIR_FREE(local); -} - -/* esxVI_TraversalSpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(TraversalSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(type); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(path); -}); - -/* esxVI_TraversalSpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(TraversalSpec, -{ - if (esxVI_String_SerializeValue(item->_base->name, "name", output) < 0) { - return -1; - } - - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, type); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, path); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Boolean, skip); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(SelectionSpec, selectSet); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectSpec - */ - -/* esxVI_ObjectSpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ObjectSpec); - -/* esxVI_ObjectSpec_Free */ -ESX_VI__TEMPLATE__FREE(ObjectSpec, -{ - esxVI_ObjectSpec_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->obj); - esxVI_SelectionSpec_Free(&item->selectSet); -}); - -/* esxVI_ObjectSpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ObjectSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(obj); -}); - -/* esxVI_ObjectSpec_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(ObjectSpec); - -/* esxVI_ObjectSpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(ObjectSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(ManagedObjectReference, obj); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Boolean, skip); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(SelectionSpec, selectSet); -}); - -/* esxVI_ObjectSpec_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(ObjectSpec); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyChange - */ - -/* esxVI_PropertyChange_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PropertyChange); - -/* esxVI_PropertyChange_Free */ -ESX_VI__TEMPLATE__FREE(PropertyChange, -{ - esxVI_PropertyChange_Free(&item->_next); - - VIR_FREE(item->name); - esxVI_AnyType_Free(&item->val); -}); - -/* esxVI_PropertyChange_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PropertyChange, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(name); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(op); -}); - -/* esxVI_PropertyChange_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PropertyChange); - -/* esxVI_PropertyChange_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PropertyChange, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, name); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(PropertyChangeOp, op); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(AnyType, val); -}); - -/* esxVI_PropertyChange_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PropertyChange); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertySpec - */ - -/* esxVI_PropertySpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PropertySpec); - -/* esxVI_PropertySpec_Free */ -ESX_VI__TEMPLATE__FREE(PropertySpec, -{ - esxVI_PropertySpec_Free(&item->_next); - - VIR_FREE(item->type); - esxVI_String_Free(&item->pathSet); -}); - -/* esxVI_PropertySpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PropertySpec, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(type); -}); - -/* esxVI_PropertySpec_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PropertySpec); - -/* esxVI_PropertySpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(PropertySpec, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, type); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Boolean, all); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(String, pathSet); -}); - -/* esxVI_PropertySpec_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(PropertySpec); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyFilterSpec - */ - -/* esxVI_PropertyFilterSpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PropertyFilterSpec); - -/* esxVI_PropertyFilterSpec_Free */ -ESX_VI__TEMPLATE__FREE(PropertyFilterSpec, -{ - esxVI_PropertyFilterSpec_Free(&item->_next); - - esxVI_PropertySpec_Free(&item->propSet); - esxVI_ObjectSpec_Free(&item->objectSet); -}); - -/* esxVI_PropertyFilterSpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PropertyFilterSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(propSet); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(objectSet); -}); - -/* esxVI_PropertyFilterSpec_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PropertyFilterSpec); - -/* esxVI_PropertyFilterSpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(PropertyFilterSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(PropertySpec, propSet); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(ObjectSpec, objectSet); -}); - -/* esxVI_PropertyFilterSpec_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(PropertyFilterSpec); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectContent - */ - -/* esxVI_ObjectContent_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ObjectContent); - -/* esxVI_ObjectContent_Free */ -ESX_VI__TEMPLATE__FREE(ObjectContent, -{ - esxVI_ObjectContent_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->obj); - esxVI_DynamicProperty_Free(&item->propSet); - /*esxVI_MissingProperty_Free(&item->missingSet);*//* FIXME */ -}); - -/* esxVI_ObjectContent_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ObjectContent, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(obj); -}); - -/* esxVI_ObjectContent_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(ObjectContent); - -int -esxVI_ObjectContent_DeepCopy(esxVI_ObjectContent **dest, - esxVI_ObjectContent *src) -{ - if (dest == NULL || *dest != NULL) { - ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, "Invalid argument"); - return -1; - } - - if (src == NULL) { - return 0; - } - - if (esxVI_ObjectContent_Alloc(dest) < 0 || - esxVI_ManagedObjectReference_DeepCopy(&(*dest)->obj, src->obj) < 0 || - esxVI_DynamicProperty_DeepCopyList(&(*dest)->propSet, - src->propSet) < 0) { - goto failure; - } - -#if 0 /* FIXME */ - if (esxVI_MissingProperty_DeepCopyList(&(*dest)->missingSet, - src->missingSet) < 0) { - goto failure; - } -#endif - - return 0; - - failure: - esxVI_ObjectContent_Free(dest); - - return -1; -} - -/* esxVI_ObjectContent_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ObjectContent, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - NULL, obj); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(DynamicProperty, propSet); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(missingSet); /* FIXME */ -}); - -/* esxVI_ObjectContent_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(ObjectContent); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectUpdate - */ - -/* esxVI_ObjectUpdate_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ObjectUpdate); - -/* esxVI_ObjectUpdate_Free */ -ESX_VI__TEMPLATE__FREE(ObjectUpdate, -{ - esxVI_ObjectUpdate_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->obj); - esxVI_PropertyChange_Free(&item->changeSet); - /*esxVI_MissingProperty_Free(&item->missingSet);*//* FIXME */ -}); - -/* esxVI_ObjectUpdate_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ObjectUpdate, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(kind); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(obj); -}); - -/* esxVI_ObjectUpdate_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(ObjectUpdate); - -/* esxVI_ObjectUpdate_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ObjectUpdate, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(ObjectUpdateKind, kind); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - NULL, obj); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(PropertyChange, changeSet); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(missingSet); /* FIXME */ -}); - -/* esxVI_ObjectUpdate_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(ObjectUpdate); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyFilterUpdate - */ - -/* esxVI_PropertyFilterUpdate_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PropertyFilterUpdate); - -/* esxVI_PropertyFilterUpdate_Free */ -ESX_VI__TEMPLATE__FREE(PropertyFilterUpdate, -{ - esxVI_PropertyFilterUpdate_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->filter); - esxVI_ObjectUpdate_Free(&item->objectSet); - /*esxVI_MissingProperty_Free(&item->missingSet);*//* FIXME */ -}); - -/* esxVI_PropertyFilterUpdate_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PropertyFilterUpdate, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(filter); -}); - -/* esxVI_PropertyFilterUpdate_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PropertyFilterUpdate); - -/* esxVI_PropertyFilterUpdate_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PropertyFilterUpdate, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - NULL, filter); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(ObjectUpdate, objectSet); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(missingSet); /* FIXME */ -}); - -/* esxVI_PropertyFilterUpdate_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PropertyFilterUpdate); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: AboutInfo - */ - -/* esxVI_AboutInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(AboutInfo); - -/* esxVI_AboutInfo_Free */ -ESX_VI__TEMPLATE__FREE(AboutInfo, -{ - VIR_FREE(item->name); - VIR_FREE(item->fullName); - VIR_FREE(item->vendor); - VIR_FREE(item->version); - VIR_FREE(item->build); - VIR_FREE(item->localeVersion); - VIR_FREE(item->localeBuild); - VIR_FREE(item->osType); - VIR_FREE(item->productLineId); - VIR_FREE(item->apiType); - VIR_FREE(item->apiVersion); -}); - -/* esxVI_AboutInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(AboutInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(name); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(fullName); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(vendor); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(version); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(build); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(localeVersion); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(localeBuild); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(osType); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(productLineId); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(apiType); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(apiVersion); -}); - -/* esxVI_AboutInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(AboutInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, name); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, fullName); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, vendor); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, version); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, build); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, localeVersion); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, localeBuild); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, osType); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, productLineId); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, apiType); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, apiVersion); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ServiceContent - */ - -/* esxVI_ServiceContent_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ServiceContent); - -/* esxVI_ServiceContent_Free */ -ESX_VI__TEMPLATE__FREE(ServiceContent, -{ - esxVI_ManagedObjectReference_Free(&item->rootFolder); - esxVI_ManagedObjectReference_Free(&item->propertyCollector); - esxVI_ManagedObjectReference_Free(&item->viewManager); - esxVI_AboutInfo_Free(&item->about); - esxVI_ManagedObjectReference_Free(&item->setting); - esxVI_ManagedObjectReference_Free(&item->userDirectory); - esxVI_ManagedObjectReference_Free(&item->sessionManager); - esxVI_ManagedObjectReference_Free(&item->authorizationManager); - esxVI_ManagedObjectReference_Free(&item->perfManager); - esxVI_ManagedObjectReference_Free(&item->scheduledTaskManager); - esxVI_ManagedObjectReference_Free(&item->alarmManager); - esxVI_ManagedObjectReference_Free(&item->eventManager); - esxVI_ManagedObjectReference_Free(&item->taskManager); - esxVI_ManagedObjectReference_Free(&item->extensionManager); - esxVI_ManagedObjectReference_Free(&item->customizationSpecManager); - esxVI_ManagedObjectReference_Free(&item->customFieldsManager); - esxVI_ManagedObjectReference_Free(&item->accountManager); - esxVI_ManagedObjectReference_Free(&item->diagnosticManager); - esxVI_ManagedObjectReference_Free(&item->licenseManager); - esxVI_ManagedObjectReference_Free(&item->searchIndex); - esxVI_ManagedObjectReference_Free(&item->fileManager); - esxVI_ManagedObjectReference_Free(&item->virtualDiskManager); - esxVI_ManagedObjectReference_Free(&item->virtualizationManager); -}); - -/* esxVI_ServiceContent_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ServiceContent, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(rootFolder); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(propertyCollector); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(about); -}); - -/* esxVI_ServiceContent_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ServiceContent, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "Folder", rootFolder); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "PropertyCollector", - propertyCollector); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "ViewManager", - viewManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(AboutInfo, about); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "OptionManager", setting); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "UserDirectory", - userDirectory); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "SessionManager", - sessionManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "AuthorizationManager", - authorizationManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "PerformanceManager", - perfManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "ScheduledTaskManager", - scheduledTaskManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "AlarmManager", - alarmManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "EventManager", - eventManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "TaskManager", - taskManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "ExtensionManager", - extensionManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "CustomizationSpecManager", - customizationSpecManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "CustomFieldsManager", - customFieldsManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "HostLocalAccountManager", - accountManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "DiagnosticManager", - diagnosticManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "LicenseManager", - licenseManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "SearchIndex", - searchIndex); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "FileManager", - fileManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "VirtualDiskManager", - virtualDiskManager); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "VirtualizationManager", - virtualizationManager); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: UpdateSet - */ - -/* esxVI_UpdateSet_Alloc */ -ESX_VI__TEMPLATE__ALLOC(UpdateSet); - -/* esxVI_UpdateSet_Free */ -ESX_VI__TEMPLATE__FREE(UpdateSet, -{ - VIR_FREE(item->version); - esxVI_PropertyFilterUpdate_Free(&item->filterSet); -}); - -/* esxVI_UpdateSet_Validate */ -ESX_VI__TEMPLATE__VALIDATE(UpdateSet, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(version); -}); - -/* esxVI_UpdateSet_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(UpdateSet, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, version); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(PropertyFilterUpdate, - filterSet); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: SharesInfo - */ - -/* esxVI_SharesInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(SharesInfo); - -/* esxVI_SharesInfo_Free */ -ESX_VI__TEMPLATE__FREE(SharesInfo, -{ - esxVI_Int_Free(&item->shares); -}); - -/* esxVI_SharesInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(SharesInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(shares); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(level); -}); - -/* esxVI_SharesInfo_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(SharesInfo); - -/* esxVI_SharesInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(SharesInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, shares); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(SharesLevel, level); -}); - -/* esxVI_SharesInfo_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(SharesInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Int, shares); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(SharesLevel, level); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ResourceAllocationInfo - */ - -/* esxVI_ResourceAllocationInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ResourceAllocationInfo); - -/* esxVI_ResourceAllocationInfo_Free */ -ESX_VI__TEMPLATE__FREE(ResourceAllocationInfo, -{ - esxVI_Long_Free(&item->reservation); - esxVI_Long_Free(&item->limit); - esxVI_SharesInfo_Free(&item->shares); - esxVI_Long_Free(&item->overheadLimit); -}); - -/* esxVI_ResourceAllocationInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE_NOOP(ResourceAllocationInfo); - -/* esxVI_ResourceAllocationInfo_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(ResourceAllocationInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Long, reservation); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Boolean, expandableReservation); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Long, limit); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(SharesInfo, shares); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Long, overheadLimit); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ResourcePoolResourceUsage - */ - -/* esxVI_ResourcePoolResourceUsage_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ResourcePoolResourceUsage); - -/* esxVI_ResourcePoolResourceUsage_Free */ -ESX_VI__TEMPLATE__FREE(ResourcePoolResourceUsage, -{ - esxVI_Long_Free(&item->reservationUsed); - esxVI_Long_Free(&item->reservationUsedForVm); - esxVI_Long_Free(&item->unreservedForPool); - esxVI_Long_Free(&item->unreservedForVm); - esxVI_Long_Free(&item->overallUsage); - esxVI_Long_Free(&item->maxUsage); -}); - -/* esxVI_ResourcePoolResourceUsage_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ResourcePoolResourceUsage, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(reservationUsed); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(reservationUsedForVm); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(unreservedForPool); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(unreservedForVm); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(overallUsage); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(maxUsage); -}); - -/* esxVI_ResourcePoolResourceUsage_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(ResourcePoolResourceUsage); - -/* esxVI_ResourcePoolResourceUsage_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ResourcePoolResourceUsage, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, reservationUsed); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, reservationUsedForVm); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, unreservedForPool); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, unreservedForVm); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, overallUsage); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Long, maxUsage); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: VirtualMachineConfigSpec - */ - -/* esxVI_VirtualMachineConfigSpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(VirtualMachineConfigSpec); - -/* esxVI_VirtualMachineConfigSpec_Free */ -ESX_VI__TEMPLATE__FREE(VirtualMachineConfigSpec, -{ - VIR_FREE(item->changeVersion); - VIR_FREE(item->name); - VIR_FREE(item->version); - VIR_FREE(item->uuid); - esxVI_Long_Free(&item->npivNodeWorldWideName); - esxVI_Long_Free(&item->npivPortWorldWideName); - VIR_FREE(item->npivWorldWideNameType); - VIR_FREE(item->npivWorldWideNameOp); - VIR_FREE(item->locationId); - VIR_FREE(item->guestId); - VIR_FREE(item->alternateGuestName); - VIR_FREE(item->annotation); - /* FIXME: implement missing */ - esxVI_Int_Free(&item->numCPUs); - esxVI_Long_Free(&item->memoryMB); - /* FIXME: implement missing */ - esxVI_ResourceAllocationInfo_Free(&item->cpuAllocation); - esxVI_ResourceAllocationInfo_Free(&item->memoryAllocation); - /* FIXME: implement missing */ - VIR_FREE(item->swapPlacement); - /* FIXME: implement missing */ -}); - -/* esxVI_VirtualMachineConfigSpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE_NOOP(VirtualMachineConfigSpec); - -/* esxVI_VirtualMachineConfigSpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(VirtualMachineConfigSpec, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, changeVersion); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, name); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, version); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, uuid); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(Long, npivNodeWorldWideName); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(Long, npivPortWorldWideName); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, npivWorldWideNameType); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, npivWorldWideNameOp); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, locationId); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, guestId); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, alternateGuestName); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, annotation); - /* FIXME: implement missing */ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Int, numCPUs); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Long, memoryMB); - /* FIXME: implement missing */ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(ResourceAllocationInfo, - cpuAllocation); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(ResourceAllocationInfo, - memoryAllocation); - /* FIXME: implement missing */ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, swapPlacement); - /* FIXME: implement missing */ -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: Event - */ - -/* esxVI_Event_Alloc */ -ESX_VI__TEMPLATE__ALLOC(Event); - -/* esxVI_Event_Free */ -ESX_VI__TEMPLATE__FREE(Event, -{ - esxVI_Event_Free(&item->_next); - - /* FIXME: implement the rest */ - esxVI_Int_Free(&item->key); - esxVI_Int_Free(&item->chainId); - esxVI_DateTime_Free(&item->createdTime); - VIR_FREE(item->userName); - VIR_FREE(item->fullFormattedMessage); -}); - -/* esxVI_Event_Validate */ -ESX_VI__TEMPLATE__VALIDATE(Event, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(key); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(chainId); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(createdTime); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(userName); -}); - -/* esxVI_Event_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(Event, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, key); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, chainId); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, createdTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, userName); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(datacenter); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(computeResource); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(host); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(vm); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, fullFormattedMessage); -}); - -/* esxVI_Event_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(Event); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: UserSession - */ - -/* esxVI_UserSession_Alloc */ -ESX_VI__TEMPLATE__ALLOC(UserSession); - -/* esxVI_UserSession_Free */ -ESX_VI__TEMPLATE__FREE(UserSession, -{ - VIR_FREE(item->key); - VIR_FREE(item->userName); - VIR_FREE(item->fullName); - esxVI_DateTime_Free(&item->loginTime); - esxVI_DateTime_Free(&item->lastActiveTime); - VIR_FREE(item->locale); - VIR_FREE(item->messageLocale); -}); - -/* esxVI_UserSession_Validate */ -ESX_VI__TEMPLATE__VALIDATE(UserSession, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(key); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(userName); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(fullName); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(loginTime); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(lastActiveTime); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(locale); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(messageLocale); -}); - -/* esxVI_UserSession_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(UserSession); - -/* esxVI_UserSession_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(UserSession, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, key); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, userName); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, fullName); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, loginTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, lastActiveTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, locale); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, messageLocale); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: VirtualMachineQuestionInfo - */ - -/* esxVI_VirtualMachineQuestionInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(VirtualMachineQuestionInfo); - -/* esxVI_VirtualMachineQuestionInfo_Free */ -ESX_VI__TEMPLATE__FREE(VirtualMachineQuestionInfo, -{ - VIR_FREE(item->id); - VIR_FREE(item->text); - esxVI_ChoiceOption_Free(&item->choice); - /*esxVI_VirtualMachineMessage_Free(&item->message);*//* FIXME */ -}); - -/* esxVI_VirtualMachineQuestionInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(VirtualMachineQuestionInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(id); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(text); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(choice); -}); - -/* esxVI_VirtualMachineQuestionInfo_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(VirtualMachineQuestionInfo); - -/* esxVI_VirtualMachineQuestionInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(VirtualMachineQuestionInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, id); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, text); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(ChoiceOption, choice); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(message); /* FIXME */ -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ElementDescription extends Description - * - * In contrast to SelectionSpec and TraversalSpec just merge - * Description into ElementDescription for simplicity, because - * only ElementDescription is used. - */ - -/* esxVI_ElementDescription_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ElementDescription); - -/* esxVI_ElementDescription_Free */ -ESX_VI__TEMPLATE__FREE(ElementDescription, -{ - esxVI_ElementDescription_Free(&item->_next); - - VIR_FREE(item->label); - VIR_FREE(item->summary); - VIR_FREE(item->key); -}); - -/* esxVI_ElementDescription_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ElementDescription, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(label); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(summary); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(key); -}); - -/* esxVI_ElementDescription_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(ElementDescription); - -/* esxVI_ElementDescription_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ElementDescription, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, label); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, summary); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, key); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ChoiceOption extends OptionType - * - * In contrast to SelectionSpec and TraversalSpec just merge - * OptionType into ChoiceOption for simplicity, because - * only ChoiceOption is used. - */ - -/* esxVI_ChoiceOption_Alloc */ -ESX_VI__TEMPLATE__ALLOC(ChoiceOption); - -/* esxVI_ChoiceOption_Free */ -ESX_VI__TEMPLATE__FREE(ChoiceOption, -{ - esxVI_ElementDescription_Free(&item->choiceInfo); - esxVI_Int_Free(&item->defaultIndex); -}); - -/* esxVI_ChoiceOption_Validate */ -ESX_VI__TEMPLATE__VALIDATE(ChoiceOption, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(choiceInfo); -}); - -/* esxVI_ChoiceOption_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(ChoiceOption, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Boolean, valueIsReadonly); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(ElementDescription, choiceInfo); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, defaultIndex); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfMetricId - */ - -/* esxVI_PerfMetricId_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfMetricId); - -/* esxVI_PerfMetricId_Free */ -ESX_VI__TEMPLATE__FREE(PerfMetricId, -{ - esxVI_PerfMetricId_Free(&item->_next); - - esxVI_Int_Free(&item->counterId); - VIR_FREE(item->instance); -}); - -/* esxVI_PerfMetricId_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfMetricId, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(counterId); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(instance); -}); - -/* esxVI_PerfMetricId_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(PerfMetricId, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Int, counterId); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, instance); -}); - -/* esxVI_PerfMetricId_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(PerfMetricId); - -/* esxVI_PerfMetricId_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PerfMetricId, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, counterId); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, instance); -}); - -/* esxVI_PerfMetricId_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PerfMetricId); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfCounterInfo - */ - -/* esxVI_PerfCounterInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfCounterInfo); - -/* esxVI_PerfCounterInfo_Free */ -ESX_VI__TEMPLATE__FREE(PerfCounterInfo, -{ - esxVI_PerfCounterInfo_Free(&item->_next); - - esxVI_Int_Free(&item->key); - esxVI_ElementDescription_Free(&item->nameInfo); - esxVI_ElementDescription_Free(&item->groupInfo); - esxVI_ElementDescription_Free(&item->unitInfo); - esxVI_Int_Free(&item->level); - esxVI_Int_Free(&item->associatedCounterId); -}); - -/* esxVI_PerfCounterInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfCounterInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(key); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(nameInfo); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(groupInfo); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(unitInfo); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(rollupType); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(statsType); -}); - -/* esxVI_PerfCounterInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PerfCounterInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, key); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(ElementDescription, nameInfo); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(ElementDescription, groupInfo); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(ElementDescription, unitInfo); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(PerfSummaryType, rollupType); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(PerfStatsType, statsType); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, level); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(Int, associatedCounterId); -}); - -/* esxVI_PerfCounterInfo_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PerfCounterInfo); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfQuerySpec - */ - -/* esxVI_PerfQuerySpec_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfQuerySpec); - -/* esxVI_PerfQuerySpec_Free */ -ESX_VI__TEMPLATE__FREE(PerfQuerySpec, -{ - esxVI_PerfQuerySpec_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->entity); - esxVI_DateTime_Free(&item->startTime); - esxVI_DateTime_Free(&item->endTime); - esxVI_Int_Free(&item->maxSample); - esxVI_PerfMetricId_Free(&item->metricId); - esxVI_Int_Free(&item->intervalId); - VIR_FREE(item->format); -}); - -/* esxVI_PerfQuerySpec_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfQuerySpec, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(entity); -}); - -/* esxVI_PerfQuerySpec_Serialize */ -ESX_VI__TEMPLATE__SERIALIZE(PerfQuerySpec, -{ - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(ManagedObjectReference, entity); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(DateTime, startTime); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(DateTime, endTime); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Int, maxSample); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_LIST(PerfMetricId, metricId); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE(Int, intervalId); - ESX_VI__TEMPLATE__PROPERTY__SERIALIZE_VALUE(String, format); -}); - -/* esxVI_PerfQuerySpec_SerializeList */ -ESX_VI__TEMPLATE__LIST__SERIALIZE(PerfQuerySpec); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfSampleInfo - */ - -/* esxVI_PerfSampleInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfSampleInfo); - -/* esxVI_PerfSampleInfo_Free */ -ESX_VI__TEMPLATE__FREE(PerfSampleInfo, -{ - esxVI_PerfSampleInfo_Free(&item->_next); - - esxVI_DateTime_Free(&item->timestamp); - esxVI_Int_Free(&item->interval); -}); - -/* esxVI_PerfSampleInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfSampleInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(timestamp); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(interval); -}); - -/* esxVI_PerfSampleInfo_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PerfSampleInfo); - -/* esxVI_PerfSampleInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PerfSampleInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, timestamp); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, interval); -}); - -/* esxVI_PerfSampleInfo_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PerfSampleInfo); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfMetricIntSeries extends PerfMetricSeries - * - * In contrast to SelectionSpec and TraversalSpec just merge - * PerfMetricSeries into PerfMetricIntSeries for simplicity, because - * only PerfMetricIntSeries is used and the other type inheriting - * PerfMetricSeries (PerfMetricSeriesCSV) is not used. - */ - -/* esxVI_PerfMetricIntSeries_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfMetricIntSeries); - -/* esxVI_PerfMetricIntSeries_Free */ -ESX_VI__TEMPLATE__FREE(PerfMetricIntSeries, -{ - esxVI_PerfMetricIntSeries_Free(&item->_next); - - esxVI_PerfMetricId_Free(&item->id); - esxVI_Long_Free(&item->value); -}); - -/* esxVI_PerfMetricIntSeries_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfMetricIntSeries, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(id); -}); - -/* esxVI_PerfMetricIntSeries_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(PerfMetricIntSeries); - -/* esxVI_PerfMetricIntSeries_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PerfMetricIntSeries, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(PerfMetricId, id); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(Long, value); -}); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfEntityMetric extends PerfEntityMetricBase - * - * In contrast to SelectionSpec and TraversalSpec just merge - * PerfEntityMetricBase into PerfEntityMetric for simplicity, because - * only PerfEntityMetric is used and the other type inheriting - * PerfEntityMetric (PerfEntityMetricCSV) is not used. - * - * Also use PerfMetricIntSeries instead of the correct base type - * PerfMetricSeries for the value property, because only - * PerfMetricIntSeries is used. - */ - -/* esxVI_PerfEntityMetric_Alloc */ -ESX_VI__TEMPLATE__ALLOC(PerfEntityMetric); - -/* esxVI_PerfEntityMetric_Free */ -ESX_VI__TEMPLATE__FREE(PerfEntityMetric, -{ - esxVI_PerfEntityMetric_Free(&item->_next); - - esxVI_ManagedObjectReference_Free(&item->entity); - esxVI_PerfSampleInfo_Free(&item->sampleInfo); - esxVI_PerfMetricIntSeries_Free(&item->value); -}); - -/* esxVI_PerfEntityMetric_Validate */ -ESX_VI__TEMPLATE__VALIDATE(PerfEntityMetric, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(entity); -}); - -/* esxVI_PerfEntityMetric_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(PerfEntityMetric, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - NULL, entity); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(PerfSampleInfo, sampleInfo); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_LIST(PerfMetricIntSeries, value); -}); - -/* esxVI_PerfEntityMetric_DeserializeList */ -ESX_VI__TEMPLATE__LIST__DESERIALIZE(PerfEntityMetric); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: TaskInfo - */ - -/* esxVI_TaskInfo_Alloc */ -ESX_VI__TEMPLATE__ALLOC(TaskInfo); - -/* esxVI_TaskInfo_Free */ -ESX_VI__TEMPLATE__FREE(TaskInfo, -{ - esxVI_TaskInfo_Free(&item->_next); - - VIR_FREE(item->key); - esxVI_ManagedObjectReference_Free(&item->task); - VIR_FREE(item->name); - VIR_FREE(item->descriptionId); - esxVI_ManagedObjectReference_Free(&item->entity); - VIR_FREE(item->entityName); - /*esxVI_ManagedObjectReference_Free(&item->locked);*//* FIXME */ - /*esxVI_MethodFault_Free(&item->error);*//* FIXME */ - esxVI_AnyType_Free(&item->result); - esxVI_Int_Free(&item->progress); - /*esxVI_TaskReason_Free(&item->reason);*//* FIXME */ - esxVI_DateTime_Free(&item->queueTime); - esxVI_DateTime_Free(&item->startTime); - esxVI_DateTime_Free(&item->completeTime); - esxVI_Int_Free(&item->eventChainId); -}); - -/* esxVI_TaskInfo_Validate */ -ESX_VI__TEMPLATE__VALIDATE(TaskInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(key); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(task); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(descriptionId); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(state); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(cancelled); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(cancelable); - /*ESX_VI__TEMPLATE__PROPERTY__REQUIRE(reason);*//* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(queueTime); - ESX_VI__TEMPLATE__PROPERTY__REQUIRE(eventChainId); -}); - -/* esxVI_TaskInfo_CastFromAnyType */ -ESX_VI__TEMPLATE__CAST_FROM_ANY_TYPE(TaskInfo); - -/* esxVI_TaskInfo_AppendToList */ -ESX_VI__TEMPLATE__LIST__APPEND(TaskInfo); - -/* esxVI_TaskInfo_Deserialize */ -ESX_VI__TEMPLATE__DESERIALIZE(TaskInfo, -{ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, key); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - "Task", task); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, name); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, descriptionId); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_EXPECTED(ManagedObjectReference, - NULL, entity); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_VALUE(String, entityName); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(locked); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(TaskInfoState, state); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Boolean, cancelled); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Boolean, cancelable); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(error); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(AnyType, result); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, progress); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE_NOOP(reason); /* FIXME */ - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, queueTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, startTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(DateTime, completeTime); - ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(Int, eventChainId); -}); +#include "esx_vi_types.generated.c" diff --git a/src/esx/esx_vi_types.h b/src/esx/esx_vi_types.h index e5451e9c65..a61cdc17ad 100644 --- a/src/esx/esx_vi_types.h +++ b/src/esx/esx_vi_types.h @@ -25,13 +25,8 @@ # include "buf.h" - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * XSI - */ - typedef enum _esxVI_Type esxVI_Type; +typedef struct _esxVI_Object esxVI_Object; @@ -48,76 +43,51 @@ typedef struct _esxVI_DateTime esxVI_DateTime; -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enums - */ - -typedef enum _esxVI_ManagedEntityStatus esxVI_ManagedEntityStatus; -typedef enum _esxVI_ObjectUpdateKind esxVI_ObjectUpdateKind; -typedef enum _esxVI_PerfSummaryType esxVI_PerfSummaryType; -typedef enum _esxVI_PerfStatsType esxVI_PerfStatsType; -typedef enum _esxVI_PropertyChangeOp esxVI_PropertyChangeOp; -typedef enum _esxVI_SharesLevel esxVI_SharesLevel; -typedef enum _esxVI_TaskInfoState esxVI_TaskInfoState; -typedef enum _esxVI_VirtualMachineMovePriority esxVI_VirtualMachineMovePriority; -typedef enum _esxVI_VirtualMachinePowerState esxVI_VirtualMachinePowerState; - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * VI Types */ typedef struct _esxVI_Fault esxVI_Fault; typedef struct _esxVI_ManagedObjectReference esxVI_ManagedObjectReference; -typedef struct _esxVI_DynamicProperty esxVI_DynamicProperty; -typedef struct _esxVI_HostCpuIdInfo esxVI_HostCpuIdInfo; -typedef struct _esxVI_SelectionSpec esxVI_SelectionSpec; -typedef struct _esxVI_TraversalSpec esxVI_TraversalSpec; -typedef struct _esxVI_ObjectSpec esxVI_ObjectSpec; -typedef struct _esxVI_PropertyChange esxVI_PropertyChange; -typedef struct _esxVI_PropertySpec esxVI_PropertySpec; -typedef struct _esxVI_PropertyFilterSpec esxVI_PropertyFilterSpec; -typedef struct _esxVI_ObjectContent esxVI_ObjectContent; -typedef struct _esxVI_ObjectUpdate esxVI_ObjectUpdate; -typedef struct _esxVI_PropertyFilterUpdate esxVI_PropertyFilterUpdate; -typedef struct _esxVI_AboutInfo esxVI_AboutInfo; -typedef struct _esxVI_ServiceContent esxVI_ServiceContent; -typedef struct _esxVI_UpdateSet esxVI_UpdateSet; -typedef struct _esxVI_SharesInfo esxVI_SharesInfo; -typedef struct _esxVI_ResourceAllocationInfo esxVI_ResourceAllocationInfo; -typedef struct _esxVI_ResourcePoolResourceUsage esxVI_ResourcePoolResourceUsage; -typedef struct _esxVI_VirtualMachineConfigSpec esxVI_VirtualMachineConfigSpec; -typedef struct _esxVI_Event esxVI_Event; -typedef struct _esxVI_UserSession esxVI_UserSession; -typedef struct _esxVI_VirtualMachineQuestionInfo esxVI_VirtualMachineQuestionInfo; -typedef struct _esxVI_ElementDescription esxVI_ElementDescription; -typedef struct _esxVI_ChoiceOption esxVI_ChoiceOption; -typedef struct _esxVI_PerfMetricId esxVI_PerfMetricId; -typedef struct _esxVI_PerfCounterInfo esxVI_PerfCounterInfo; -typedef struct _esxVI_PerfQuerySpec esxVI_PerfQuerySpec; -typedef struct _esxVI_PerfSampleInfo esxVI_PerfSampleInfo; -typedef struct _esxVI_PerfMetricIntSeries esxVI_PerfMetricIntSeries; -typedef struct _esxVI_PerfEntityMetric esxVI_PerfEntityMetric; -typedef struct _esxVI_TaskInfo esxVI_TaskInfo; + +#include "esx_vi_types.generated.typedef" /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * XSI: Type + * Type */ enum _esxVI_Type { esxVI_Type_Undefined = 0, esxVI_Type_Boolean, + esxVI_Type_AnyType, esxVI_Type_String, esxVI_Type_Short, esxVI_Type_Int, esxVI_Type_Long, + esxVI_Type_DateTime, + esxVI_Type_Fault, + esxVI_Type_ManagedObjectReference, + +#include "esx_vi_types.generated.typeenum" + esxVI_Type_Other, }; -const char *esxVI_Type_Name(esxVI_Type type); +const char *esxVI_Type_ToString(esxVI_Type type); +esxVI_Type esxVI_Type_FromString(const char *type); + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Object extends List + */ + +struct _esxVI_Object { + esxVI_Object *_next; /* optional */ + esxVI_Type _type; /* required */ +}; @@ -142,8 +112,10 @@ int esxVI_Boolean_Deserialize(xmlNodePtr node, esxVI_Boolean *boolean_); */ struct _esxVI_AnyType { - xmlNodePtr _node; /* required */ + esxVI_AnyType *_unused; /* optional */ + esxVI_Type _type; /* = esxVI_Type_AnyType */ /* required */ + xmlNodePtr node; /* required */ esxVI_Type type; /* required */ char *other; /* required */ char *value; /* required */ @@ -170,12 +142,14 @@ int esxVI_AnyType_Deserialize(xmlNodePtr node, esxVI_AnyType **anyType); struct _esxVI_String { esxVI_String *_next; /* optional */ + esxVI_Type _type; /* required */ char *value; /* required */ }; int esxVI_String_Alloc(esxVI_String **string); void esxVI_String_Free(esxVI_String **stringList); +int esxVI_String_Validate(esxVI_String *string); int esxVI_String_AppendToList(esxVI_String **stringList, esxVI_String *string); int esxVI_String_AppendValueToList(esxVI_String **stringList, const char *value); @@ -202,6 +176,7 @@ int esxVI_String_DeserializeValue(xmlNodePtr node, char **value); struct _esxVI_Int { esxVI_Int *_next; /* optional */ + esxVI_Type _type; /* required */ int32_t value; /* required */ }; @@ -225,6 +200,7 @@ int esxVI_Int_Deserialize(xmlNodePtr node, esxVI_Int **number); struct _esxVI_Long { esxVI_Long *_next; /* optional */ + esxVI_Type _type; /* required */ int64_t value; /* required */ }; @@ -246,6 +222,9 @@ int esxVI_Long_Deserialize(xmlNodePtr node, esxVI_Long **number); */ struct _esxVI_DateTime { + esxVI_DateTime *_unused; /* optional */ + esxVI_Type _type; /* required */ + char *value; /* required */ }; @@ -258,171 +237,14 @@ int esxVI_DateTime_Deserialize(xmlNodePtr node, esxVI_DateTime **dateTime); -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: ManagedEntityStatus - */ - -enum _esxVI_ManagedEntityStatus { - esxVI_ManagedEntityStatus_Undefined = 0, - esxVI_ManagedEntityStatus_Gray, - esxVI_ManagedEntityStatus_Green, - esxVI_ManagedEntityStatus_Yellow, - esxVI_ManagedEntityStatus_Red, -}; - -int esxVI_ManagedEntityStatus_CastFromAnyType - (esxVI_AnyType *anyType, esxVI_ManagedEntityStatus *managedEntityStatus); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: ObjectUpdateKind - */ - -enum _esxVI_ObjectUpdateKind { - esxVI_ObjectUpdateKind_Undefined = 0, - esxVI_ObjectUpdateKind_Enter, - esxVI_ObjectUpdateKind_Leave, - esxVI_ObjectUpdateKind_Modify, -}; - -int esxVI_ObjectUpdateKind_Deserialize - (xmlNodePtr node, esxVI_ObjectUpdateKind *objectUpdateKind); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PerfSummaryType - */ - -enum _esxVI_PerfSummaryType { - esxVI_PerfSummaryType_Undefined = 0, - esxVI_PerfSummaryType_Average, - esxVI_PerfSummaryType_Latest, - esxVI_PerfSummaryType_Maximum, - esxVI_PerfSummaryType_Minimum, - esxVI_PerfSummaryType_None, - esxVI_PerfSummaryType_Summation, -}; - -int esxVI_PerfSummaryType_Deserialize(xmlNodePtr node, - esxVI_PerfSummaryType *perfSummaryType); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PerfStatsType - */ - -enum _esxVI_PerfStatsType { - esxVI_PerfStatsType_Undefined = 0, - esxVI_PerfStatsType_Absolute, - esxVI_PerfStatsType_Delta, - esxVI_PerfStatsType_Rate, -}; - -int esxVI_PerfStatsType_Deserialize(xmlNodePtr node, - esxVI_PerfStatsType *perfStatsType); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: PropertyChangeOp - */ - -enum _esxVI_PropertyChangeOp { - esxVI_PropertyChangeOp_Undefined = 0, - esxVI_PropertyChangeOp_Add, - esxVI_PropertyChangeOp_Remove, - esxVI_PropertyChangeOp_Assign, - esxVI_PropertyChangeOp_IndirectRemove, -}; - -int esxVI_PropertyChangeOp_Deserialize - (xmlNodePtr node, esxVI_PropertyChangeOp *propertyChangeOp); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: SharesLevel - */ - -enum _esxVI_SharesLevel { - esxVI_SharesLevel_Undefined = 0, - esxVI_SharesLevel_Custom, - esxVI_SharesLevel_High, - esxVI_SharesLevel_Low, - esxVI_SharesLevel_Normal, -}; - -int esxVI_SharesLevel_Serialize(esxVI_SharesLevel sharesLevel, - const char *element, virBufferPtr output); -int esxVI_SharesLevel_Deserialize(xmlNodePtr node, - esxVI_SharesLevel *sharesLevel); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: TaskInfoState - */ - -enum _esxVI_TaskInfoState { - esxVI_TaskInfoState_Undefined = 0, - esxVI_TaskInfoState_Error, - esxVI_TaskInfoState_Queued, - esxVI_TaskInfoState_Running, - esxVI_TaskInfoState_Success, -}; - -int esxVI_TaskInfoState_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_TaskInfoState *taskInfoState); -int esxVI_TaskInfoState_Deserialize(xmlNodePtr node, - esxVI_TaskInfoState *taskInfoState); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: VirtualMachineMovePriority - */ - -enum _esxVI_VirtualMachineMovePriority { - esxVI_VirtualMachineMovePriority_Undefined = 0, - esxVI_VirtualMachineMovePriority_LowPriority, - esxVI_VirtualMachineMovePriority_HighPriority, - esxVI_VirtualMachineMovePriority_DefaultPriority, -}; - -int esxVI_VirtualMachineMovePriority_Serialize - (esxVI_VirtualMachineMovePriority virtualMachineMovePriority, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Enum: VirtualMachinePowerState - */ - -enum _esxVI_VirtualMachinePowerState { - esxVI_VirtualMachinePowerState_Undefined = 0, - esxVI_VirtualMachinePowerState_PoweredOff, - esxVI_VirtualMachinePowerState_PoweredOn, - esxVI_VirtualMachinePowerState_Suspended, -}; - -int esxVI_VirtualMachinePowerState_CastFromAnyType - (esxVI_AnyType *anyType, - esxVI_VirtualMachinePowerState *virtualMachinePowerState); -int esxVI_VirtualMachinePowerState_Serialize - (esxVI_VirtualMachinePowerState virtualMachinePowerState, - const char *element, virBufferPtr output); - - - /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * VI Type: Fault */ struct _esxVI_Fault { + esxVI_Fault *_unused; /* optional */ + esxVI_Type _type; /* required */ + char *faultcode; /* required */ char *faultstring; /* required */ }; @@ -440,6 +262,7 @@ int esxVI_Fault_Deserialize(xmlNodePtr node, esxVI_Fault **fault); struct _esxVI_ManagedObjectReference { esxVI_ManagedObjectReference *_next; /* optional */ + esxVI_Type _type; /* required */ char *type; /* required */ char *value; /* required */ @@ -454,14 +277,12 @@ int esxVI_ManagedObjectReference_DeepCopy(esxVI_ManagedObjectReference **dest, int esxVI_ManagedObjectReference_AppendToList (esxVI_ManagedObjectReference **managedObjectReferenceList, esxVI_ManagedObjectReference *managedObjectReference); -int esxVI_ManagedObjectReference_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_ManagedObjectReference - **managedObjectReference, - const char *expectedType); +int esxVI_ManagedObjectReference_CastFromAnyType + (esxVI_AnyType *anyType, + esxVI_ManagedObjectReference **managedObjectReference); int esxVI_ManagedObjectReference_CastListFromAnyType (esxVI_AnyType *anyType, - esxVI_ManagedObjectReference **managedObjectReferenceList, - const char *expectedType); + esxVI_ManagedObjectReference **managedObjectReferenceList); int esxVI_ManagedObjectReference_Serialize (esxVI_ManagedObjectReference *managedObjectReference, const char *element, virBufferPtr output); @@ -469,833 +290,10 @@ int esxVI_ManagedObjectReference_SerializeList (esxVI_ManagedObjectReference *managedObjectReference, const char *element, virBufferPtr output); int esxVI_ManagedObjectReference_Deserialize - (xmlNodePtr node, esxVI_ManagedObjectReference **managedObjectReference, - const char *expectedType); + (xmlNodePtr node, esxVI_ManagedObjectReference **managedObjectReference); -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: DynamicProperty - */ - -struct _esxVI_DynamicProperty { - esxVI_DynamicProperty *_next; /* optional */ - - char *name; /* required */ - esxVI_AnyType *val; /* required */ -}; - -int esxVI_DynamicProperty_Alloc(esxVI_DynamicProperty **dynamicProperty); -void esxVI_DynamicProperty_Free - (esxVI_DynamicProperty **dynamicPropertyList); -int esxVI_DynamicProperty_Validate(esxVI_DynamicProperty *dynamicProperty); -int esxVI_DynamicProperty_DeepCopy(esxVI_DynamicProperty **dest, - esxVI_DynamicProperty *src); -int esxVI_DynamicProperty_DeepCopyList(esxVI_DynamicProperty **destList, - esxVI_DynamicProperty *srcList); -int esxVI_DynamicProperty_AppendToList - (esxVI_DynamicProperty **dynamicPropertyList, - esxVI_DynamicProperty *dynamicProperty); -int esxVI_DynamicProperty_Deserialize(xmlNodePtr node, - esxVI_DynamicProperty **dynamicProperty); -int esxVI_DynamicProperty_DeserializeList - (xmlNodePtr node, esxVI_DynamicProperty **dynamicPropertyList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: HostCpuIdInfo - */ - -struct _esxVI_HostCpuIdInfo { - esxVI_HostCpuIdInfo *_next; /* optional */ - - esxVI_Int *level; /* required */ - char *vendor; /* optional */ - char *eax; /* optional */ - char *ebx; /* optional */ - char *ecx; /* optional */ - char *edx; /* optional */ -}; - -int esxVI_HostCpuIdInfo_Alloc(esxVI_HostCpuIdInfo **hostCpuIdInfo); -void esxVI_HostCpuIdInfo_Free(esxVI_HostCpuIdInfo **hostCpuIdInfoList); -int esxVI_HostCpuIdInfo_Validate(esxVI_HostCpuIdInfo *hostCpuIdInfo); -int esxVI_HostCpuIdInfo_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_HostCpuIdInfo **hostCpuIdInfo); -int esxVI_HostCpuIdInfo_CastListFromAnyType - (esxVI_AnyType *anyType, esxVI_HostCpuIdInfo **hostCpuIdInfoList); -int esxVI_HostCpuIdInfo_Deserialize(xmlNodePtr node, - esxVI_HostCpuIdInfo **hostCpuIdInfo); -int esxVI_HostCpuIdInfo_DeserializeList - (xmlNodePtr node, esxVI_HostCpuIdInfo **hostCpuIdInfoList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: SelectionSpec - */ - -struct _esxVI_SelectionSpec { - esxVI_SelectionSpec *_next; /* optional */ - esxVI_TraversalSpec *_super; /* optional */ - - char *name; /* optional */ -}; - -int esxVI_SelectionSpec_Alloc(esxVI_SelectionSpec **selectionSpec); -void esxVI_SelectionSpec_Free(esxVI_SelectionSpec **selectionSpecList); -int esxVI_SelectionSpec_Validate(esxVI_SelectionSpec *selectionSpec); -int esxVI_SelectionSpec_AppendToList(esxVI_SelectionSpec **selectionSpecList, - esxVI_SelectionSpec *selectionSpec); -int esxVI_SelectionSpec_Serialize(esxVI_SelectionSpec *selectionSpec, - const char *element, virBufferPtr output); -int esxVI_SelectionSpec_SerializeList(esxVI_SelectionSpec *selectionSpecList, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: TraversalSpec extends SelectionSpec - */ - -struct _esxVI_TraversalSpec { - esxVI_SelectionSpec *_base; /* required */ - - char *type; /* required */ - char *path; /* required */ - esxVI_Boolean skip; /* optional */ - esxVI_SelectionSpec *selectSet; /* optional, list */ -}; - -int esxVI_TraversalSpec_Alloc(esxVI_TraversalSpec **traversalSpec); -void esxVI_TraversalSpec_Free(esxVI_TraversalSpec **traversalSpec); -int esxVI_TraversalSpec_Validate(esxVI_TraversalSpec *traversalSpec); -int esxVI_TraversalSpec_Serialize(esxVI_TraversalSpec *traversalSpec, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectSpec - */ - -struct _esxVI_ObjectSpec { - esxVI_ObjectSpec *_next; /* optional */ - - esxVI_ManagedObjectReference *obj; /* required */ - esxVI_Boolean skip; /* optional */ - esxVI_SelectionSpec *selectSet; /* optional, list */ -}; - -int esxVI_ObjectSpec_Alloc(esxVI_ObjectSpec **objectSpec); -void esxVI_ObjectSpec_Free(esxVI_ObjectSpec **objectSpecList); -int esxVI_ObjectSpec_Validate(esxVI_ObjectSpec *objectSpec); -int esxVI_ObjectSpec_AppendToList(esxVI_ObjectSpec **objectSpecList, - esxVI_ObjectSpec *objectSpec); -int esxVI_ObjectSpec_Serialize(esxVI_ObjectSpec *objectSpec, - const char *element, virBufferPtr output); -int esxVI_ObjectSpec_SerializeList(esxVI_ObjectSpec *objectSpecList, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyChange - */ - -struct _esxVI_PropertyChange { - esxVI_PropertyChange *_next; /* optional */ - - char *name; /* required */ - esxVI_PropertyChangeOp op; /* required */ - esxVI_AnyType *val; /* optional */ -}; - -int esxVI_PropertyChange_Alloc(esxVI_PropertyChange **propertyChange); -void esxVI_PropertyChange_Free(esxVI_PropertyChange **propertyChangeList); -int esxVI_PropertyChange_Validate(esxVI_PropertyChange *propertyChange); -int esxVI_PropertyChange_AppendToList - (esxVI_PropertyChange **propertyChangeList, - esxVI_PropertyChange *propertyChange); -int esxVI_PropertyChange_Deserialize(xmlNodePtr node, - esxVI_PropertyChange **propertyChange); -int esxVI_PropertyChange_DeserializeList - (xmlNodePtr node, esxVI_PropertyChange **propertyChangeList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertySpec - */ - -struct _esxVI_PropertySpec { - esxVI_PropertySpec *_next; /* optional */ - - char *type; /* required */ - esxVI_Boolean all; /* optional */ - esxVI_String *pathSet; /* optional, list */ -}; - -int esxVI_PropertySpec_Alloc(esxVI_PropertySpec **propertySpec); -void esxVI_PropertySpec_Free(esxVI_PropertySpec **propertySpecList); -int esxVI_PropertySpec_Validate(esxVI_PropertySpec *propertySpec); -int esxVI_PropertySpec_AppendToList(esxVI_PropertySpec **propertySpecList, - esxVI_PropertySpec *propertySpec); -int esxVI_PropertySpec_Serialize(esxVI_PropertySpec *propertySpec, - const char *element, virBufferPtr output); -int esxVI_PropertySpec_SerializeList(esxVI_PropertySpec *propertySpecList, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyFilterSpec - */ - -struct _esxVI_PropertyFilterSpec { - esxVI_PropertyFilterSpec *_next; /* optional */ - - esxVI_PropertySpec *propSet; /* required, list */ - esxVI_ObjectSpec *objectSet; /* required, list */ -}; - -int esxVI_PropertyFilterSpec_Alloc - (esxVI_PropertyFilterSpec **propertyFilterSpec); -void esxVI_PropertyFilterSpec_Free - (esxVI_PropertyFilterSpec **propertyFilterSpecList); -int esxVI_PropertyFilterSpec_Validate - (esxVI_PropertyFilterSpec *propertyFilterSpec); -int esxVI_PropertyFilterSpec_AppendToList - (esxVI_PropertyFilterSpec **propertyFilterSpecList, - esxVI_PropertyFilterSpec *propertyFilterSpec); -int esxVI_PropertyFilterSpec_Serialize - (esxVI_PropertyFilterSpec *propertyFilterSpec, const char *element, - virBufferPtr output); -int esxVI_PropertyFilterSpec_SerializeList - (esxVI_PropertyFilterSpec *propertyFilterSpecList, const char *element, - virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectContent - */ - -struct _esxVI_ObjectContent { - esxVI_ObjectContent *_next; /* optional */ - - esxVI_ManagedObjectReference *obj; /* required */ - esxVI_DynamicProperty *propSet; /* optional, list */ - /*esxVI_MissingProperty *missingSet; *//* optional, list *//* FIXME */ -}; - -int esxVI_ObjectContent_Alloc(esxVI_ObjectContent **objectContent); -void esxVI_ObjectContent_Free(esxVI_ObjectContent **objectContentList); -int esxVI_ObjectContent_Validate(esxVI_ObjectContent *objectContent); -int esxVI_ObjectContent_AppendToList(esxVI_ObjectContent **objectContentList, - esxVI_ObjectContent *objectContent); -int esxVI_ObjectContent_DeepCopy(esxVI_ObjectContent **dest, - esxVI_ObjectContent *src); -int esxVI_ObjectContent_Deserialize(xmlNodePtr node, - esxVI_ObjectContent **objectContent); -int esxVI_ObjectContent_DeserializeList - (xmlNodePtr node, esxVI_ObjectContent **objectContentList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ObjectUpdate - */ - -struct _esxVI_ObjectUpdate { - esxVI_ObjectUpdate *_next; /* optional */ - - esxVI_ObjectUpdateKind kind; /* required */ - esxVI_ManagedObjectReference *obj; /* required */ - esxVI_PropertyChange *changeSet; /* optional, list */ - /*esxVI_MissingProperty *missingSet; *//* optional, list *//* FIXME */ -}; - -int esxVI_ObjectUpdate_Alloc(esxVI_ObjectUpdate **objectUpdate); -void esxVI_ObjectUpdate_Free(esxVI_ObjectUpdate **objectUpdateList); -int esxVI_ObjectUpdate_Validate(esxVI_ObjectUpdate *objectUpdate); -int esxVI_ObjectUpdate_AppendToList(esxVI_ObjectUpdate **objectUpdateList, - esxVI_ObjectUpdate *objectUpdate); -int esxVI_ObjectUpdate_Deserialize(xmlNodePtr node, - esxVI_ObjectUpdate **objectUpdate); -int esxVI_ObjectUpdate_DeserializeList(xmlNodePtr node, - esxVI_ObjectUpdate **objectUpdateList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PropertyFilterUpdate - */ - -struct _esxVI_PropertyFilterUpdate { - esxVI_PropertyFilterUpdate *_next; /* optional */ - - esxVI_ManagedObjectReference *filter; /* required */ - esxVI_ObjectUpdate *objectSet; /* optional, list */ - /*esxVI_MissingProperty *missingSet; *//* optional, list *//* FIXME */ -}; - -int esxVI_PropertyFilterUpdate_Alloc - (esxVI_PropertyFilterUpdate **propertyFilterUpdate); -void esxVI_PropertyFilterUpdate_Free - (esxVI_PropertyFilterUpdate **propertyFilterUpdateList); -int esxVI_PropertyFilterUpdate_Validate - (esxVI_PropertyFilterUpdate *propertyFilterUpdate); -int esxVI_PropertyFilterUpdate_AppendToList - (esxVI_PropertyFilterUpdate **propertyFilterUpdateList, - esxVI_PropertyFilterUpdate *propertyFilterUpdate); -int esxVI_PropertyFilterUpdate_Deserialize - (xmlNodePtr node, esxVI_PropertyFilterUpdate **propertyFilterUpdate); -int esxVI_PropertyFilterUpdate_DeserializeList - (xmlNodePtr node, esxVI_PropertyFilterUpdate **propertyFilterUpdateList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: AboutInfo - */ - -struct _esxVI_AboutInfo { - char *name; /* required */ - char *fullName; /* required */ - char *vendor; /* required */ - char *version; /* required */ - char *build; /* required */ - char *localeVersion; /* optional */ - char *localeBuild; /* optional */ - char *osType; /* required */ - char *productLineId; /* required */ - char *apiType; /* required */ - char *apiVersion; /* required */ -}; - -int esxVI_AboutInfo_Alloc(esxVI_AboutInfo **aboutInfo); -void esxVI_AboutInfo_Free(esxVI_AboutInfo **aboutInfo); -int esxVI_AboutInfo_Validate(esxVI_AboutInfo *aboutInfo); -int esxVI_AboutInfo_Deserialize(xmlNodePtr node, esxVI_AboutInfo **aboutInfo); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ServiceContent - */ - -struct _esxVI_ServiceContent { - esxVI_ManagedObjectReference *rootFolder; /* required */ - esxVI_ManagedObjectReference *propertyCollector; /* required */ - esxVI_ManagedObjectReference *viewManager; /* optional */ - esxVI_AboutInfo *about; /* required */ - esxVI_ManagedObjectReference *setting; /* optional */ - esxVI_ManagedObjectReference *userDirectory; /* optional */ - esxVI_ManagedObjectReference *sessionManager; /* optional */ - esxVI_ManagedObjectReference *authorizationManager; /* optional */ - esxVI_ManagedObjectReference *perfManager; /* optional */ - esxVI_ManagedObjectReference *scheduledTaskManager; /* optional */ - esxVI_ManagedObjectReference *alarmManager; /* optional */ - esxVI_ManagedObjectReference *eventManager; /* optional */ - esxVI_ManagedObjectReference *taskManager; /* optional */ - esxVI_ManagedObjectReference *extensionManager; /* optional */ - esxVI_ManagedObjectReference *customizationSpecManager; /* optional */ - esxVI_ManagedObjectReference *customFieldsManager; /* optional */ - esxVI_ManagedObjectReference *accountManager; /* optional */ - esxVI_ManagedObjectReference *diagnosticManager; /* optional */ - esxVI_ManagedObjectReference *licenseManager; /* optional */ - esxVI_ManagedObjectReference *searchIndex; /* optional */ - esxVI_ManagedObjectReference *fileManager; /* optional */ - esxVI_ManagedObjectReference *virtualDiskManager; /* optional */ - esxVI_ManagedObjectReference *virtualizationManager; /* optional */ -}; - -int esxVI_ServiceContent_Alloc(esxVI_ServiceContent **serviceContent); -void esxVI_ServiceContent_Free(esxVI_ServiceContent **serviceContent); -int esxVI_ServiceContent_Validate(esxVI_ServiceContent *serviceContent); -int esxVI_ServiceContent_Deserialize(xmlNodePtr node, - esxVI_ServiceContent **serviceContent); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: UpdateSet - */ - -struct _esxVI_UpdateSet { - char *version; /* required */ - esxVI_PropertyFilterUpdate *filterSet; /* optional, list */ -}; - -int esxVI_UpdateSet_Alloc(esxVI_UpdateSet **updateSet); -void esxVI_UpdateSet_Free(esxVI_UpdateSet **updateSet); -int esxVI_UpdateSet_Validate(esxVI_UpdateSet *updateSet); -int esxVI_UpdateSet_Deserialize(xmlNodePtr node, esxVI_UpdateSet **updateSet); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: SharesInfo - */ - -struct _esxVI_SharesInfo { - esxVI_Int *shares; /* required */ - esxVI_SharesLevel level; /* required */ -}; - -int esxVI_SharesInfo_Alloc(esxVI_SharesInfo **sharesInfo); -void esxVI_SharesInfo_Free(esxVI_SharesInfo **sharesInfo); -int esxVI_SharesInfo_Validate(esxVI_SharesInfo *sharesInfo); -int esxVI_SharesInfo_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_SharesInfo **sharesInfo); -int esxVI_SharesInfo_Deserialize(xmlNodePtr node, - esxVI_SharesInfo **sharesInfo); -int esxVI_SharesInfo_Serialize(esxVI_SharesInfo *sharesInfo, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ResourceAllocationInfo - */ - -struct _esxVI_ResourceAllocationInfo { - esxVI_Long *reservation; /* optional */ - esxVI_Boolean expandableReservation; /* optional */ - esxVI_Long *limit; /* optional */ - esxVI_SharesInfo *shares; /* optional */ - esxVI_Long *overheadLimit; /* optional */ -}; - -int esxVI_ResourceAllocationInfo_Alloc - (esxVI_ResourceAllocationInfo **resourceAllocationInfo); -void esxVI_ResourceAllocationInfo_Free - (esxVI_ResourceAllocationInfo **resourceAllocationInfo); -int esxVI_ResourceAllocationInfo_Validate - (esxVI_ResourceAllocationInfo *resourceAllocationInfo); -int esxVI_ResourceAllocationInfo_Serialize - (esxVI_ResourceAllocationInfo *resourceAllocationInfo, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ResourcePoolResourceUsage - */ - -struct _esxVI_ResourcePoolResourceUsage { - esxVI_Long *reservationUsed; /* required */ - esxVI_Long *reservationUsedForVm; /* required */ - esxVI_Long *unreservedForPool; /* required */ - esxVI_Long *unreservedForVm; /* required */ - esxVI_Long *overallUsage; /* required */ - esxVI_Long *maxUsage; /* required */ -}; - -int esxVI_ResourcePoolResourceUsage_Alloc - (esxVI_ResourcePoolResourceUsage **resourcePoolResourceUsage); -void esxVI_ResourcePoolResourceUsage_Free - (esxVI_ResourcePoolResourceUsage **resourcePoolResourceUsage); -int esxVI_ResourcePoolResourceUsage_Validate - (esxVI_ResourcePoolResourceUsage *resourcePoolResourceUsage); -int esxVI_ResourcePoolResourceUsage_CastFromAnyType - (esxVI_AnyType *anyType, - esxVI_ResourcePoolResourceUsage **resourcePoolResourceUsage); -int esxVI_ResourcePoolResourceUsage_Deserialize - (xmlNodePtr node, - esxVI_ResourcePoolResourceUsage **resourcePoolResourceUsage); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: VirtualMachineConfigSpec - */ - -/* FIXME: implement the rest */ -struct _esxVI_VirtualMachineConfigSpec { - char *changeVersion; /* optional */ - char *name; /* optional */ - char *version; /* optional */ - char *uuid; /* optional */ - esxVI_Long *npivNodeWorldWideName; /* optional, list */ - esxVI_Long *npivPortWorldWideName; /* optional, list */ - char *npivWorldWideNameType; /* optional */ - char *npivWorldWideNameOp; /* optional */ - char *locationId; /* optional */ - char *guestId; /* optional */ - char *alternateGuestName; /* optional */ - char *annotation; /* optional */ - //esxVI_VirtualMachineFileInfo *files; /* optional */ - //esxVI_ToolsConfigInfo *tools; /* optional */ - //esxVI_VirtualMachineFlagInfo *flags; /* optional */ - //esxVI_VirtualMachineConsolePreferences *consolePreferences; /* optional */ - //esxVI_VirtualMachineDefaultPowerOpInfo *powerOpInfo; /* optional */ - esxVI_Int *numCPUs; /* optional */ - esxVI_Long *memoryMB; /* optional */ - //esxVI_VirtualDeviceConfigSpec *deviceChange; /* optional, list */ - esxVI_ResourceAllocationInfo *cpuAllocation; /* optional */ - esxVI_ResourceAllocationInfo *memoryAllocation; /* optional */ - //esxVI_VirtualMachineAffinityInfo *cpuAffinity; /* optional */ - //esxVI_VirtualMachineAffinityInfo *memoryAffinity; /* optional */ - //esxVI_VirtualMachineNetworkShaperInfo *networkShaper; /* optional */ - //esxVI_VirtualMachineCpuIdInfoSpec *cpuFeatureMask; /* optional, list */ - //esxVI_OptionValue *extraConfig; /* optional, list */ - char *swapPlacement; /* optional */ - //esxVI_VirtualMachineBootOptions *bootOptions; /* optional */ -}; - -int esxVI_VirtualMachineConfigSpec_Alloc - (esxVI_VirtualMachineConfigSpec **virtualMachineConfigSpec); -void esxVI_VirtualMachineConfigSpec_Free - (esxVI_VirtualMachineConfigSpec **virtualMachineConfigSpec); -int esxVI_VirtualMachineConfigSpec_Validate - (esxVI_VirtualMachineConfigSpec *virtualMachineConfigSpec); -int esxVI_VirtualMachineConfigSpec_Serialize - (esxVI_VirtualMachineConfigSpec *virtualMachineConfigSpec, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: Event - */ - -/* FIXME: implement the rest */ -struct _esxVI_Event { - esxVI_Event *_next; /* optional */ - - esxVI_Int *key; /* required */ - esxVI_Int *chainId; /* required */ - esxVI_DateTime *createdTime; /* required */ - char *userName; /* required */ - //??? datacenter; /* optional */ - //??? computeResource; /* optional */ - //??? host; /* optional */ - //??? vm; /* optional */ - char *fullFormattedMessage; /* optional */ -}; - -int esxVI_Event_Alloc(esxVI_Event **event); -void esxVI_Event_Free(esxVI_Event **eventList); -int esxVI_Event_Validate(esxVI_Event *event); -int esxVI_Event_Deserialize(xmlNodePtr node, esxVI_Event **event); -int esxVI_Event_DeserializeList(xmlNodePtr node, esxVI_Event **eventList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: UserSession - */ - -struct _esxVI_UserSession { - char *key; /* required */ - char *userName; /* required */ - char *fullName; /* required */ - esxVI_DateTime *loginTime; /* required */ - esxVI_DateTime *lastActiveTime; /* required */ - char *locale; /* required */ - char *messageLocale; /* required */ -}; - -int esxVI_UserSession_Alloc(esxVI_UserSession **userSession); -void esxVI_UserSession_Free(esxVI_UserSession **userSession); -int esxVI_UserSession_Validate(esxVI_UserSession *userSession); -int esxVI_UserSession_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_UserSession **userSession); -int esxVI_UserSession_Deserialize(xmlNodePtr node, - esxVI_UserSession **userSession); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: VirtualMachineQuestionInfo - */ - -/* FIXME: implement the rest */ -struct _esxVI_VirtualMachineQuestionInfo { - char *id; /* required */ - char *text; /* required */ - esxVI_ChoiceOption *choice; /* required */ - /*esxVI_VirtualMachineMessage *message;*/ /* optional, list */ -}; - -int esxVI_VirtualMachineQuestionInfo_Alloc - (esxVI_VirtualMachineQuestionInfo **virtualMachineQuestionInfo); -void esxVI_VirtualMachineQuestionInfo_Free - (esxVI_VirtualMachineQuestionInfo **virtualMachineQuestionInfo); -int esxVI_VirtualMachineQuestionInfo_Validate - (esxVI_VirtualMachineQuestionInfo *virtualMachineQuestionInfo); -int esxVI_VirtualMachineQuestionInfo_CastFromAnyType - (esxVI_AnyType *anyType, - esxVI_VirtualMachineQuestionInfo **virtualMachineQuestionInfo); -int esxVI_VirtualMachineQuestionInfo_Deserialize - (xmlNodePtr node, - esxVI_VirtualMachineQuestionInfo **virtualMachineQuestionInfo); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ElementDescription extends Description - * - * In contrast to SelectionSpec and TraversalSpec just merge - * Description into ElementDescription for simplicity, because - * only ElementDescription is used. - */ - -struct _esxVI_ElementDescription { - esxVI_ElementDescription *_next; /* optional */ - - /* Description */ - char *label; /* required */ - char *summary; /* required */ - - /* ElementDescription */ - char *key; /* required */ -}; - -int esxVI_ElementDescription_Alloc - (esxVI_ElementDescription **elementDescription); -void esxVI_ElementDescription_Free - (esxVI_ElementDescription **elementDescription); -int esxVI_ElementDescription_Validate - (esxVI_ElementDescription *elementDescription); -int esxVI_ElementDescription_AppendToList - (esxVI_ElementDescription **elementDescriptionList, - esxVI_ElementDescription *elementDescription); -int esxVI_ElementDescription_Deserialize - (xmlNodePtr node, esxVI_ElementDescription **elementDescription); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: ChoiceOption extends OptionType - * - * In contrast to SelectionSpec and TraversalSpec just merge - * OptionType into ChoiceOption for simplicity, because - * only ChoiceOption is used. - */ - -struct _esxVI_ChoiceOption { - /* OptionType */ - esxVI_Boolean valueIsReadonly; /* optional */ - - /* ChoiceOption */ - esxVI_ElementDescription *choiceInfo; /* required, list */ - esxVI_Int *defaultIndex; /* optional */ -}; - -int esxVI_ChoiceOption_Alloc(esxVI_ChoiceOption **choiceOption); -void esxVI_ChoiceOption_Free(esxVI_ChoiceOption **choiceOption); -int esxVI_ChoiceOption_Validate(esxVI_ChoiceOption *choiceOption); -int esxVI_ChoiceOption_Deserialize(xmlNodePtr node, - esxVI_ChoiceOption **choiceOption); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfMetricId - */ - -struct _esxVI_PerfMetricId { - esxVI_PerfMetricId *_next; /* optional */ - - esxVI_Int *counterId; /* required */ - char *instance; /* required */ -}; - -int esxVI_PerfMetricId_Alloc(esxVI_PerfMetricId **perfMetricId); -void esxVI_PerfMetricId_Free(esxVI_PerfMetricId **perfMetricId); -int esxVI_PerfMetricId_Validate(esxVI_PerfMetricId *perfMetricId); -int esxVI_PerfMetricId_Serialize(esxVI_PerfMetricId *perfMetricId, - const char *element, virBufferPtr output); -int esxVI_PerfMetricId_SerializeList(esxVI_PerfMetricId *perfMetricIdList, - const char *element, virBufferPtr output); -int esxVI_PerfMetricId_Deserialize(xmlNodePtr node, - esxVI_PerfMetricId **perfMetricId); -int esxVI_PerfMetricId_DeserializeList(xmlNodePtr node, - esxVI_PerfMetricId **perfMetricIdList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfCounterInfo - */ - -struct _esxVI_PerfCounterInfo { - esxVI_PerfCounterInfo *_next; /* optional */ - - esxVI_Int *key; /* required */ - esxVI_ElementDescription *nameInfo; /* required */ - esxVI_ElementDescription *groupInfo; /* required */ - esxVI_ElementDescription *unitInfo; /* required */ - esxVI_PerfSummaryType rollupType; /* required */ - esxVI_PerfStatsType statsType; /* required */ - esxVI_Int *level; /* optional */ - esxVI_Int *associatedCounterId; /* optional, list */ -}; - -int esxVI_PerfCounterInfo_Alloc(esxVI_PerfCounterInfo **perfCounterInfo); -void esxVI_PerfCounterInfo_Free(esxVI_PerfCounterInfo **perfCounterInfo); -int esxVI_PerfCounterInfo_Validate(esxVI_PerfCounterInfo *perfCounterInfo); -int esxVI_PerfCounterInfo_Deserialize(xmlNodePtr node, - esxVI_PerfCounterInfo **perfCounterInfo); -int esxVI_PerfCounterInfo_DeserializeList - (xmlNodePtr node, esxVI_PerfCounterInfo **perfCounterInfoList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfQuerySpec - */ - -struct _esxVI_PerfQuerySpec { - esxVI_PerfQuerySpec *_next; /* optional */ - - esxVI_ManagedObjectReference *entity; /* required */ - esxVI_DateTime *startTime; /* optional */ - esxVI_DateTime *endTime; /* optional */ - esxVI_Int *maxSample; /* optional */ - esxVI_PerfMetricId *metricId; /* optional, list */ - esxVI_Int *intervalId; /* optional */ - char *format; /* optional */ // FIXME: see PerfFormat -}; - -int esxVI_PerfQuerySpec_Alloc(esxVI_PerfQuerySpec **perfQuerySpec); -void esxVI_PerfQuerySpec_Free(esxVI_PerfQuerySpec **perfQuerySpec); -int esxVI_PerfQuerySpec_Validate(esxVI_PerfQuerySpec *perfQuerySpec); -int esxVI_PerfQuerySpec_Serialize(esxVI_PerfQuerySpec *perfQuerySpec, - const char *element, virBufferPtr output); -int esxVI_PerfQuerySpec_SerializeList(esxVI_PerfQuerySpec *perfQuerySpecList, - const char *element, virBufferPtr output); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfSampleInfo - */ - -struct _esxVI_PerfSampleInfo { - esxVI_PerfSampleInfo *_next; /* optional */ - - esxVI_DateTime *timestamp; /* required */ - esxVI_Int *interval; /* required */ -}; - -int esxVI_PerfSampleInfo_Alloc(esxVI_PerfSampleInfo **perfSampleInfo); -void esxVI_PerfSampleInfo_Free(esxVI_PerfSampleInfo **perfSampleInfo); -int esxVI_PerfSampleInfo_Validate(esxVI_PerfSampleInfo *perfSampleInfo); -int esxVI_PerfSampleInfo_AppendToList(esxVI_PerfSampleInfo **perfSampleInfoList, - esxVI_PerfSampleInfo *perfSampleInfo); -int esxVI_PerfSampleInfo_Deserialize(xmlNodePtr node, - esxVI_PerfSampleInfo **perfSampleInfo); -int esxVI_PerfSampleInfo_DeserializeList - (xmlNodePtr node, esxVI_PerfSampleInfo **perfSampleInfoList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfMetricIntSeries extends PerfMetricSeries - * - * In contrast to SelectionSpec and TraversalSpec just merge - * PerfMetricSeries into PerfMetricIntSeries for simplicity, because - * only PerfMetricIntSeries is used and the other type inheriting - * PerfMetricSeries (PerfMetricSeriesCSV) is not used. - */ - -struct _esxVI_PerfMetricIntSeries { - esxVI_PerfMetricIntSeries *_next; /* optional */ - - /* PerfMetricSeries */ - esxVI_PerfMetricId *id; /* required */ - - /* PerfMetricIntSeries */ - esxVI_Long *value; /* optional, list */ -}; - -int esxVI_PerfMetricIntSeries_Alloc - (esxVI_PerfMetricIntSeries **perfMetricIntSeries); -void esxVI_PerfMetricIntSeries_Free - (esxVI_PerfMetricIntSeries **perfMetricIntSeries); -int esxVI_PerfMetricIntSeries_Validate - (esxVI_PerfMetricIntSeries *perfMetricIntSeries); -int esxVI_PerfMetricIntSeries_AppendToList - (esxVI_PerfMetricIntSeries **perfMetricIntSeriesList, - esxVI_PerfMetricIntSeries *perfMetricIntSeries); -int esxVI_PerfMetricIntSeries_Deserialize - (xmlNodePtr node, esxVI_PerfMetricIntSeries **perfMetricIntSeries); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: PerfEntityMetric extends PerfEntityMetricBase - * - * In contrast to SelectionSpec and TraversalSpec just merge - * PerfEntityMetricBase into PerfEntityMetric for simplicity, because - * only PerfEntityMetric is used and the other type inheriting - * PerfEntityMetric (PerfEntityMetricCSV) is not used. - * - * Also use PerfMetricIntSeries instead of the correct base type - * PerfMetricSeries for the value property, because only - * PerfMetricIntSeries is used. - */ - -struct _esxVI_PerfEntityMetric { - esxVI_PerfEntityMetric *_next; /* optional */ - - /* PerfEntityMetricBase */ - esxVI_ManagedObjectReference *entity; /* required */ - - /* PerfEntityMetric */ - esxVI_PerfSampleInfo *sampleInfo; /* optional, list */ - esxVI_PerfMetricIntSeries *value; /* optional, list */ -}; - -int esxVI_PerfEntityMetric_Alloc(esxVI_PerfEntityMetric **perfEntityMetric); -void esxVI_PerfEntityMetric_Free(esxVI_PerfEntityMetric **perfEntityMetric); -int esxVI_PerfEntityMetric_Validate(esxVI_PerfEntityMetric *perfEntityMetric); -int esxVI_PerfEntityMetric_Deserialize - (xmlNodePtr node, esxVI_PerfEntityMetric **perfEntityMetric); -int esxVI_PerfEntityMetric_DeserializeList - (xmlNodePtr node, esxVI_PerfEntityMetric **perfEntityMetricList); - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * VI Type: TaskInfo - */ - -struct _esxVI_TaskInfo { - esxVI_TaskInfo *_next; /* optional */ - - char *key; /* required */ - esxVI_ManagedObjectReference *task; /* required */ - char *name; /* optional */ - char *descriptionId; /* required */ - esxVI_ManagedObjectReference *entity; /* optional */ - char *entityName; /* optional */ - /*esxVI_ManagedObjectReference *locked;*/ /* optional, list *//* FIXME */ - esxVI_TaskInfoState state; /* required */ - esxVI_Boolean cancelled; /* required */ - esxVI_Boolean cancelable; /* required */ - /*esxVI_MethodFault *error;*/ /* optional *//* FIXME */ - esxVI_AnyType *result; /* optional */ - esxVI_Int *progress; /* optional */ - /*esxVI_TaskReason *reason;*/ /* required *//* FIXME */ - esxVI_DateTime *queueTime; /* required */ - esxVI_DateTime *startTime; /* optional */ - esxVI_DateTime *completeTime; /* optional */ - esxVI_Int *eventChainId; /* required */ -}; - -int esxVI_TaskInfo_Alloc(esxVI_TaskInfo **taskInfo); -void esxVI_TaskInfo_Free(esxVI_TaskInfo **taskInfoList); -int esxVI_TaskInfo_Validate(esxVI_TaskInfo *taskInfo); -int esxVI_TaskInfo_CastFromAnyType(esxVI_AnyType *anyType, - esxVI_TaskInfo **taskInfo); -int esxVI_TaskInfo_AppendToList(esxVI_TaskInfo **taskInfoList, - esxVI_TaskInfo *taskInfo); -int esxVI_TaskInfo_Deserialize(xmlNodePtr node, esxVI_TaskInfo **taskInfo); +#include "esx_vi_types.generated.h" #endif /* __ESX_VI_TYPES_H__ */