[Libvirt-cim] [PATCH V2 4/5] Device: CIM_LogicalDevice for controllers

John Ferlan jferlan at redhat.com
Wed Mar 26 23:32:44 UTC 2014



On 03/25/2014 03:20 AM, Xu Wang wrote:
> Signed-off-by: Xu Wang <gesaint at linux.vnet.ibm.com>
> ---
>  src/Virt_Device.c |   34 +++++++++++++++++++++++++++++++++-
>  1 files changed, 33 insertions(+), 1 deletions(-)
> 
> diff --git a/src/Virt_Device.c b/src/Virt_Device.c
> index 12ae6bd..f100f6b 100644
> --- a/src/Virt_Device.c
> +++ b/src/Virt_Device.c
> @@ -366,6 +366,33 @@ static CMPIInstance *input_instance(const CMPIBroker *broker,
>          return inst;
>  }
>  
> +static CMPIInstance *controller_instance(const CMPIBroker *broker,
> +                                         struct controller_device *dev,
> +                                         const virDomainPtr dom,
> +                                         const char *ns)
> +{
> +        CMPIInstance *inst;
> +        virConnectPtr conn;
> +
> +        conn = virDomainGetConnect(dom);
> +        inst = get_typed_instance(broker,
> +                                  pfx_from_conn(conn),
> +                                  "Controller",
> +                                  ns,
> +                                  true);
> +        if (inst == NULL) {
> +                CU_DEBUG("Failed to get instance of ControllerDevice");

                CU_DEBUG("Failed to get instance of %s_Controller",
                         pfx_from_conn(conn));

> +                return NULL;
> +        }
> +
> +        CMSetProperty(inst, "Controller",
> +                      (CMPIValue *)dev->type, CMPI_chars);
> +        CMSetProperty(inst, "Controller",
> +                      (CMPIValue *)dev->model, CMPI_chars);

Not sure what you were setting here as there's not a "Controller"
property from what I read... In any case, these will become:

        const char *type_str;

        type_str = controller_protocol_type_IDToStr(dev->type);
        if (type_str == NULL) {
            CU_DEBUG("controller type=%d fails to return string",
dev->type);
            return 0;
        }

        CMSetProperty(inst, "ProtocolSupported",
                      (CMPIValue *)dev->type,
                      CMPI_uint16);

        if (dev->model)
            CMSetProperty(inst, "ProtocolDescription",
                          (CMPIValue *)dev->model,
                          CMPI_chars);


Where the ProtocolSupported type will come from a new enum list in
svpc_types.h as taken from the docs.  The ProtocolDescription is the
free form description with more detail

> +
> +        return inst;
> +}
> +
>  static int device_set_devid(CMPIInstance *instance,
>                              struct virt_device *dev,
>                              const virDomainPtr dom)
> @@ -516,11 +543,16 @@ static bool device_instances(const CMPIBroker *broker,
>                                                      &dev->dev.console,
>                                                      dom,
>                                                      ns);
> -                 else if (dev->type == CIM_RES_TYPE_INPUT)
> +                else if (dev->type == CIM_RES_TYPE_INPUT)
>                          instance = input_instance(broker,
>                                                    &dev->dev.input,
>                                                    dom,
>                                                    ns);
> +                else if (dev->type == CIM_RES_TYPE_CONTROLLER)
> +                        instance = controller_instance(broker,
> +                                                       &dev->dev.controller,
> +                                                       dom,
> +                                                       ns);
>                  else
>                          return false;
>  
> 




More information about the Libvirt-cim mailing list