[PATCH 0 of 2] (#3) Add support for the RedirectionService

This patchset adds the RedirectionService provider needed to add console support for the guests.

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1221241931 25200 # Node ID 928da33758799c98282baa042fffd194e30a39ad # Parent e4e78fce79575db03c1629d625a53ec13f33992b (#3) Schema and Makefile changes for the RedirectionService Updates from 1 to 2: -Changed RedirectionService subclass name from RedirecitonService to ConsoleRedirectionService. Updates from 2 to 3: -Changed provider name from RedirectionService to ConsoleRedirectionService. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r e4e78fce7957 -r 928da3375879 Makefile.am --- a/Makefile.am Fri Sep 05 11:55:57 2008 -0700 +++ b/Makefile.am Fri Sep 12 10:52:11 2008 -0700 @@ -42,7 +42,8 @@ schema/VSMigrationSettingData.mof \ schema/VirtualSystemSnapshotService.mof \ schema/VirtualSystemSnapshotServiceCapabilities.mof \ - schema/ConcreteComponent.mof + schema/ConcreteComponent.mof \ + schema/ConsoleRedirectionService.mof INTEROP_MOFS = \ schema/ComputerSystem.mof \ @@ -90,7 +91,8 @@ schema/VSMigrationSettingData.registration \ schema/VirtualSystemSnapshotService.registration \ schema/VirtualSystemSnapshotServiceCapabilities.registration \ - schema/ConcreteComponent.registration + schema/ConcreteComponent.registration \ + schema/ConsoleRedirectionService.registration INTEROP_REGS = \ schema/RegisteredProfile.registration \ diff -r e4e78fce7957 -r 928da3375879 schema/ConsoleRedirectionService.mof --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/ConsoleRedirectionService.mof Fri Sep 12 10:52:11 2008 -0700 @@ -0,0 +1,16 @@ +// Copyright IBM Corp. 2007 + +[Provider("cmpi::Virt_ConsoleRedirectionService")] +class Xen_ConsoleRedirectionService : CIM_RedirectionService +{ +}; + +[Provider("cmpi::Virt_ConsoleRedirectionService")] +class KVM_ConsoleRedirectionService : CIM_RedirectionService +{ +}; + +[Provider("cmpi::Virt_ConsoleRedirectionService")] +class LXC_ConsoleRedirectionService : CIM_RedirectionService +{ +}; diff -r e4e78fce7957 -r 928da3375879 schema/ConsoleRedirectionService.registration --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/ConsoleRedirectionService.registration Fri Sep 12 10:52:11 2008 -0700 @@ -0,0 +1,5 @@ +# Copyright IBM Corp. 2007 +# Classname Namespace ProviderName ProviderModule ProviderTypes +Xen_ConsoleRedirectionService root/virt Virt_ConsoleRedirectionService Virt_ConsoleRedirectionService method instance +KVM_ConsoleRedirectionService root/virt Virt_ConsoleRedirectionService Virt_ConsoleRedirectionService method instance +LXC_ConsoleRedirectionService root/virt Virt_ConsoleRedirectionService Virt_ConsoleRedirectionService method instance diff -r e4e78fce7957 -r 928da3375879 src/Makefile.am --- a/src/Makefile.am Fri Sep 05 11:55:57 2008 -0700 +++ b/src/Makefile.am Fri Sep 12 10:52:11 2008 -0700 @@ -54,6 +54,7 @@ libVirt_ResourcePoolConfigurationService.la \ libVirt_ResourcePoolConfigurationCapabilities.la \ libVirt_VSMigrationService.la \ + libVirt_ConsoleRedirectionService.la \ libVirt_SettingsDefineCapabilities.la \ libVirt_HostedDependency.la \ libVirt_ElementConformsToProfile.la \ @@ -191,3 +192,8 @@ libVirt_ConcreteComponent_la_DEPENDENCIES = libVirt_HostSystem.la libVirt_DevicePool.la libVirt_ConcreteComponent_la_SOURCES = Virt_ConcreteComponent.c libVirt_ConcreteComponent_la_LIBADD = -lVirt_HostSystem -lVirt_DevicePool + +libVirt_ConsoleRedirectionService_la_DEPENDENCIES = libVirt_HostSystem.la +libVirt_ConsoleRedirectionService_la_SOURCES = Virt_ConsoleRedirectionService.c +libVirt_ConsoleRedirectionService_la_LIBADD = -lVirt_HostSystem +

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1221241361 25200 # Node ID 5a8389ad09702ca3e433bd530842d3d504a2299c # Parent 928da33758799c98282baa042fffd194e30a39ad (#3) Add new provider: RedirectionService. Updates from 1 to 2: -Move the following to svpc_types.h: #define SERVICE_TYPE 3 #define SHARING_MODE 3 #define ENABLED_STATE 2 #define REQUESTED_STATE 12 -If one of the following returns a negative value, set the corresponding variable to 0 num_dom = virConnectNumOfDomains(conn); num_defined_dom = virConnectNumOfDefinedDomains(conn); -Move bulk of get_rs() to a seperate set_inst_properties() function. -Rename get_rs() to get_console_rs(). Updates from 2 to 3: -Rename provider from RedirectionService to ConsoleRedirectionService Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 928da3375879 -r 5a8389ad0970 src/Virt_ConsoleRedirectionService.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Virt_ConsoleRedirectionService.c Fri Sep 12 10:42:41 2008 -0700 @@ -0,0 +1,234 @@ +/* + * Copyright IBM Corp. 2007 + * + * Authors: + * Kaitlin Rupert <karupert@us.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 <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdbool.h> +#include <inttypes.h> + +#include "cmpidt.h" +#include "cmpift.h" +#include "cmpimacs.h" + +#include "misc_util.h" +#include "svpc_types.h" + +#include <libcmpiutil/libcmpiutil.h> +#include <libcmpiutil/std_invokemethod.h> +#include <libcmpiutil/std_instance.h> + +#include "Virt_HostSystem.h" + +const static CMPIBroker *_BROKER; + +static CMPIStatus set_inst_properties(const CMPIBroker *broker, + const CMPIContext *context, + const CMPIObjectPath *ref, + virConnectPtr conn, + CMPIInstance *inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIArray *array; + const char *name = NULL; + const char *ccname = NULL; + uint16_t prop_val; + int num_defined_dom; + int num_dom; + + s = get_host_system_properties(&name, &ccname, ref, broker, context); + if (s.rc != CMPI_RC_OK) { + cu_statusf(broker, &s, + CMPI_RC_ERR_FAILED, + "Unable to get host attributes"); + goto out; + } + + CMSetProperty(inst, "ElementName", + (CMPIValue *)"ConsoleRedirectionService", CMPI_chars); + + CMSetProperty(inst, "Name", + (CMPIValue *)"ConsoleRedirectionService", CMPI_chars); + + CMSetProperty(inst, "SystemName", + (CMPIValue *)name, CMPI_chars); + + CMSetProperty(inst, "SystemCreationClassName", + (CMPIValue *)ccname, CMPI_chars); + + array = CMNewArray(broker, 1, CMPI_uint16, &s); + if ((s.rc != CMPI_RC_OK) || CMIsNullObject(array)) + goto out; + + prop_val = (uint16_t)CIM_CRS_SERVICE_TYPE; + CMSetArrayElementAt(array, 0, &prop_val, CMPI_uint16); + + CMSetProperty(inst, "RedirectionServiceType", + (CMPIValue *)&array, CMPI_uint16A); + + num_dom = virConnectNumOfDomains(conn); + num_defined_dom = virConnectNumOfDefinedDomains(conn); + + if (num_dom < 0) + num_dom = 0; + + if (num_defined_dom < 0) + num_defined_dom = 0; + + prop_val = (uint16_t) num_defined_dom + (uint16_t) num_defined_dom; + CMSetProperty(inst, "MaxConcurrentEnabledSAPs", + (CMPIValue *)&prop_val, CMPI_uint16); + + prop_val = (uint16_t)CIM_CRS_SHARING_MODE; + CMSetProperty(inst, "SharingMode", + (CMPIValue *)&prop_val, CMPI_uint16); + + prop_val = (uint16_t)CIM_CRS_ENABLED_STATE; + CMSetProperty(inst, "EnabledState", + (CMPIValue *)&prop_val, CMPI_uint16); + + prop_val = (uint16_t)CIM_CRS_REQUESTED_STATE; + CMSetProperty(inst, "RequestedState", + (CMPIValue *)&prop_val, CMPI_uint16); + + out: + return s; +} + +static CMPIStatus get_console_rs(const CMPIObjectPath *reference, + CMPIInstance **_inst, + const CMPIBroker *broker, + const CMPIContext *context, + bool is_get_inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + virConnectPtr conn = NULL; + CMPIInstance *inst = NULL; + + *_inst = NULL; + conn = connect_by_classname(broker, CLASSNAME(reference), &s); + if (conn == NULL) { + if (is_get_inst) + cu_statusf(broker, &s, + CMPI_RC_ERR_NOT_FOUND, + "No such instance"); + + return s; + } + + inst = get_typed_instance(broker, + pfx_from_conn(conn), + "ConsoleRedirectionService", + NAMESPACE(reference)); + + if (inst == NULL) { + CU_DEBUG("Failed to get typed instance"); + cu_statusf(broker, &s, + CMPI_RC_ERR_FAILED, + "Failed to create instance"); + goto out; + } + + s = set_inst_properties(broker, context, reference, conn, inst); + if (s.rc != CMPI_RC_OK) + goto out; + + if (is_get_inst) { + s = cu_validate_ref(broker, reference, inst); + if (s.rc != CMPI_RC_OK) + goto out; + } + + out: + virConnectClose(conn); + *_inst = inst; + + return s; +} + +static CMPIStatus return_rs(const CMPIContext *context, + const CMPIObjectPath *reference, + const CMPIResult *results, + bool name_only, + bool is_get_inst) +{ + CMPIStatus s = {CMPI_RC_OK, NULL}; + CMPIInstance *inst; + + s = get_console_rs(reference, &inst, _BROKER, context, is_get_inst); + if (s.rc != CMPI_RC_OK || inst == NULL) + goto out; + + if (name_only) + cu_return_instance_name(results, inst); + else + CMReturnInstance(results, inst); + out: + return s; +} + +static CMPIStatus EnumInstanceNames(CMPIInstanceMI *self, + const CMPIContext *context, + const CMPIResult *results, + const CMPIObjectPath *reference) +{ + return return_rs(context, reference, results, true, false); +} + +static CMPIStatus EnumInstances(CMPIInstanceMI *self, + const CMPIContext *context, + const CMPIResult *results, + const CMPIObjectPath *reference, + const char **properties) +{ + + return return_rs(context, reference, results, false, false); +} + +static CMPIStatus GetInstance(CMPIInstanceMI *self, + const CMPIContext *context, + const CMPIResult *results, + const CMPIObjectPath *ref, + const char **properties) +{ + return return_rs(context, ref, results, false, true); +} + +DEFAULT_CI(); +DEFAULT_MI(); +DEFAULT_DI(); +DEFAULT_EQ(); +DEFAULT_INST_CLEANUP(); + +STD_InstanceMIStub(, + Virt_ConsoleRedirectionService, + _BROKER, + libvirt_cim_init()); + + +/* + * Local Variables: + * mode: C + * c-set-style: "K&R" + * tab-width: 8 + * c-basic-offset: 8 + * indent-tabs-mode: nil + * End: + */ diff -r 928da3375879 -r 5a8389ad0970 src/svpc_types.h --- a/src/svpc_types.h Fri Sep 12 10:52:11 2008 -0700 +++ b/src/svpc_types.h Fri Sep 12 10:42:41 2008 -0700 @@ -50,6 +50,12 @@ #define CIM_EC_CHAR_DEFAULT 2 +/* ConsoleRedirectionService values */ +#define CIM_CRS_SERVICE_TYPE 3 +#define CIM_CRS_SHARING_MODE 3 +#define CIM_CRS_ENABLED_STATE 2 +#define CIM_CRS_REQUESTED_STATE 12 + #include <libcmpiutil/libcmpiutil.h> #include <string.h>
participants (1)
-
Kaitlin Rupert