On 03/13/2014 11:00 AM, Boris Fiuczynski wrote:
On 03/03/2014 08:38 AM, Xu Wang wrote:
> Signed-off-by: Xu Wang <gesaint(a)linux.vnet.ibm.com>
> ---
> schema/ResourceAllocationSettingData.mof | 27
> +++++++++++++++++++++
> schema/ResourceAllocationSettingData.registration | 3 ++
> src/Virt_RASD.c | 24
> ++++++++++++++++++
> 3 files changed, 54 insertions(+), 0 deletions(-)
>
> diff --git a/schema/ResourceAllocationSettingData.mof
> b/schema/ResourceAllocationSettingData.mof
> index 6b649de..3512170 100644
> --- a/schema/ResourceAllocationSettingData.mof
> +++ b/schema/ResourceAllocationSettingData.mof
> @@ -328,6 +328,33 @@ class LXC_InputResourceAllocationSettingData :
> LXC_ResourceAllocationSettingData
> string BusType;
> };
>
> +[Description ("Xen virtual controller device"),
> + Provider("cmpi::Virt_RASD")
> +]
> +class Xen_ControllerResourceAllocationSettingData :
> Xen_ResourceAllocationSettingData
> +{
> + string Type;
> + string Model;
> +};
> +
> +[Description ("KVM virtual controller device"),
> + Provider("cmpi::Virt_RASD")
> +]
> +class KVM_ControllerResourceAllocationSettingData :
> KVM_ResourceAllocationSettingData
> +{
> + string Type;
The class CIM_ResourceAllocationSettingData has an attribute
ResourceSubType. I think there is no need to introduce this new
attribute here.
> + string Model;
I think that there should at least be some minimum documentation of the
attributes in the mof as well. e.g.
[Description ("Order in which the bus controller is encountered. "
"The order is controller type scoped.")]
uint64 Index;
> +};
As already said in patch 1/3 I think that you need to add the index.
After reading
John's mail about the BZ, I would suggest to also add
[Description ("Device address property names")]
string AddressProperties[];
[Description ("Device address property values")]
string AddressValues[];
These attributes already exist on the Disk and Net.
The provider code for this is reusable and generic. See below...
Below I added some code snippets for support and also will do that for
hopefully most of the other spots.
> +
> +[Description ("LXC virtual controller device"),
> + Provider("cmpi::Virt_RASD")
> +]
> +class LXC_ControllerResourceAllocationSettingData :
> LXC_ResourceAllocationSettingData
> +{
> + string Type;
> + string Model;
> +};
> +
> [Description ("Xen virtual network pool settings"),
> Provider("cmpi::Virt_RASD")
> ]
> diff --git a/schema/ResourceAllocationSettingData.registration
> b/schema/ResourceAllocationSettingData.registration
> index b969bfe..1142376 100644
> --- a/schema/ResourceAllocationSettingData.registration
> +++ b/schema/ResourceAllocationSettingData.registration
> @@ -7,6 +7,7 @@ Xen_MemResourceAllocationSettingData root/virt
> Virt_RASD Virt_RASD instance
> Xen_GraphicsResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> Xen_InputResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> Xen_ConsoleResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> +Xen_ControllerResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> KVM_DiskResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> KVM_NetResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> KVM_ProcResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> @@ -14,9 +15,11 @@ KVM_MemResourceAllocationSettingData root/virt
> Virt_RASD Virt_RASD instance
> KVM_GraphicsResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> KVM_InputResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> KVM_ConsoleResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> +KVM_ControllerResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> LXC_MemResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> LXC_DiskResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> LXC_ProcResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> LXC_GraphicsResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> LXC_InputResourceAllocationSettingData root/virt Virt_RASD Virt_RASD
> instance
> LXC_ConsoleResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> +LXC_ControllerResourceAllocationSettingData root/virt Virt_RASD
> Virt_RASD instance
> diff --git a/src/Virt_RASD.c b/src/Virt_RASD.c
> index abfb09f..594fe83 100644
> --- a/src/Virt_RASD.c
> +++ b/src/Virt_RASD.c
> @@ -915,6 +915,20 @@ static CMPIStatus set_input_rasd_params(const
> struct virt_device *dev,
> return s;
> }
>
> +static CMPIStatus set_controller_rasd_params(const struct virt_device
> *dev,
> + CMPIInstance *inst)
static
CMPIStatus set_controller_rasd_params(const CMPIBroker *broker,
const CMPIObjectPath *ref,
const struct virt_device
*vdev,
CMPIInstance *inst)
> +{
> + CMPIStatus s = {CMPI_RC_OK, NULL};
> +
> + CMSetProperty(inst, "Type",
> + (CMPIValue *)dev->dev.controller.type,
> CMPI_chars);
> +
> + CMSetProperty(inst, "Model",
> + (CMPIValue *)dev->dev.controller.model,
> CMPI_chars);
if (dev->dev.controller.address.ct > 0)
set_rasd_device_address(broker, ref,
&dev->dev.controller.address, inst);
> +
> + return s;
> +}
> +
> CMPIInstance *rasd_from_vdev(const CMPIBroker *broker,
> struct virt_device *dev,
> const char *host,
> @@ -949,6 +963,9 @@ CMPIInstance *rasd_from_vdev(const CMPIBroker
> *broker,
> } else if (dev->type == CIM_RES_TYPE_INPUT) {
> type = CIM_RES_TYPE_INPUT;
> base = "InputResourceAllocationSettingData";
> + } else if (dev->type == CIM_RES_TYPE_CONTROLLER) {
> + type = CIM_RES_TYPE_CONTROLLER;
Setting the attribute ResourceType to CIM_RES_TYPE_OTHER since there is
no value in the DMTF defined space that would fit a generic controller.
By setting it to "Other" or "1" you should specify attributes
OtherResourceType and ResourceSubType.
I suggest to set OtherResourceType to "Controller" and as mentioned
above set the ResourceSubType according to the controller type
specified. You need to set these in method set_controller_rasd_params.
> + base = "ControllerResourceAllocationSettingData";
> } else {
> return NULL;
> }
> @@ -1004,6 +1021,8 @@ CMPIInstance *rasd_from_vdev(const CMPIBroker
> *broker,
> s = set_input_rasd_params(dev, inst);
> } else if (dev->type == CIM_RES_TYPE_CONSOLE) {
> s = set_console_rasd_params(dev, inst);
> + } else if (dev->type == CIM_RES_TYPE_CONTROLLER) {
> + s = set_controller_rasd_params(dev, inst);
s =
set_controller_rasd_params(broker, rev, dev, inst);
> }
>
> /* FIXME: Put the HostResource in place */
> @@ -1138,6 +1157,8 @@ CMPIrc res_type_from_rasd_classname(const char
> *cn, uint16_t *type)
> *type = CIM_RES_TYPE_IMAGE;
> else if (STREQ(base, "ConsoleResourceAllocationSettingData"))
> *type = CIM_RES_TYPE_CONSOLE;
> + else if (STREQ(base, "ControllerResourceAllocationSettingData"))
> + *type = CIM_RES_TYPE_CONTROLLER;
> else
> goto out;
>
> @@ -1175,6 +1196,9 @@ CMPIrc rasd_classname_from_type(uint16_t type,
> const char **classname)
> case CIM_RES_TYPE_INPUT:
> *classname = "InputResourceAllocationSettingData";
> break;
> + case CIM_RES_TYPE_CONTROLLER:
> + *classname = "ControllerResourceAllocationSettingData";
> + break;
> default:
> rc = CMPI_RC_ERR_FAILED;
> }
>
--
Mit freundlichen Grüßen/Kind regards
Boris Fiuczynski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294