ack
On Tue, Mar 6, 2012 at 5:38 PM, Christophe Fergeau <cfergeau(a)redhat.com> wrote:
This is used to add the SPICE USB redirection channel. Even if
the libvirt doc doesn't document it with the other devices deriving
from GVirConfigDomainChardev, I think it makes sense to have this
class derivers from GVirConfigDomainChardev too since it needs a
GVirConfigDomainChardevSource, and it's documented as using a
character device for redirection.
---
libvirt-gconfig/Makefile.am | 2 +
libvirt-gconfig/libvirt-gconfig-domain-redirdev.c | 82 +++++++++++++++++++++
libvirt-gconfig/libvirt-gconfig-domain-redirdev.h | 73 ++++++++++++++++++
libvirt-gconfig/libvirt-gconfig.h | 1 +
libvirt-gconfig/libvirt-gconfig.sym | 6 ++
libvirt-gconfig/tests/test-domain-create.c | 14 ++++
6 files changed, 178 insertions(+), 0 deletions(-)
create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-redirdev.c
create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-redirdev.h
diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am
index d9e87b5..181ec57 100644
--- a/libvirt-gconfig/Makefile.am
+++ b/libvirt-gconfig/Makefile.am
@@ -35,6 +35,7 @@ GCONFIG_HEADER_FILES = \
libvirt-gconfig-domain-memballoon.h \
libvirt-gconfig-domain-os.h \
libvirt-gconfig-domain-parallel.h \
+ libvirt-gconfig-domain-redirdev.h \
libvirt-gconfig-domain-seclabel.h \
libvirt-gconfig-domain-serial.h \
libvirt-gconfig-domain-snapshot.h \
@@ -87,6 +88,7 @@ GCONFIG_SOURCE_FILES = \
libvirt-gconfig-domain-memballoon.c \
libvirt-gconfig-domain-os.c \
libvirt-gconfig-domain-parallel.c \
+ libvirt-gconfig-domain-redirdev.c \
libvirt-gconfig-domain-seclabel.c \
libvirt-gconfig-domain-serial.c \
libvirt-gconfig-domain-snapshot.c \
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c
b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c
new file mode 100644
index 0000000..30c370a
--- /dev/null
+++ b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.c
@@ -0,0 +1,82 @@
+/*
+ * libvirt-gconfig-domain-redirdev.c: libvirt domain redirdev configuration
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * 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
+ *
+ * Author: Christophe Fergeau <cfergeau(a)redhat.com>
+ */
+
+#include <config.h>
+
+#include "libvirt-gconfig/libvirt-gconfig.h"
+#include "libvirt-gconfig/libvirt-gconfig-private.h"
+
+#define GVIR_CONFIG_DOMAIN_REDIRDEV_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV,
GVirConfigDomainRedirdevPrivate))
+
+struct _GVirConfigDomainRedirdevPrivate
+{
+ gboolean unused;
+};
+
+G_DEFINE_TYPE(GVirConfigDomainRedirdev, gvir_config_domain_redirdev,
GVIR_CONFIG_TYPE_DOMAIN_CHARDEV);
+
+
+static void gvir_config_domain_redirdev_class_init(GVirConfigDomainRedirdevClass
*klass)
+{
+ g_type_class_add_private(klass, sizeof(GVirConfigDomainRedirdevPrivate));
+}
+
+
+static void gvir_config_domain_redirdev_init(GVirConfigDomainRedirdev *redirdev)
+{
+ g_debug("Init GVirConfigDomainRedirdev=%p", redirdev);
+
+ redirdev->priv = GVIR_CONFIG_DOMAIN_REDIRDEV_GET_PRIVATE(redirdev);
+}
+
+
+GVirConfigDomainRedirdev *gvir_config_domain_redirdev_new(void)
+{
+ GVirConfigObject *object;
+
+ object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV,
+ "redirdev", NULL);
+ return GVIR_CONFIG_DOMAIN_REDIRDEV(object);
+}
+
+GVirConfigDomainRedirdev *gvir_config_domain_redirdev_new_from_xml(const gchar *xml,
+ GError **error)
+{
+ GVirConfigObject *object;
+
+ object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV,
+ "redirdev", NULL, xml, error);
+ return GVIR_CONFIG_DOMAIN_REDIRDEV(object);
+}
+
+void gvir_config_domain_redirdev_set_bus(GVirConfigDomainRedirdev *redirdev,
+ GVirConfigDomainRedirdevBus bus)
+{
+ g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_REDIRDEV(redirdev));
+
+ gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(redirdev),
+ "bus",
+ GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV_BUS,
+ bus,
+ NULL);
+}
diff --git a/libvirt-gconfig/libvirt-gconfig-domain-redirdev.h
b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.h
new file mode 100644
index 0000000..99585bb
--- /dev/null
+++ b/libvirt-gconfig/libvirt-gconfig-domain-redirdev.h
@@ -0,0 +1,73 @@
+/*
+ * libvirt-gconfig-domain-redirdev.h: libvirt domain redirdev configuration
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * 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
+ *
+ * Author: Christophe Fergeau <cfergeau(a)redhat.com>
+ */
+
+#if !defined(__LIBVIRT_GCONFIG_H__) && !defined(LIBVIRT_GCONFIG_BUILD)
+#error "Only <libvirt-gconfig/libvirt-gconfig.h> can be included
directly."
+#endif
+
+#ifndef __LIBVIRT_GCONFIG_DOMAIN_REDIRDEV_H__
+#define __LIBVIRT_GCONFIG_DOMAIN_REDIRDEV_H__
+
+G_BEGIN_DECLS
+
+#define GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV
(gvir_config_domain_redirdev_get_type ())
+#define GVIR_CONFIG_DOMAIN_REDIRDEV(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV, GVirConfigDomainRedirdev))
+#define GVIR_CONFIG_DOMAIN_REDIRDEV_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV, GVirConfigDomainRedirdevClass))
+#define GVIR_CONFIG_IS_DOMAIN_REDIRDEV(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV))
+#define GVIR_CONFIG_IS_DOMAIN_REDIRDEV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV))
+#define GVIR_CONFIG_DOMAIN_REDIRDEV_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GVIR_CONFIG_TYPE_DOMAIN_REDIRDEV, GVirConfigDomainRedirdevClass))
+
+typedef struct _GVirConfigDomainRedirdev GVirConfigDomainRedirdev;
+typedef struct _GVirConfigDomainRedirdevPrivate GVirConfigDomainRedirdevPrivate;
+typedef struct _GVirConfigDomainRedirdevClass GVirConfigDomainRedirdevClass;
+
+struct _GVirConfigDomainRedirdev
+{
+ GVirConfigDomainChardev parent;
+
+ GVirConfigDomainRedirdevPrivate *priv;
+
+ /* Do not add fields to this struct */
+};
+
+struct _GVirConfigDomainRedirdevClass
+{
+ GVirConfigDomainChardevClass parent_class;
+
+ gpointer padding[20];
+};
+
+typedef enum {
+ GVIR_CONFIG_DOMAIN_REDIRDEV_BUS_USB
+} GVirConfigDomainRedirdevBus;
+
+GType gvir_config_domain_redirdev_get_type(void);
+
+GVirConfigDomainRedirdev *gvir_config_domain_redirdev_new(void);
+GVirConfigDomainRedirdev *gvir_config_domain_redirdev_new_from_xml(const gchar *xml,
+ GError **error);
+void gvir_config_domain_redirdev_set_bus(GVirConfigDomainRedirdev *redirdev,
+ GVirConfigDomainRedirdevBus bus);
+
+G_END_DECLS
+
+#endif /* __LIBVIRT_GCONFIG_DOMAIN_REDIRDEV_H__ */
diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h
index b1eede2..2fcc4ba 100644
--- a/libvirt-gconfig/libvirt-gconfig.h
+++ b/libvirt-gconfig/libvirt-gconfig.h
@@ -52,6 +52,7 @@
#include <libvirt-gconfig/libvirt-gconfig-domain-memballoon.h>
#include <libvirt-gconfig/libvirt-gconfig-domain-os.h>
#include <libvirt-gconfig/libvirt-gconfig-domain-parallel.h>
+#include <libvirt-gconfig/libvirt-gconfig-domain-redirdev.h>
#include <libvirt-gconfig/libvirt-gconfig-domain-seclabel.h>
#include <libvirt-gconfig/libvirt-gconfig-domain-serial.h>
#include <libvirt-gconfig/libvirt-gconfig-domain-snapshot.h>
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym
index ffde0bc..717c3c9 100644
--- a/libvirt-gconfig/libvirt-gconfig.sym
+++ b/libvirt-gconfig/libvirt-gconfig.sym
@@ -197,6 +197,12 @@ LIBVIRT_GCONFIG_0.0.4 {
gvir_config_domain_parallel_new;
gvir_config_domain_parallel_new_from_xml;
+ gvir_config_domain_redirdev_get_type;
+ gvir_config_domain_redirdev_bus_get_type;
+ gvir_config_domain_redirdev_new;
+ gvir_config_domain_redirdev_new_from_xml;
+ gvir_config_domain_redirdev_set_bus;
+
gvir_config_domain_seclabel_get_type;
gvir_config_domain_seclabel_type_get_type;
gvir_config_domain_seclabel_new;
diff --git a/libvirt-gconfig/tests/test-domain-create.c
b/libvirt-gconfig/tests/test-domain-create.c
index b24d133..fd936e6 100644
--- a/libvirt-gconfig/tests/test-domain-create.c
+++ b/libvirt-gconfig/tests/test-domain-create.c
@@ -194,6 +194,20 @@ int main(int argc, char **argv)
g_object_unref(G_OBJECT(spicevmc));
devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(channel));
+ /* spice usb redirection */
+ GVirConfigDomainRedirdev *redirdev;
+
+ redirdev = gvir_config_domain_redirdev_new();
+ gvir_config_domain_redirdev_set_bus(redirdev,
+ GVIR_CONFIG_DOMAIN_REDIRDEV_BUS_USB);
+ gvir_config_domain_channel_set_target_type(channel,
+
GVIR_CONFIG_DOMAIN_CHANNEL_TARGET_VIRTIO);
+ spicevmc = gvir_config_domain_chardev_source_spicevmc_new();
+ gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(redirdev),
+ GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(spicevmc));
+ g_object_unref(G_OBJECT(spicevmc));
+ devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(redirdev));
+
gvir_config_domain_set_devices(domain, devices);
g_list_foreach(devices, (GFunc)g_object_unref, NULL);
--
1.7.7.6
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list