[PATCH] Update EC to add support for VSMS to VSMC association

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1202490035 28800 # Node ID 54ffc7df5a17a13811ad65f968b7d780330630f7 # Parent 59c1d98cf8989adff7530eac08abee7b79a6cc03 Update EC to add support for VSMS to VSMC association. Removed the instance property validation. The get_vsms() (etc) calls will need to be updated to handle the reference validation. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 59c1d98cf898 -r 54ffc7df5a17 src/Makefile.am --- a/src/Makefile.am Fri Feb 08 07:59:01 2008 -0800 +++ b/src/Makefile.am Fri Feb 08 09:00:35 2008 -0800 @@ -99,14 +99,16 @@ libVirt_AllocationCapabilities_la_SOURCE libVirt_AllocationCapabilities_la_SOURCES = Virt_AllocationCapabilities.c libVirt_AllocationCapabilities_la_LIBADD = -lVirt_DevicePool -libVirt_ElementCapabilities_la_DEPENDENCIES = libVirt_VirtualSystemManagementCapabilities.la libVirt_EnabledLogicalElementCapabilities.la libVirt_ComputerSystem.la libVirt_HostSystem.la libVirt_VSMigrationCapabilities.la +libVirt_ElementCapabilities_la_DEPENDENCIES = libVirt_VirtualSystemManagementCapabilities.la libVirt_EnabledLogicalElementCapabilities.la libVirt_ComputerSystem.la libVirt_HostSystem.la libVirt_VSMigrationCapabilities.la libVirt_VirtualSystemManagementService.la libVirt_VSMigrationService.la libVirt_ElementCapabilities_la_SOURCES = Virt_ElementCapabilities.c libVirt_ElementCapabilities_la_LIBADD = -lVirt_VirtualSystemManagementCapabilities \ -lVirt_EnabledLogicalElementCapabilities \ -lVirt_ComputerSystem \ -lVirt_HostSystem \ -lVirt_VSMigrationCapabilities \ - -lVirt_AllocationCapabilities + -lVirt_AllocationCapabilities \ + -lVirt_VirtualSystemManagementService \ + -lVirt_VSMigrationService libVirt_SettingsDefineCapabilities_la_DEPENDENCIES = libVirt_RASD.la libVirt_DevicePool.la libVirt_SettingsDefineCapabilities_la_SOURCES = Virt_SettingsDefineCapabilities.c diff -r 59c1d98cf898 -r 54ffc7df5a17 src/Virt_ElementCapabilities.c --- a/src/Virt_ElementCapabilities.c Fri Feb 08 07:59:01 2008 -0800 +++ b/src/Virt_ElementCapabilities.c Fri Feb 08 09:00:35 2008 -0800 @@ -33,6 +33,8 @@ #include <libcmpiutil/std_association.h> #include "Virt_VirtualSystemManagementCapabilities.h" +#include "Virt_VirtualSystemManagementService.h" +#include "Virt_VSMigrationService.h" #include "Virt_EnabledLogicalElementCapabilities.h" #include "Virt_ComputerSystem.h" #include "Virt_HostSystem.h" @@ -48,31 +50,63 @@ const static CMPIBroker *_BROKER; -static CMPIStatus validate_host_caps_ref(const CMPIObjectPath *ref) -{ - CMPIStatus s = {CMPI_RC_OK, NULL}; - CMPIInstance *inst; - const char *prop; - char* classname; - +static CMPIStatus validate_caps_get_service(const CMPIObjectPath *ref, + CMPIInstance **inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *_inst; + char* classname; + classname = class_base_name(CLASSNAME(ref)); if (STREQC(classname, "VirtualSystemManagementCapabilities")) { - s = get_vsm_cap(_BROKER, ref, &inst); + s = get_vsm_cap(_BROKER, ref, &_inst); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_vsms(ref, &_inst, _BROKER); } else if (STREQC(classname, "VirtualSystemMigrationCapabilities")) { - s = get_migration_caps(ref, &inst, _BROKER); - } - - if (s.rc != CMPI_RC_OK) - goto out; - - prop = cu_compare_ref(ref, inst); - if (prop != NULL) { - cu_statusf(_BROKER, &s, - CMPI_RC_ERR_NOT_FOUND, - "No such instance (%s)", prop); - } - + s = get_migration_caps(ref, &_inst, _BROKER); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_migration_service(ref, &_inst, _BROKER); + } else + CMSetStatus(&s, CMPI_RC_ERR_NOT_FOUND); + + *inst = _inst; + out: + free(classname); + + return s; +} + +static CMPIStatus validate_service_get_caps(const CMPIObjectPath *ref, + CMPIInstance **inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *_inst; + char* classname; + + classname = class_base_name(CLASSNAME(ref)); + + if (STREQC(classname, "VirtualSystemManagementService")) { + s = get_vsms(ref, &_inst, _BROKER); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_vsm_cap(_BROKER, ref, &_inst); + } else if (STREQC(classname, "VirtualSystemMigrationService")) { + s = get_migration_service(ref, &_inst, _BROKER); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_migration_caps(ref, &_inst, _BROKER); + } else + CMSetStatus(&s, CMPI_RC_ERR_NOT_FOUND); + + *inst = _inst; + out: free(classname); @@ -105,19 +139,22 @@ static CMPIStatus sys_to_cap(const CMPIO return s; } -static CMPIStatus cap_to_sys(const CMPIObjectPath *ref, - struct std_assoc_info *info, - struct inst_list *list) -{ - CMPIInstance *inst; - CMPIStatus s = {CMPI_RC_OK, NULL}; - - if (!match_hypervisor_prefix(ref, info)) - goto out; - - s = validate_host_caps_ref(ref); - if (s.rc != CMPI_RC_OK) - goto out; +static CMPIStatus cap_to_sys_or_service(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list) +{ + CMPIInstance *inst = NULL; + CMPIStatus s = {CMPI_RC_OK, NULL}; + + if (!match_hypervisor_prefix(ref, info)) + goto out; + + s = validate_caps_get_service(ref, &inst); + if (s.rc != CMPI_RC_OK) + goto out; + + if (inst != NULL) + inst_list_add(list, inst); s = get_host_cs(_BROKER, ref, &inst); if (s.rc != CMPI_RC_OK) @@ -125,6 +162,26 @@ static CMPIStatus cap_to_sys(const CMPIO inst_list_add(list, inst); + out: + return s; +} + +static CMPIStatus service_to_cap(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list) +{ + CMPIInstance *inst = NULL; + CMPIStatus s = {CMPI_RC_OK, NULL}; + + if (!match_hypervisor_prefix(ref, info)) + goto out; + + s = validate_service_get_caps(ref, &inst); + if (s.rc != CMPI_RC_OK) + goto out; + + if (inst != NULL) + inst_list_add(list, inst); out: return s; } @@ -245,6 +302,16 @@ static char* host_system[] = { NULL }; +static char* host_sys_and_service[] = { + "Xen_HostSystem", + "KVM_HostSystem", + "Xen_VirtualSystemManagementService", + "KVM_VirtualSystemManagementService", + "Xen_VirtualSystemMigrationService", + "KVM_VirtualSystemMigrationService", + NULL +}; + static char* virtual_system_management_capabilities[] = { "Xen_VirtualSystemManagementCapabilities", "Xen_VirtualSystemMigrationCapabilities", @@ -266,16 +333,37 @@ static struct std_assoc system_to_vsm_ca .make_ref = make_ref }; -static struct std_assoc vsm_cap_to_system = { +static struct std_assoc vsm_cap_to_sys_or_service = { .source_class = (char**)&virtual_system_management_capabilities, .source_prop = "Capabilities", - .target_class = (char**)&host_system, + .target_class = (char**)&host_sys_and_service, .target_prop = "ManagedElement", .assoc_class = (char**)&assoc_classname, - .handler = cap_to_sys, + .handler = cap_to_sys_or_service, + .make_ref = make_ref +}; + +static char* service[] = { + "Xen_VirtualSystemManagementService", + "KVM_VirtualSystemManagementService", + "Xen_VirtualSystemMigrationService", + "KVM_VirtualSystemMigrationService", + NULL +}; + +static struct std_assoc _service_to_cap = { + .source_class = (char**)&service, + .source_prop = "ManagedElement", + + .target_class = (char**)&virtual_system_management_capabilities, + .target_prop = "Capabilities", + + .assoc_class = (char**)&assoc_classname, + + .handler = service_to_cap, .make_ref = make_ref }; @@ -363,7 +451,8 @@ static struct std_assoc resource_pool_to static struct std_assoc *assoc_handlers[] = { &system_to_vsm_cap, - &vsm_cap_to_system, + &vsm_cap_to_sys_or_service, + &_service_to_cap, &ele_cap_to_cs, &cs_to_ele_cap, &alloc_cap_to_resource_pool,

Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1202490035 28800 # Node ID 54ffc7df5a17a13811ad65f968b7d780330630f7 # Parent 59c1d98cf8989adff7530eac08abee7b79a6cc03 Update EC to add support for VSMS to VSMC association.
Removed the instance property validation. The get_vsms() (etc) calls will need to be updated to handle the reference validation.
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
+static CMPIStatus validate_caps_get_service(const CMPIObjectPath *ref, + CMPIInstance **inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *_inst; + char* classname; + classname = class_base_name(CLASSNAME(ref));
if (STREQC(classname, "VirtualSystemManagementCapabilities")) { - s = get_vsm_cap(_BROKER, ref, &inst); + s = get_vsm_cap(_BROKER, ref, &_inst); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_vsms(ref, &_inst, _BROKER); } else if (STREQC(classname, "VirtualSystemMigrationCapabilities")) { - s = get_migration_caps(ref, &inst, _BROKER); - } - - if (s.rc != CMPI_RC_OK) - goto out; - - prop = cu_compare_ref(ref, inst); - if (prop != NULL) { - cu_statusf(_BROKER, &s, - CMPI_RC_ERR_NOT_FOUND, - "No such instance (%s)", prop); - } -
I understand that this currently breaks the reference checking, but I think it's a good idea to have the class get_<> functions do that checking. Thoughts? Also, I'm sure that this function, the validate_service_get_caps() and validate_service_ref() can be consolidated somehow, but I haven't worked up a clean solution yet, So this patch is a first step in a set of related changes. -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com

Kaitlin Rupert wrote:
Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1202490035 28800 # Node ID 54ffc7df5a17a13811ad65f968b7d780330630f7 # Parent 59c1d98cf8989adff7530eac08abee7b79a6cc03 Update EC to add support for VSMS to VSMC association.
Removed the instance property validation. The get_vsms() (etc) calls will need to be updated to handle the reference validation.
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> +static CMPIStatus validate_caps_get_service(const CMPIObjectPath *ref, + CMPIInstance **inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *_inst; + char* classname; + classname = class_base_name(CLASSNAME(ref));
if (STREQC(classname, "VirtualSystemManagementCapabilities")) { - s = get_vsm_cap(_BROKER, ref, &inst); + s = get_vsm_cap(_BROKER, ref, &_inst); + if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) + goto out; + + s = get_vsms(ref, &_inst, _BROKER); } else if (STREQC(classname, "VirtualSystemMigrationCapabilities")) { - s = get_migration_caps(ref, &inst, _BROKER); - } - - if (s.rc != CMPI_RC_OK) - goto out; - - prop = cu_compare_ref(ref, inst); - if (prop != NULL) { - cu_statusf(_BROKER, &s, - CMPI_RC_ERR_NOT_FOUND, - "No such instance (%s)", prop); - } -
I understand that this currently breaks the reference checking, but I think it's a good idea to have the class get_<> functions do that checking. Thoughts?
Also, I'm sure that this function, the validate_service_get_caps() and validate_service_ref() can be consolidated somehow, but I haven't worked up a clean solution yet,
So this patch is a first step in a set of related changes.
I should also note that I have reference validation patches worked out for get_vsms(), get_vsm_cap(), get_migration_service(), get_migration_caps() that I can send out once this patch is approved. They're dependent on this patch, and it's quite a large set, so I thought I'd wait to send them. Thanks =) -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com

KR> +static CMPIStatus service_to_cap(const CMPIObjectPath *ref, KR> + struct std_assoc_info *info, KR> + struct inst_list *list) KR> +{ KR> + CMPIInstance *inst = NULL; KR> + CMPIStatus s = {CMPI_RC_OK, NULL}; KR> + KR> + if (!match_hypervisor_prefix(ref, info)) KR> + goto out; KR> + KR> + s = validate_service_get_caps(ref, &inst); Whitespace issue. Otherwise this seems fine to me. -- Dan Smith IBM Linux Technology Center Open Hypervisor Team email: danms@us.ibm.com

Dan Smith wrote:
KR> +static CMPIStatus service_to_cap(const CMPIObjectPath *ref, KR> + struct std_assoc_info *info, KR> + struct inst_list *list) KR> +{ KR> + CMPIInstance *inst = NULL; KR> + CMPIStatus s = {CMPI_RC_OK, NULL}; KR> + KR> + if (!match_hypervisor_prefix(ref, info)) KR> + goto out; KR> + KR> + s = validate_service_get_caps(ref, &inst);
Whitespace issue.
Otherwise this seems fine to me.
Good eye - I missed this when I reviewed the patch before sending it out. Will resend =) -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
participants (2)
-
Dan Smith
-
Kaitlin Rupert