[PATCH 0 of 2] #2 Added association SAPAvailableForElement (ComputerSystem <-> KVMRedirectionSAP)

This patch depends on the patch which adds the association HostedAccessPoint (HostSystem <-> KVMRedirectionSAP)

# HG changeset patch # User Richard Maciel <richardm@br.ibm.com> # Date 1229728228 7200 # Node ID fe6e0dae82fb66eb1df5fe0a1b6a22d5397a0197 # Parent 35c891ed2c4cbf11005859c6d784d19a47c7e8f5 Added association SAPAvailableForElement (ComputerSystem <-> KVMRedirectionSAP) * Created SAPAvailableForElement.{mof,registration} files * Changed Makefile.am to properly handle mof and registration files #2 * Removed unused support for CIMV2 Signed-off-by: Richard Maciel <richardm@br.ibm.com> diff -r 35c891ed2c4c -r fe6e0dae82fb Makefile.am --- a/Makefile.am Tue Dec 02 18:07:02 2008 -0200 +++ b/Makefile.am Fri Dec 19 21:10:28 2008 -0200 @@ -53,7 +53,8 @@ schema/GraphicsPool.mof \ schema/InputPool.mof \ schema/HostedAccessPoint.mof \ - schema/ServiceAccessBySAP.mof + schema/ServiceAccessBySAP.mof \ + schema/SAPAvailableForElement.mof INTEROP_MOFS = \ schema/ComputerSystem.mof \ @@ -125,7 +126,8 @@ schema/GraphicsPool.registration \ schema/InputPool.registration \ schema/HostedAccessPoint.registration \ - schema/ServiceAccessBySAP.registration + schema/ServiceAccessBySAP.registration \ + schema/SAPAvailableForElement.registration INTEROP_REGS = \ schema/RegisteredProfile.registration \ diff -r 35c891ed2c4c -r fe6e0dae82fb schema/SAPAvailableForElement.mof --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/SAPAvailableForElement.mof Fri Dec 19 21:10:28 2008 -0200 @@ -0,0 +1,22 @@ +// Copyright IBM Corp. 2007 + +[Association, + Provider("cmpi::Virt_SAPAvailableForElement") +] +class Xen_SAPAvailableForElement : CIM_SAPAvailableForElement +{ +}; + +[Association, + Provider("cmpi::Virt_SAPAvailableForElement") +] +class KVM_SAPAvailableForElement : CIM_SAPAvailableForElement +{ +}; + +[Association, + Provider("cmpi::Virt_SAPAvailableForElement") +] +class LXC_SAPAvailableForElement : CIM_SAPAvailableForElement +{ +}; diff -r 35c891ed2c4c -r fe6e0dae82fb schema/SAPAvailableForElement.registration --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/SAPAvailableForElement.registration Fri Dec 19 21:10:28 2008 -0200 @@ -0,0 +1,5 @@ +# Copyright IBM Corp. 2007 +# Classname Namespace ProviderName ProviderModule ProviderTypes +Xen_SAPAvailableForElement root/virt Virt_SAPAvailableForElement Virt_SAPAvailableForElement association +KVM_SAPAvailableForElement root/virt Virt_SAPAvailableForElement Virt_SAPAvailableForElement association +LXC_SAPAvailableForElement root/virt Virt_SAPAvailableForElement Virt_SAPAvailableForElement association

# HG changeset patch # User Richard Maciel <richardm@br.ibm.com> # Date 1229728232 7200 # Node ID 27c75ec951e790bfec72273828154eec647e4caf # Parent fe6e0dae82fb66eb1df5fe0a1b6a22d5397a0197 Added association SAPAvailableForElement (ComputerSystem <-> KVMRedirectionSAP) * Added entries in the Makefile.am file to handle Virt_SAPAvailableForElement.c compilation * Created Virt_SAPAvailableForElement.c file #2 * ComputerSystem->KVMRedirectionSAP query was displaying all available KVMRedirectionSAP in the system, where it should be only the related to the provided ComputerSystem Signed-off-by: Richard Maciel <richardm@br.ibm.com> diff -r fe6e0dae82fb -r 27c75ec951e7 src/Makefile.am --- a/src/Makefile.am Fri Dec 19 21:10:28 2008 -0200 +++ b/src/Makefile.am Fri Dec 19 21:10:32 2008 -0200 @@ -74,7 +74,8 @@ libVirt_ConcreteComponent.la \ libVirt_ServiceAffectsElement.la \ libVirt_HostedAccessPoint.la \ - libVirt_ServiceAccessBySAP.la + libVirt_ServiceAccessBySAP.la \ + libVirt_SAPAvailableForElement.la libVirt_ComputerSystem_la_SOURCES = Virt_ComputerSystem.c libVirt_ComputerSystem_la_DEPENDENCIES = libVirt_VirtualSystemSnapshotService.la @@ -226,3 +227,7 @@ libVirt_HostedAccessPoint_la_SOURCES = Virt_HostedAccessPoint.c libVirt_HostedAccessPoint_la_LIBADD = -lVirt_HostSystem -lVirt_KVMRedirectionSAP +libVirt_SAPAvailableForElement_la_DEPENDENCIES = libVirt_ComputerSystem.la libVirt_KVMRedirectionSAP.la +libVirt_SAPAvailableForElement_la_SOURCES = Virt_SAPAvailableForElement.c +libVirt_SAPAvailableForElement_la_LIBADD = -lVirt_ComputerSystem -lVirt_KVMRedirectionSAP + diff -r fe6e0dae82fb -r 27c75ec951e7 src/Virt_SAPAvailableForElement.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Virt_SAPAvailableForElement.c Fri Dec 19 21:10:32 2008 -0200 @@ -0,0 +1,181 @@ +/* + * Copyright IBM Corp. 2008 + * + * Authors: + * Richard Maciel <richardm@br.ibm.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <stdbool.h> + +#include "cmpidt.h" +#include "cmpift.h" +#include "cmpimacs.h" + +#include <libcmpiutil/libcmpiutil.h> +#include <libcmpiutil/std_association.h> +#include "misc_util.h" + +#include "Virt_ComputerSystem.h" +#include "Virt_KVMRedirectionSAP.h" + +static const CMPIBroker *_BROKER; + +static CMPIStatus sapavail_to_host(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *instance = NULL; + const char *dom_name; + + if (!match_hypervisor_prefix(ref, info)) + goto out; + + s = get_console_sap_by_ref(_BROKER, ref, &instance); + if (s.rc != CMPI_RC_OK) + goto out; + + s.rc = cu_get_str_path(ref, "SystemName", &dom_name); + if (s.rc != CMPI_RC_OK) + goto out; + + s = get_domain_by_name(_BROKER, ref, dom_name, &instance); + + if (s.rc == CMPI_RC_OK) + inst_list_add(list, instance); + + out: + return s; +} + + +static CMPIStatus host_to_sapavail(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *instance = NULL; + const char *sap_host_name = NULL; + const char *dom_host_name = NULL; + int i; + struct inst_list temp_list; + + inst_list_init(&temp_list); + + if (!match_hypervisor_prefix(ref, info)) + goto out; + + s = get_domain_by_ref(_BROKER, ref, &instance); + if (s.rc != CMPI_RC_OK) + goto out; + + s.rc = cu_get_str_path(ref, "Name", &dom_host_name); + if (s.rc != CMPI_RC_OK) + goto out; + + s = enum_console_sap(_BROKER, ref, &temp_list); + + for (i = 0; i < temp_list.cur; i++) { + s.rc = cu_get_str_prop(temp_list.list[i], + "SystemName", + &sap_host_name); + if (s.rc != CMPI_RC_OK) + goto out; + + if (STREQC(dom_host_name, sap_host_name)) + inst_list_add(list, temp_list.list[i]); + } + + out: + if (temp_list.list != NULL) + inst_list_free(&temp_list); + + return s; +} + +LIBVIRT_CIM_DEFAULT_MAKEREF() + +static char* managedelem[] = { + "Xen_ComputerSystem", + "KVM_ComputerSystem", + "LXC_ComputerSystem", + NULL +}; + +static char* availablesap[] = { + "Xen_KVMRedirectionSAP", + "KVM_KVMRedirectionSAP", + "LXC_KVMRedirectionSAP", + NULL +}; + +static char* assoc_classname[] = { + "Xen_SAPAvailableForElement", + "KVM_SAPAvailableForElement", + "LXC_SAPAvailableForElement", + NULL +}; + +static struct std_assoc _host_to_sapavail = { + .source_class = (char **)&managedelem, + .source_prop = "ManagedElement", + + .target_class = (char **)&availablesap, + .target_prop = "AvailableSAP", + + .assoc_class = (char **)&assoc_classname, + + .handler = host_to_sapavail, + .make_ref = make_ref +}; + +static struct std_assoc _sapavail_to_host = { + .source_class = (char **)&availablesap, + .source_prop = "AvailableSAP", + + .target_class = (char **)&managedelem, + .target_prop = "ManagedElement", + + .assoc_class = (char **)&assoc_classname, + + .handler = sapavail_to_host, + .make_ref = make_ref +}; + +static struct std_assoc *handlers[] = { + &_host_to_sapavail, + &_sapavail_to_host, + NULL +}; + +STDA_AssocMIStub(, + Virt_SAPAvailableForElement, + _BROKER, + libvirt_cim_init(), + handlers); + +/* + * Local Variables: + * mode: C + * c-set-style: "K&R" + * tab-width: 8 + * c-basic-offset: 8 + * indent-tabs-mode: nil + * End: + */

+ +static CMPIStatus sapavail_to_host(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list)
I missed this last time around.. usually we use the term "host" to refer to the physical system. Since this is matching a KVMRedirectionSap reference to a guest or domain, I'd call this something like sapavail_to_guest() or sapavail_to_dom()
+ + +static CMPIStatus host_to_sapavail(const CMPIObjectPath *ref, + struct std_assoc_info *info, + struct inst_list *list)
Same here - change host to guest, dom, domain, etc.
+ + if (STREQC(dom_host_name, sap_host_name)) + inst_list_add(list, temp_list.list[i]); + } + + out: + if (temp_list.list != NULL)
No need for this check here.
+ inst_list_free(&temp_list);
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
participants (2)
-
Kaitlin Rupert
-
Richard Maciel