On Thu, Nov 10, 2011 at 9:33 PM, Christophe Fergeau <cferg...@redhat.com> wrote:
> ---
>  libvirt-gconfig/libvirt-gconfig-device-disk.c |   88 
> ++++++++++++++++++++++++-
>  libvirt-gconfig/libvirt-gconfig-device-disk.h |   10 +++
>  libvirt-gconfig/libvirt-gconfig.sym           |    7 ++-
>  3 files changed, 102 insertions(+), 3 deletions(-)
>
> diff --git a/libvirt-gconfig/libvirt-gconfig-device-disk.c 
> b/libvirt-gconfig/libvirt-gconfig-device-disk.c
> index 9981ae8..29de68b 100644
> --- a/libvirt-gconfig/libvirt-gconfig-device-disk.c
> +++ b/libvirt-gconfig/libvirt-gconfig-device-disk.c
> @@ -38,7 +38,7 @@ extern gboolean debugFlag;
>
>  struct _GVirConfigDeviceDiskPrivate
>  {
> -    gboolean unused;
> +    GVirConfigDeviceDiskType type;
>  };
>
>  G_DEFINE_TYPE(GVirConfigDeviceDisk, gvir_config_device_disk, 
> GVIR_TYPE_CONFIG_DEVICE);
> @@ -93,8 +93,10 @@ void gvir_config_device_disk_set_type(GVirConfigDeviceDisk 
> *disk,
>         return;
>     type_str = gvir_config_genum_get_nick(GVIR_TYPE_CONFIG_DEVICE_DISK_TYPE,
>                                           type);
> -    if (type_str != NULL)
> +    if (type_str != NULL) {
>         xmlNewProp(node, (xmlChar*)"type", (xmlChar*)type_str);
> +        disk->priv->type = type;
> +    }
>  }
>
>  void gvir_config_device_disk_set_guest_device_type(GVirConfigDeviceDisk 
> *disk,
> @@ -126,3 +128,85 @@ void 
> gvir_config_device_disk_set_snapshot_type(GVirConfigDeviceDisk *disk,
>     if (type_str != NULL)
>         xmlNewProp(node, (xmlChar*)"snapshot", (xmlChar*)type_str);
>  }
> +
> +void gvir_config_device_disk_set_source(GVirConfigDeviceDisk *disk,
> +                                        const char *source)
> +{
> +    xmlNodePtr source_node;
> +    const char *attribute_name;
> +
> +    if (disk->priv->type == GVIR_CONFIG_DEVICE_DISK_DIR) {
> +        /* I don't know what attribute name to use for 'dir' */
> +        g_warning("set_source not implemented for 'dir' disk nodes");
> +        return;
> +    }
> +
> +    source_node = gvir_config_object_new_child(GVIR_CONFIG_OBJECT(disk),
> +                                               "source", TRUE);
> +    if (source_node == NULL)
> +        return;
> +
> +    switch (disk->priv->type) {
> +        case GVIR_CONFIG_DEVICE_DISK_FILE:
> +            attribute_name = "file";
> +            break;
> +        case GVIR_CONFIG_DEVICE_DISK_BLOCK:
> +            attribute_name = "block";
> +            break;
> +        case GVIR_CONFIG_DEVICE_DISK_NETWORK:
> +            attribute_name = "protocol";
> +            break;
> +        default:
> +            g_return_if_reached();
> +    }

hmm, if I read domain_conf.c correctly,

FILE -> "file"
BLOCK -> "dev"
DIR -> "dir"
NETWORK -> "protocol"


> +    xmlNewProp(source_node, (xmlChar*)attribute_name, (xmlChar*)source);
> +}
> +
> +void gvir_config_device_disk_set_driver_name(GVirConfigDeviceDisk *disk,
> +                                             const char *driver_name)
> +{
> +    xmlNodePtr node;
> +
> +    node = gvir_config_object_new_child(GVIR_CONFIG_OBJECT(disk),
> +                                        "driver", FALSE);
> +    if (node == NULL)
> +        return;
> +    xmlNewProp(node, (xmlChar*)"name", (xmlChar*)driver_name);
> +
> +}
> +
> +void gvir_config_device_disk_set_driver_type(GVirConfigDeviceDisk *disk,
> +                                             const char *driver_type)
> +{
> +    xmlNodePtr node;
> +
> +    node = gvir_config_object_new_child(GVIR_CONFIG_OBJECT(disk),
> +                                        "driver", FALSE);
> +    if (node == NULL)
> +        return;
> +    xmlNewProp(node, (xmlChar*)"type", (xmlChar*)driver_type);
> +}
> +
> +void gvir_config_device_disk_set_target_bus(GVirConfigDeviceDisk *disk,
> +                                            const char *bus)
> +{
> +    xmlNodePtr node;
> +
> +    node = gvir_config_object_new_child(GVIR_CONFIG_OBJECT(disk),
> +                                        "target", FALSE);
> +    if (node == NULL)
> +        return;
> +    xmlNewProp(node, (xmlChar*)"bus", (xmlChar*)bus);
> +}
> +
> +void gvir_config_device_disk_set_target_dev(GVirConfigDeviceDisk *disk,
> +                                            const char *dev)
> +{
> +    xmlNodePtr node;
> +
> +    node = gvir_config_object_new_child(GVIR_CONFIG_OBJECT(disk),
> +                                        "target", FALSE);
> +    if (node == NULL)
> +        return;
> +    xmlNewProp(node, (xmlChar*)"dev", (xmlChar*)dev);
> +}
> diff --git a/libvirt-gconfig/libvirt-gconfig-device-disk.h 
> b/libvirt-gconfig/libvirt-gconfig-device-disk.h
> index 2850672..3e25e9f 100644
> --- a/libvirt-gconfig/libvirt-gconfig-device-disk.h
> +++ b/libvirt-gconfig/libvirt-gconfig-device-disk.h
> @@ -87,6 +87,16 @@ void 
> gvir_config_device_disk_set_guest_device_type(GVirConfigDeviceDisk *disk,
>                                                    
> GVirConfigDeviceDiskGuestDeviceType type);
>  void gvir_config_device_disk_set_snapshot_type(GVirConfigDeviceDisk *disk,
>                                                
> GVirConfigDeviceDiskSnapshotType type);
> +void gvir_config_device_disk_set_source(GVirConfigDeviceDisk *disk,
> +                                        const char *source);
> +void gvir_config_device_disk_set_driver_name(GVirConfigDeviceDisk *disk,
> +                                             const char *driver_name);
> +void gvir_config_device_disk_set_driver_type(GVirConfigDeviceDisk *disk,
> +                                             const char *driver_type);
> +void gvir_config_device_disk_set_target_bus(GVirConfigDeviceDisk *disk,
> +                                            const char *bus);
> +void gvir_config_device_disk_set_target_dev(GVirConfigDeviceDisk *disk,
> +                                            const char *dev);
>
>  G_END_DECLS
>
> diff --git a/libvirt-gconfig/libvirt-gconfig.sym 
> b/libvirt-gconfig/libvirt-gconfig.sym
> index 963ca53..cb0d035 100644
> --- a/libvirt-gconfig/libvirt-gconfig.sym
> +++ b/libvirt-gconfig/libvirt-gconfig.sym
> @@ -20,8 +20,13 @@ LIBVIRT_GOBJECT_0.0.1 {
>        gvir_config_device_disk_type_get_type;
>        gvir_config_device_disk_new;
>        gvir_config_device_disk_new_from_xml;
> -       gvir_config_device_disk_set_snapshot_type;
> +       gvir_config_device_disk_set_driver_name;
> +       gvir_config_device_disk_set_driver_type;
>        gvir_config_device_disk_set_guest_device_type;
> +       gvir_config_device_disk_set_snapshot_type;
> +       gvir_config_device_disk_set_source;
> +       gvir_config_device_disk_set_target_bus;
> +       gvir_config_device_disk_set_target_dev;
>        gvir_config_device_disk_set_type;
>
>        gvir_config_domain_get_type;
> --
> 1.7.7
>
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>



-- 
Marc-André Lureau

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to