[libvirt] [libvirt-glib 1/8] Setters/adders for GVirConfigCapabilitiesCpu props

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> - gvir_config_capabilities_cpu_add_feature - gvir_config_capabilities_cpu_set_topology --- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c | 32 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h | 6 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 40 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c index df77364..e517a20 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c @@ -56,6 +56,21 @@ gvir_config_capabilities_cpu_get_arch(GVirConfigCapabilitiesCpu *cpu) return gvir_config_object_get_node_content(GVIR_CONFIG_OBJECT(cpu), "arch"); } +/** + * gvir_config_capabilities_cpu_add_feature: + * + * Adds a new feature to CPU. + */ +void gvir_config_capabilities_cpu_add_feature(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuFeature *feature) +{ + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu)); + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU_FEATURE(feature)); + + gvir_config_object_attach_add(GVIR_CONFIG_OBJECT(cpu), + GVIR_CONFIG_OBJECT(feature)); +} + struct GetFeatureData { GVirConfigXmlDoc *doc; const gchar *schema; @@ -133,3 +148,20 @@ gvir_config_capabilities_cpu_get_topology(GVirConfigCapabilitiesCpu *cpu) return GVIR_CONFIG_CAPABILITIES_CPU_TOPOLOGY(object); } + +/** + * gvir_config_capabilities_cpu_set_topology: + * + * Sets the topology of the cpu. + */ +void +gvir_config_capabilities_cpu_set_topology(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuTopology *topology) +{ + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu)); + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU_TOPOLOGY(topology)); + + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(cpu), + "topology", + GVIR_CONFIG_OBJECT(topology)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h index 4d896ef..67fe607 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h @@ -29,6 +29,7 @@ #define __LIBVIRT_GCONFIG_CAPABILITIES_CPU_H__ #include "libvirt-gconfig-capabilities-cpu-topology.h" +#include "libvirt-gconfig-capabilities-cpu-feature.h" G_BEGIN_DECLS @@ -63,10 +64,15 @@ GType gvir_config_capabilities_cpu_get_type(void); const gchar * gvir_config_capabilities_cpu_get_arch(GVirConfigCapabilitiesCpu *cpu); +void gvir_config_capabilities_cpu_add_feature(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuFeature *feature); GList * gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu); GVirConfigCapabilitiesCpuTopology * gvir_config_capabilities_cpu_get_topology(GVirConfigCapabilitiesCpu *cpu); +void +gvir_config_capabilities_cpu_set_topology(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuTopology *topology); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 5473148..a9e5da5 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -389,9 +389,11 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_get_guests; gvir_config_capabilities_cpu_get_type; + gvir_config_capabilities_cpu_add_feature; gvir_config_capabilities_cpu_get_arch; gvir_config_capabilities_cpu_get_features; gvir_config_capabilities_cpu_get_topology; + gvir_config_capabilities_cpu_set_topology; gvir_config_capabilities_cpu_feature_get_type; gvir_config_capabilities_cpu_feature_get_name; -- 1.7.10.4

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> Provide constructor methods for GVirConfigCapabilitiesCpuTopology. --- .../libvirt-gconfig-capabilities-cpu-topology.c | 25 ++++++++++++++++++++ .../libvirt-gconfig-capabilities-cpu-topology.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 30 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c index 65ebcb1..f34a4fe 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c @@ -49,6 +49,31 @@ static void gvir_config_capabilities_cpu_topology_init(GVirConfigCapabilitiesCpu topology->priv = GVIR_CONFIG_CAPABILITIES_CPU_TOPOLOGY_GET_PRIVATE(topology); } +GVirConfigCapabilitiesCpuTopology *gvir_config_capabilities_cpu_topology_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_CONFIG_TYPE_CAPABILITIES_CPU_TOPOLOGY, + "topology", + NULL); + + return GVIR_CONFIG_CAPABILITIES_CPU_TOPOLOGY(object); +} + +GVirConfigCapabilitiesCpuTopology * +gvir_config_capabilities_cpu_topology_new_from_xml(const gchar *xml, GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_CAPABILITIES_CPU_TOPOLOGY, + "topology", + NULL, + xml, + error); + + return GVIR_CONFIG_CAPABILITIES_CPU_TOPOLOGY(object); +} + guint64 gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopology *topology) { diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h index 673a340..b8075a0 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h @@ -59,6 +59,9 @@ struct _GVirConfigCapabilitiesCpuTopologyClass GType gvir_config_capabilities_cpu_topology_get_type(void); +GVirConfigCapabilitiesCpuTopology *gvir_config_capabilities_cpu_topology_new(void); +GVirConfigCapabilitiesCpuTopology * +gvir_config_capabilities_cpu_topology_new_from_xml(const gchar *xml, GError **error); guint64 gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopology *topology); guint64 diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index a9e5da5..c319efc 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -402,6 +402,8 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_cpu_topology_get_cores; gvir_config_capabilities_cpu_topology_get_sockets; gvir_config_capabilities_cpu_topology_get_threads; + gvir_config_capabilities_cpu_topology_new; + gvir_config_capabilities_cpu_topology_new_from_xml; gvir_config_capabilities_guest_get_type; gvir_config_capabilities_guest_get_arch; -- 1.7.10.4

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> --- .../libvirt-gconfig-capabilities-cpu-topology.c | 27 ++++++++++++++++++++ .../libvirt-gconfig-capabilities-cpu-topology.h | 9 +++++++ libvirt-gconfig/libvirt-gconfig.sym | 3 +++ 3 files changed, 39 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c index f34a4fe..bd46a0e 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c @@ -85,6 +85,15 @@ gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopol 0); } +void +gvir_config_capabilities_cpu_topology_set_sockets(GVirConfigCapabilitiesCpuTopology *topology, + guint64 sockets) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "sockets", G_TYPE_UINT64, sockets, + NULL); +} + guint64 gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopology *topology) { @@ -96,6 +105,15 @@ gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopolog 0); } +void +gvir_config_capabilities_cpu_topology_set_cores(GVirConfigCapabilitiesCpuTopology *topology, + guint64 cores) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "cores", G_TYPE_UINT64, cores, + NULL); +} + guint64 gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopology *topology) { @@ -106,3 +124,12 @@ gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopol "threads", 0); } + +void +gvir_config_capabilities_cpu_topology_set_threads(GVirConfigCapabilitiesCpuTopology *topology, + guint64 threads) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "threads", G_TYPE_UINT64, threads, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h index b8075a0..c589110 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h @@ -64,10 +64,19 @@ GVirConfigCapabilitiesCpuTopology * gvir_config_capabilities_cpu_topology_new_from_xml(const gchar *xml, GError **error); guint64 gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_sockets(GVirConfigCapabilitiesCpuTopology *topology, + guint64 sockets); guint64 gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_cores(GVirConfigCapabilitiesCpuTopology *topology, + guint64 cores); guint64 gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_threads(GVirConfigCapabilitiesCpuTopology *topology, + guint64 threads); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index c319efc..d412d56 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -400,8 +400,11 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_cpu_topology_get_type; gvir_config_capabilities_cpu_topology_get_cores; + gvir_config_capabilities_cpu_topology_set_cores; gvir_config_capabilities_cpu_topology_get_sockets; + gvir_config_capabilities_cpu_topology_set_sockets; gvir_config_capabilities_cpu_topology_get_threads; + gvir_config_capabilities_cpu_topology_set_threads; gvir_config_capabilities_cpu_topology_new; gvir_config_capabilities_cpu_topology_new_from_xml; -- 1.7.10.4

Same concerns as with the first patch, GVirConfigCapabilitiesCpuTopology isn't mutable, it may be worth introducing a GVirConfigDomainCpuTopology which would contain these setters (and this would go well with the other GVirConfigDomain classes you introduce in this series). Christophe On Sat, Jun 23, 2012 at 10:17:59PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
--- .../libvirt-gconfig-capabilities-cpu-topology.c | 27 ++++++++++++++++++++ .../libvirt-gconfig-capabilities-cpu-topology.h | 9 +++++++ libvirt-gconfig/libvirt-gconfig.sym | 3 +++ 3 files changed, 39 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c index f34a4fe..bd46a0e 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.c @@ -85,6 +85,15 @@ gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopol 0); }
+void +gvir_config_capabilities_cpu_topology_set_sockets(GVirConfigCapabilitiesCpuTopology *topology, + guint64 sockets) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "sockets", G_TYPE_UINT64, sockets, + NULL); +} + guint64 gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopology *topology) { @@ -96,6 +105,15 @@ gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopolog 0); }
+void +gvir_config_capabilities_cpu_topology_set_cores(GVirConfigCapabilitiesCpuTopology *topology, + guint64 cores) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "cores", G_TYPE_UINT64, cores, + NULL); +} + guint64 gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopology *topology) { @@ -106,3 +124,12 @@ gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopol "threads", 0); } + +void +gvir_config_capabilities_cpu_topology_set_threads(GVirConfigCapabilitiesCpuTopology *topology, + guint64 threads) +{ + gvir_config_object_set_attribute_with_type(GVIR_CONFIG_OBJECT(topology), + "threads", G_TYPE_UINT64, threads, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h index b8075a0..c589110 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-topology.h @@ -64,10 +64,19 @@ GVirConfigCapabilitiesCpuTopology * gvir_config_capabilities_cpu_topology_new_from_xml(const gchar *xml, GError **error); guint64 gvir_config_capabilities_cpu_topology_get_sockets(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_sockets(GVirConfigCapabilitiesCpuTopology *topology, + guint64 sockets); guint64 gvir_config_capabilities_cpu_topology_get_cores(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_cores(GVirConfigCapabilitiesCpuTopology *topology, + guint64 cores); guint64 gvir_config_capabilities_cpu_topology_get_threads(GVirConfigCapabilitiesCpuTopology *topology); +void +gvir_config_capabilities_cpu_topology_set_threads(GVirConfigCapabilitiesCpuTopology *topology, + guint64 threads);
G_END_DECLS
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index c319efc..d412d56 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -400,8 +400,11 @@ LIBVIRT_GCONFIG_0.0.9 {
gvir_config_capabilities_cpu_topology_get_type; gvir_config_capabilities_cpu_topology_get_cores; + gvir_config_capabilities_cpu_topology_set_cores; gvir_config_capabilities_cpu_topology_get_sockets; + gvir_config_capabilities_cpu_topology_set_sockets; gvir_config_capabilities_cpu_topology_get_threads; + gvir_config_capabilities_cpu_topology_set_threads; gvir_config_capabilities_cpu_topology_new; gvir_config_capabilities_cpu_topology_new_from_xml;
-- 1.7.10.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> Setter for CapabilitiesCpuFeature.name. --- libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.c | 12 ++++++++++++ libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.h | 3 +++ libvirt-gconfig/libvirt-gconfig.sym | 1 + 3 files changed, 16 insertions(+) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.c index 0c71885..98e736d 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.c @@ -56,3 +56,15 @@ gvir_config_capabilities_cpu_feature_get_name(GVirConfigCapabilitiesCpuFeature * NULL, "name"); } + +void +gvir_config_capabilities_cpu_feature_set_name(GVirConfigCapabilitiesCpuFeature *feature, + const gchar *name) +{ + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU_FEATURE(feature)); + g_return_if_fail(name != NULL); + + gvir_config_object_set_attribute(GVIR_CONFIG_OBJECT(feature), + "name", name, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.h index 8bb2f2b..f87693f 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu-feature.h @@ -61,6 +61,9 @@ GType gvir_config_capabilities_cpu_feature_get_type(void); const gchar * gvir_config_capabilities_cpu_feature_get_name(GVirConfigCapabilitiesCpuFeature *feature); +void +gvir_config_capabilities_cpu_feature_set_name(GVirConfigCapabilitiesCpuFeature *feature, + const gchar *name); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index d412d56..f66a22e 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -397,6 +397,7 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_cpu_feature_get_type; gvir_config_capabilities_cpu_feature_get_name; + gvir_config_capabilities_cpu_feature_set_name; gvir_config_capabilities_cpu_topology_get_type; gvir_config_capabilities_cpu_topology_get_cores; -- 1.7.10.4

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> API to handle 'domain/cpu/feature' nodes. --- libvirt-gconfig/Makefile.am | 2 + .../libvirt-gconfig-domain-cpu-feature.c | 100 ++++++++++++++++++++ .../libvirt-gconfig-domain-cpu-feature.h | 81 ++++++++++++++++ libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 7 ++ 5 files changed, 191 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 19aa6ba..7f0ea3b 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -33,6 +33,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-console.h \ libvirt-gconfig-domain-controller.h \ libvirt-gconfig-domain-controller-usb.h \ + libvirt-gconfig-domain-cpu-feature.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ libvirt-gconfig-domain-filesys.h \ @@ -101,6 +102,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-console.c \ libvirt-gconfig-domain-controller.c \ libvirt-gconfig-domain-controller-usb.c \ + libvirt-gconfig-domain-cpu-feature.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ libvirt-gconfig-domain-filesys.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.c b/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.c new file mode 100644 index 0000000..55dd375 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.c @@ -0,0 +1,100 @@ +/* + * libvirt-gconfig-capabilities-cpu-feature.c: libvirt domain CPU feature + * + * Copyright (C) 2008 Daniel P. Berrange + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_DOMAIN_CPU_FEATURE_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, GVirConfigDomainCpuFeaturePrivate)) + +struct _GVirConfigDomainCpuFeaturePrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainCpuFeature, gvir_config_domain_cpu_feature, GVIR_CONFIG_TYPE_CAPABILITIES_CPU_FEATURE); + +static void gvir_config_domain_cpu_feature_class_init(GVirConfigDomainCpuFeatureClass *klass) +{ + g_type_class_add_private(klass, sizeof(GVirConfigDomainCpuFeaturePrivate)); +} + +static void gvir_config_domain_cpu_feature_init(GVirConfigDomainCpuFeature *feature) +{ + g_debug("Init GVirConfigDomainCpuFeature=%p", feature); + + feature->priv = GVIR_CONFIG_DOMAIN_CPU_FEATURE_GET_PRIVATE(feature); +} + +GVirConfigDomainCpuFeature *gvir_config_domain_cpu_feature_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, + "feature", + NULL); + + return GVIR_CONFIG_DOMAIN_CPU_FEATURE(object); +} + +GVirConfigDomainCpuFeature * +gvir_config_domain_cpu_feature_new_from_xml(const gchar *xml, GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, + "feature", + NULL, + xml, + error); + + return GVIR_CONFIG_DOMAIN_CPU_FEATURE(object); +} + +GVirConfigDomainCpuFeaturePolicy +gvir_config_domain_cpu_feature_get_policy(GVirConfigDomainCpuFeature *feature) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE(feature), + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE); + + return gvir_config_object_get_attribute_genum + (GVIR_CONFIG_OBJECT(feature), + NULL, + "policy", + GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE_POLICY, + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE); +} + +void gvir_config_domain_cpu_feature_set_policy(GVirConfigDomainCpuFeature *feature, + GVirConfigDomainCpuFeaturePolicy policy) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE(feature)); + + gvir_config_object_set_attribute_with_type + (GVIR_CONFIG_OBJECT(feature), + "policy", GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE_POLICY, policy, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h b/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h new file mode 100644 index 0000000..e190380 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h @@ -0,0 +1,81 @@ +/* + * libvirt-gconfig-capabilities-cpu-feature.h: libvirt domain CPU feature + * + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@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_CPU_FEATURE_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_CPU_FEATURE_H__ + +G_BEGIN_DECLS + +#define GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE (gvir_config_domain_cpu_feature_get_type ()) +#define GVIR_CONFIG_DOMAIN_CPU_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, GVirConfigDomainCpuFeature)) +#define GVIR_CONFIG_DOMAIN_CPU_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, GVirConfigDomainCpuFeatureClass)) +#define GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE)) +#define GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE)) +#define GVIR_CONFIG_DOMAIN_CPU_FEATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, GVirConfigDomainCpuFeatureClass)) + +typedef struct _GVirConfigDomainCpuFeature GVirConfigDomainCpuFeature; +typedef struct _GVirConfigDomainCpuFeaturePrivate GVirConfigDomainCpuFeaturePrivate; +typedef struct _GVirConfigDomainCpuFeatureClass GVirConfigDomainCpuFeatureClass; + +struct _GVirConfigDomainCpuFeature +{ + GVirConfigCapabilitiesCpu parent; + + GVirConfigDomainCpuFeaturePrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainCpuFeatureClass +{ + GVirConfigCapabilitiesCpuClass parent_class; + + gpointer padding[20]; +}; + +typedef enum { + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_FORCE, + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE, + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_OPTIONAL, + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_DISABLE, + GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_FORBID +} GVirConfigDomainCpuFeaturePolicy; + +GType gvir_config_domain_cpu_feature_get_type(void); +GVirConfigDomainCpuFeature *gvir_config_domain_cpu_feature_new(void); +GVirConfigDomainCpuFeature * +gvir_config_domain_cpu_feature_new_from_xml(const gchar *xml, GError **error); + +void +gvir_config_domain_cpu_feature_set_policy(GVirConfigDomainCpuFeature *feature, + GVirConfigDomainCpuFeaturePolicy policy); +GVirConfigDomainCpuFeaturePolicy +gvir_config_domain_cpu_feature_get_policy(GVirConfigDomainCpuFeature *feature); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_CPU_FEATURE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 1e69962..41c3d80 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -50,6 +50,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-console.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller-usb.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> #include <libvirt-gconfig/libvirt-gconfig-domain-filesys.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index f66a22e..fb93931 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -429,6 +429,13 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_host_get_type; gvir_config_capabilities_host_get_uuid; gvir_config_capabilities_host_get_cpu; + + gvir_config_domain_cpu_feature_get_type; + gvir_config_domain_cpu_feature_policy_get_type; + gvir_config_domain_cpu_feature_get_policy; + gvir_config_domain_cpu_feature_set_policy; + gvir_config_domain_cpu_feature_new; + gvir_config_domain_cpu_feature_new_from_xml; } LIBVIRT_GCONFIG_0.0.8; # .... define new API here using predicted next version number .... -- 1.7.10.4

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> --- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c | 28 +++++++++++++------- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h | 4 ++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c index e517a20..8d67a13 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c @@ -37,10 +37,14 @@ struct _GVirConfigCapabilitiesCpuPrivate G_DEFINE_TYPE(GVirConfigCapabilitiesCpu, gvir_config_capabilities_cpu, GVIR_CONFIG_TYPE_OBJECT); +GList * +_gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu); static void gvir_config_capabilities_cpu_class_init(GVirConfigCapabilitiesCpuClass *klass) { g_type_class_add_private(klass, sizeof(GVirConfigCapabilitiesCpuPrivate)); + + klass->get_features = _gvir_config_capabilities_cpu_get_features; } static void gvir_config_capabilities_cpu_init(GVirConfigCapabilitiesCpu *cpu) @@ -98,16 +102,8 @@ static gboolean add_feature(xmlNodePtr node, gpointer opaque) return TRUE; } -/** - * gvir_config_capabilities_cpu_get_features: - * - * Gets the features of this CPU. - * - * Returns: (element-type LibvirtGConfig.CapabilitiesCpuFeature) (transfer full): - * a newly allocated #GList of #GVirConfigCapabilitiesCpuFeature. - */ GList * -gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +_gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) { struct GetFeatureData data; @@ -128,6 +124,20 @@ gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) } /** + * gvir_config_capabilities_cpu_get_features: + * + * Gets the features of this CPU. + * + * Returns: (element-type LibvirtGConfig.CapabilitiesCpuFeature) (transfer full): + * a newly allocated #GList of #GVirConfigCapabilitiesCpuFeature. + */ +GList * +gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +{ + return GVIR_CONFIG_CAPABILITIES_CPU_GET_CLASS(cpu)->get_features(cpu); +} + +/** * gvir_config_capabilities_cpu_get_topology: * * Gets the topology of the cpu. diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h index 67fe607..d2b7094 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h @@ -57,7 +57,9 @@ struct _GVirConfigCapabilitiesCpuClass { GVirConfigObjectClass parent_class; - gpointer padding[20]; + GList* (* get_features) (GVirConfigCapabilitiesCpu *cpu); + + gpointer padding[19]; }; GType gvir_config_capabilities_cpu_get_type(void); -- 1.7.10.4

On Sat, Jun 23, 2012 at 10:18:02PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
--- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c | 28 +++++++++++++------- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h | 4 ++- 2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c index e517a20..8d67a13 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c @@ -37,10 +37,14 @@ struct _GVirConfigCapabilitiesCpuPrivate
G_DEFINE_TYPE(GVirConfigCapabilitiesCpu, gvir_config_capabilities_cpu, GVIR_CONFIG_TYPE_OBJECT);
+GList * +_gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu);
this should be static.
static void gvir_config_capabilities_cpu_class_init(GVirConfigCapabilitiesCpuClass *klass) { g_type_class_add_private(klass, sizeof(GVirConfigCapabilitiesCpuPrivate)); + + klass->get_features = _gvir_config_capabilities_cpu_get_features; }
static void gvir_config_capabilities_cpu_init(GVirConfigCapabilitiesCpu *cpu) @@ -98,16 +102,8 @@ static gboolean add_feature(xmlNodePtr node, gpointer opaque) return TRUE; }
-/** - * gvir_config_capabilities_cpu_get_features: - * - * Gets the features of this CPU. - * - * Returns: (element-type LibvirtGConfig.CapabilitiesCpuFeature) (transfer full): - * a newly allocated #GList of #GVirConfigCapabilitiesCpuFeature. - */ GList *
static GList *
-gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +_gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) { struct GetFeatureData data;
@@ -128,6 +124,20 @@ gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) }
/** + * gvir_config_capabilities_cpu_get_features: + * + * Gets the features of this CPU. + * + * Returns: (element-type LibvirtGConfig.CapabilitiesCpuFeature) (transfer full): + * a newly allocated #GList of #GVirConfigCapabilitiesCpuFeature. + */ +GList * +gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +{ + return GVIR_CONFIG_CAPABILITIES_CPU_GET_CLASS(cpu)->get_features(cpu); +} + +/** * gvir_config_capabilities_cpu_get_topology: * * Gets the topology of the cpu. diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h index 67fe607..d2b7094 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h @@ -57,7 +57,9 @@ struct _GVirConfigCapabilitiesCpuClass { GVirConfigObjectClass parent_class;
- gpointer padding[20]; + GList* (* get_features) (GVirConfigCapabilitiesCpu *cpu);
a bit too many spaces imo, libvirt-gobject-connection.h coding style is more like: GList *(*get_features)(GVirConfigCapabilitiesCpu *cpu); Christophe

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> API to handle 'domain/cpu' nodes. --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-cpu.c | 179 ++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-cpu.h | 88 +++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.c | 38 ++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 4 + libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 13 ++ 7 files changed, 325 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu.h diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 7f0ea3b..fa43f28 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -33,6 +33,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-console.h \ libvirt-gconfig-domain-controller.h \ libvirt-gconfig-domain-controller-usb.h \ + libvirt-gconfig-domain-cpu.h \ libvirt-gconfig-domain-cpu-feature.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ @@ -102,6 +103,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-console.c \ libvirt-gconfig-domain-controller.c \ libvirt-gconfig-domain-controller-usb.c \ + libvirt-gconfig-domain-cpu.c \ libvirt-gconfig-domain-cpu-feature.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu.c b/libvirt-gconfig/libvirt-gconfig-domain-cpu.c new file mode 100644 index 0000000..e238409 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu.c @@ -0,0 +1,179 @@ +/* + * libvirt-gconfig-domain-cpu.c: libvirt Domain CPU + * + * Copyright (C) 2008 Daniel P. Berrange + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_CAPABILITIES_CPU_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_CAPABILITIES_CPU, GVirConfigDomainCpuPrivate)) + +struct _GVirConfigDomainCpuPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainCpu, gvir_config_domain_cpu, GVIR_CONFIG_TYPE_CAPABILITIES_CPU); + +GList * +_gvir_config_domain_cpu_get_features(GVirConfigCapabilitiesCpu *cpu); + +static void gvir_config_domain_cpu_class_init(GVirConfigDomainCpuClass *klass) +{ + GVirConfigCapabilitiesCpuClass *capabilities_class; + + capabilities_class = GVIR_CONFIG_CAPABILITIES_CPU_CLASS(klass); + capabilities_class->get_features = _gvir_config_domain_cpu_get_features; + + g_type_class_add_private(klass, sizeof(GVirConfigDomainCpuPrivate)); +} + +static void gvir_config_domain_cpu_init(GVirConfigDomainCpu *cpu) +{ + g_debug("Init GVirConfigDomainCpu=%p", cpu); + + cpu->priv = GVIR_CONFIG_CAPABILITIES_CPU_GET_PRIVATE(cpu); +} + +GVirConfigDomainCpu *gvir_config_domain_cpu_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_CPU, "cpu", NULL); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +GVirConfigDomainCpu *gvir_config_domain_cpu_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_CPU, + "cpu", + NULL, + xml, + error); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +struct GetFeatureData { + GVirConfigXmlDoc *doc; + const gchar *schema; + GList *features; +}; + +static gboolean add_feature(xmlNodePtr node, gpointer opaque) +{ + struct GetFeatureData* data = (struct GetFeatureData*)opaque; + GVirConfigObject *feature; + + if (g_strcmp0((const gchar *)node->name, "feature") != 0) + return TRUE; + + feature = gvir_config_object_new_from_tree + (GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, + data->doc, + data->schema, + node); + if (feature != NULL) + data->features = g_list_append(data->features, feature); + else + g_debug("Failed to parse %s node", node->name); + + return TRUE; +} + +GList * +_gvir_config_domain_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +{ + struct GetFeatureData data; + + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), NULL); + + data.schema = gvir_config_object_get_schema(GVIR_CONFIG_OBJECT(cpu)); + g_object_get(G_OBJECT(cpu), "doc", &data.doc, NULL); + g_return_val_if_fail(data.doc != NULL, NULL); + data.features = NULL; + + gvir_config_object_foreach_child(GVIR_CONFIG_OBJECT(cpu), + NULL, + add_feature, + &data); + g_clear_object(&data.doc); + + return data.features; +} + +GVirConfigDomainCpuMatchPolicy +gvir_config_domain_cpu_get_match_policy(GVirConfigDomainCpu *cpu) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT); + + return gvir_config_object_get_attribute_genum + (GVIR_CONFIG_OBJECT(cpu), + NULL, + "match", + GVIR_CONFIG_TYPE_DOMAIN_CPU_MATCH_POLICY, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT); +} + +void gvir_config_domain_cpu_set_match_policy(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMatchPolicy policy) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_set_attribute_with_type + (GVIR_CONFIG_OBJECT(cpu), + "match", GVIR_CONFIG_TYPE_DOMAIN_CPU_MATCH_POLICY, policy, + NULL); +} + +GVirConfigDomainCpuMode +gvir_config_domain_cpu_get_mode(GVirConfigDomainCpu *cpu) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM); + + return gvir_config_object_get_attribute_genum + (GVIR_CONFIG_OBJECT(cpu), + NULL, + "mode", + GVIR_CONFIG_TYPE_DOMAIN_CPU_MODE, + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM); +} + +void gvir_config_domain_cpu_set_mode(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMode mode) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_set_attribute_with_type + (GVIR_CONFIG_OBJECT(cpu), + "mode", GVIR_CONFIG_TYPE_DOMAIN_CPU_MODE, mode, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu.h b/libvirt-gconfig/libvirt-gconfig-domain-cpu.h new file mode 100644 index 0000000..0b14975 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu.h @@ -0,0 +1,88 @@ +/* + * libvirt-gconfig-domain-cpu.h: libvirt Domain CPU + * + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@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_CPU_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_CPU_H__ + +G_BEGIN_DECLS + +#define GVIR_CONFIG_TYPE_DOMAIN_CPU (gvir_config_domain_cpu_get_type ()) +#define GVIR_CONFIG_DOMAIN_CPU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpu)) +#define GVIR_CONFIG_DOMAIN_CPU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpuClass)) +#define GVIR_CONFIG_IS_DOMAIN_CPU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU)) +#define GVIR_CONFIG_IS_DOMAIN_CPU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU)) +#define GVIR_CONFIG_DOMAIN_CPU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpuClass)) + +typedef struct _GVirConfigDomainCpu GVirConfigDomainCpu; +typedef struct _GVirConfigDomainCpuPrivate GVirConfigDomainCpuPrivate; +typedef struct _GVirConfigDomainCpuClass GVirConfigDomainCpuClass; + +struct _GVirConfigDomainCpu +{ + GVirConfigCapabilitiesCpu parent; + + GVirConfigDomainCpuPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainCpuClass +{ + GVirConfigCapabilitiesCpuClass parent_class; + + gpointer padding[20]; +}; + +typedef enum { + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_MINIMUM, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT +} GVirConfigDomainCpuMatchPolicy; + +typedef enum { + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM, + GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_MODEL, + GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH +} GVirConfigDomainCpuMode; + +GType gvir_config_domain_cpu_get_type(void); +GVirConfigDomainCpu *gvir_config_domain_cpu_new(void); +GVirConfigDomainCpu *gvir_config_domain_cpu_new_from_xml(const gchar *xml, + GError **error); +void +gvir_config_domain_cpu_set_match_policy(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMatchPolicy policy); +GVirConfigDomainCpuMatchPolicy +gvir_config_domain_cpu_get_match_policy(GVirConfigDomainCpu *cpu); +void gvir_config_domain_cpu_set_mode(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMode mode); +GVirConfigDomainCpuMode +gvir_config_domain_cpu_get_mode(GVirConfigDomainCpu *cpu); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_CPU_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index fcb3172..2ca478f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -632,3 +632,41 @@ gchar *gvir_config_domain_get_custom_xml(GVirConfigDomain *domain, lookup_namespaced_node, &data); return gvir_config_xml_node_to_string(data.node); } + +/** + * gvir_config_domain_get_cpu: + * @domain: a #GVirConfigDomain + * + * Gets the CPU configuration of @domain + * + * Returns: (transfer full): A #GVirConfigDomainCpu. The returned object + * should be unreffed with g_object_unref() when no longer needed. + */ +GVirConfigDomainCpu *gvir_config_domain_get_cpu(GVirConfigDomain *domain) +{ + GVirConfigObject *object; + + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN(domain), NULL); + + object = gvir_config_object_get_child_with_type(GVIR_CONFIG_OBJECT(domain), + "cpu", + GVIR_CONFIG_TYPE_DOMAIN_CPU); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +/** + * gvir_config_domain_set_cpu: + * @domain: a #GVirConfigDomain + * @cpu: (allow-none): + */ +void gvir_config_domain_set_cpu(GVirConfigDomain *domain, + GVirConfigDomainCpu *cpu) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); + g_return_if_fail(cpu != NULL || GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), + "cpu", + GVIR_CONFIG_OBJECT(cpu)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index af8b86a..b9a0dce 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -31,6 +31,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-seclabel.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-cpu.h> G_BEGIN_DECLS @@ -137,6 +138,9 @@ gboolean gvir_config_domain_set_custom_xml(GVirConfigDomain *domain, GError **error); gchar *gvir_config_domain_get_custom_xml(GVirConfigDomain *domain, const gchar *ns_uri); +GVirConfigDomainCpu *gvir_config_domain_get_cpu(GVirConfigDomain *domain); +void gvir_config_domain_set_cpu(GVirConfigDomain *domain, + GVirConfigDomainCpu *cpu); G_END_DECLS diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 41c3d80..4b5ccbd 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -50,6 +50,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-console.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller-usb.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-cpu.h> #include <libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index fb93931..7eb0971 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -380,6 +380,8 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_domain_get_title; gvir_config_domain_set_title; gvir_config_domain_get_virt_type; + gvir_config_domain_get_cpu; + gvir_config_domain_set_cpu; gvir_config_domain_os_get_arch; gvir_config_domain_os_get_boot_devices; @@ -430,6 +432,17 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_host_get_uuid; gvir_config_capabilities_host_get_cpu; + gvir_config_domain_cpu_get_type; + gvir_config_domain_cpu_match_policy_get_type; + gvir_config_domain_cpu_mode_get_type; + gvir_config_domain_cpu_get_features; + gvir_config_domain_cpu_get_match_policy; + gvir_config_domain_cpu_set_match_policy; + gvir_config_domain_cpu_get_mode; + gvir_config_domain_cpu_set_mode; + gvir_config_domain_cpu_new; + gvir_config_domain_cpu_new_from_xml; + gvir_config_domain_cpu_feature_get_type; gvir_config_domain_cpu_feature_policy_get_type; gvir_config_domain_cpu_feature_get_policy; -- 1.7.10.4

On Sat, Jun 23, 2012 at 10:18:03PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
API to handle 'domain/cpu' nodes. --- libvirt-gconfig/Makefile.am | 2 + libvirt-gconfig/libvirt-gconfig-domain-cpu.c | 179 ++++++++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-cpu.h | 88 +++++++++++++ libvirt-gconfig/libvirt-gconfig-domain.c | 38 ++++++ libvirt-gconfig/libvirt-gconfig-domain.h | 4 + libvirt-gconfig/libvirt-gconfig.h | 1 + libvirt-gconfig/libvirt-gconfig.sym | 13 ++ 7 files changed, 325 insertions(+) create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu.c create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-cpu.h
diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am index 7f0ea3b..fa43f28 100644 --- a/libvirt-gconfig/Makefile.am +++ b/libvirt-gconfig/Makefile.am @@ -33,6 +33,7 @@ GCONFIG_HEADER_FILES = \ libvirt-gconfig-domain-console.h \ libvirt-gconfig-domain-controller.h \ libvirt-gconfig-domain-controller-usb.h \ + libvirt-gconfig-domain-cpu.h \ libvirt-gconfig-domain-cpu-feature.h \ libvirt-gconfig-domain-device.h \ libvirt-gconfig-domain-disk.h \ @@ -102,6 +103,7 @@ GCONFIG_SOURCE_FILES = \ libvirt-gconfig-domain-console.c \ libvirt-gconfig-domain-controller.c \ libvirt-gconfig-domain-controller-usb.c \ + libvirt-gconfig-domain-cpu.c \ libvirt-gconfig-domain-cpu-feature.c \ libvirt-gconfig-domain-device.c \ libvirt-gconfig-domain-disk.c \ diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu.c b/libvirt-gconfig/libvirt-gconfig-domain-cpu.c new file mode 100644 index 0000000..e238409 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu.c @@ -0,0 +1,179 @@ +/* + * libvirt-gconfig-domain-cpu.c: libvirt Domain CPU + * + * Copyright (C) 2008 Daniel P. Berrange + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@redhat.com> + */ + +#include <config.h> + +#include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-private.h" + +#define GVIR_CONFIG_CAPABILITIES_CPU_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_CAPABILITIES_CPU, GVirConfigDomainCpuPrivate))
missing s/CAPABILITIES/DOMAIN throughout this file
+ +struct _GVirConfigDomainCpuPrivate +{ + gboolean unused; +}; + +G_DEFINE_TYPE(GVirConfigDomainCpu, gvir_config_domain_cpu, GVIR_CONFIG_TYPE_CAPABILITIES_CPU); + +GList * +_gvir_config_domain_cpu_get_features(GVirConfigCapabilitiesCpu *cpu); + +static void gvir_config_domain_cpu_class_init(GVirConfigDomainCpuClass *klass) +{ + GVirConfigCapabilitiesCpuClass *capabilities_class; + + capabilities_class = GVIR_CONFIG_CAPABILITIES_CPU_CLASS(klass); + capabilities_class->get_features = _gvir_config_domain_cpu_get_features; + + g_type_class_add_private(klass, sizeof(GVirConfigDomainCpuPrivate)); +} + +static void gvir_config_domain_cpu_init(GVirConfigDomainCpu *cpu) +{ + g_debug("Init GVirConfigDomainCpu=%p", cpu); + + cpu->priv = GVIR_CONFIG_CAPABILITIES_CPU_GET_PRIVATE(cpu); +} + +GVirConfigDomainCpu *gvir_config_domain_cpu_new(void) +{ + GVirConfigObject *object; + + object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_CPU, "cpu", NULL); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +GVirConfigDomainCpu *gvir_config_domain_cpu_new_from_xml(const gchar *xml, + GError **error) +{ + GVirConfigObject *object; + + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_CPU, + "cpu", + NULL, + xml, + error); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +struct GetFeatureData { + GVirConfigXmlDoc *doc; + const gchar *schema; + GList *features; +}; + +static gboolean add_feature(xmlNodePtr node, gpointer opaque) +{ + struct GetFeatureData* data = (struct GetFeatureData*)opaque; + GVirConfigObject *feature; + + if (g_strcmp0((const gchar *)node->name, "feature") != 0) + return TRUE; + + feature = gvir_config_object_new_from_tree + (GVIR_CONFIG_TYPE_DOMAIN_CPU_FEATURE, + data->doc, + data->schema, + node); + if (feature != NULL) + data->features = g_list_append(data->features, feature); + else + g_debug("Failed to parse %s node", node->name); + + return TRUE; +} + +GList *
static GList * ...
+_gvir_config_domain_cpu_get_features(GVirConfigCapabilitiesCpu *cpu) +{ + struct GetFeatureData data; + + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), NULL); + + data.schema = gvir_config_object_get_schema(GVIR_CONFIG_OBJECT(cpu)); + g_object_get(G_OBJECT(cpu), "doc", &data.doc, NULL); + g_return_val_if_fail(data.doc != NULL, NULL); + data.features = NULL; + + gvir_config_object_foreach_child(GVIR_CONFIG_OBJECT(cpu), + NULL, + add_feature, + &data); + g_clear_object(&data.doc); + + return data.features; +} + +GVirConfigDomainCpuMatchPolicy +gvir_config_domain_cpu_get_match_policy(GVirConfigDomainCpu *cpu) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT); + + return gvir_config_object_get_attribute_genum + (GVIR_CONFIG_OBJECT(cpu), + NULL, + "match", + GVIR_CONFIG_TYPE_DOMAIN_CPU_MATCH_POLICY, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT); +} + +void gvir_config_domain_cpu_set_match_policy(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMatchPolicy policy) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_set_attribute_with_type + (GVIR_CONFIG_OBJECT(cpu), + "match", GVIR_CONFIG_TYPE_DOMAIN_CPU_MATCH_POLICY, policy, + NULL); +} + +GVirConfigDomainCpuMode +gvir_config_domain_cpu_get_mode(GVirConfigDomainCpu *cpu) +{ + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu), + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM); + + return gvir_config_object_get_attribute_genum + (GVIR_CONFIG_OBJECT(cpu), + NULL, + "mode", + GVIR_CONFIG_TYPE_DOMAIN_CPU_MODE, + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM); +} + +void gvir_config_domain_cpu_set_mode(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMode mode) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_set_attribute_with_type + (GVIR_CONFIG_OBJECT(cpu), + "mode", GVIR_CONFIG_TYPE_DOMAIN_CPU_MODE, mode, + NULL); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-cpu.h b/libvirt-gconfig/libvirt-gconfig-domain-cpu.h new file mode 100644 index 0000000..0b14975 --- /dev/null +++ b/libvirt-gconfig/libvirt-gconfig-domain-cpu.h @@ -0,0 +1,88 @@ +/* + * libvirt-gconfig-domain-cpu.h: libvirt Domain CPU + * + * Copyright (C) 2010-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 + * + * Authors: Zeeshan Ali <zeenix@redhat.com> + * Daniel P. Berrange <berrange@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_CPU_H__ +#define __LIBVIRT_GCONFIG_DOMAIN_CPU_H__ + +G_BEGIN_DECLS + +#define GVIR_CONFIG_TYPE_DOMAIN_CPU (gvir_config_domain_cpu_get_type ()) +#define GVIR_CONFIG_DOMAIN_CPU(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpu)) +#define GVIR_CONFIG_DOMAIN_CPU_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpuClass)) +#define GVIR_CONFIG_IS_DOMAIN_CPU(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU)) +#define GVIR_CONFIG_IS_DOMAIN_CPU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_CPU)) +#define GVIR_CONFIG_DOMAIN_CPU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_CPU, GVirConfigDomainCpuClass)) + +typedef struct _GVirConfigDomainCpu GVirConfigDomainCpu; +typedef struct _GVirConfigDomainCpuPrivate GVirConfigDomainCpuPrivate; +typedef struct _GVirConfigDomainCpuClass GVirConfigDomainCpuClass; + +struct _GVirConfigDomainCpu +{ + GVirConfigCapabilitiesCpu parent; + + GVirConfigDomainCpuPrivate *priv; + + /* Do not add fields to this struct */ +}; + +struct _GVirConfigDomainCpuClass +{ + GVirConfigCapabilitiesCpuClass parent_class; + + gpointer padding[20]; +}; + +typedef enum { + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_MINIMUM, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_EXACT, + GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT +} GVirConfigDomainCpuMatchPolicy; + +typedef enum { + GVIR_CONFIG_DOMAIN_CPU_MODE_CUSTOM, + GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_MODEL, + GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH +} GVirConfigDomainCpuMode; + +GType gvir_config_domain_cpu_get_type(void); +GVirConfigDomainCpu *gvir_config_domain_cpu_new(void); +GVirConfigDomainCpu *gvir_config_domain_cpu_new_from_xml(const gchar *xml, + GError **error); +void +gvir_config_domain_cpu_set_match_policy(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMatchPolicy policy); +GVirConfigDomainCpuMatchPolicy +gvir_config_domain_cpu_get_match_policy(GVirConfigDomainCpu *cpu); +void gvir_config_domain_cpu_set_mode(GVirConfigDomainCpu *cpu, + GVirConfigDomainCpuMode mode); +GVirConfigDomainCpuMode +gvir_config_domain_cpu_get_mode(GVirConfigDomainCpu *cpu); + +G_END_DECLS + +#endif /* __LIBVIRT_GCONFIG_DOMAIN_CPU_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig-domain.c b/libvirt-gconfig/libvirt-gconfig-domain.c index fcb3172..2ca478f 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.c +++ b/libvirt-gconfig/libvirt-gconfig-domain.c @@ -632,3 +632,41 @@ gchar *gvir_config_domain_get_custom_xml(GVirConfigDomain *domain, lookup_namespaced_node, &data); return gvir_config_xml_node_to_string(data.node); } + +/** + * gvir_config_domain_get_cpu: + * @domain: a #GVirConfigDomain + * + * Gets the CPU configuration of @domain + * + * Returns: (transfer full): A #GVirConfigDomainCpu. The returned object + * should be unreffed with g_object_unref() when no longer needed. + */ +GVirConfigDomainCpu *gvir_config_domain_get_cpu(GVirConfigDomain *domain) +{ + GVirConfigObject *object; + + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN(domain), NULL); + + object = gvir_config_object_get_child_with_type(GVIR_CONFIG_OBJECT(domain), + "cpu", + GVIR_CONFIG_TYPE_DOMAIN_CPU); + + return GVIR_CONFIG_DOMAIN_CPU(object); +} + +/** + * gvir_config_domain_set_cpu: + * @domain: a #GVirConfigDomain + * @cpu: (allow-none): + */ +void gvir_config_domain_set_cpu(GVirConfigDomain *domain, + GVirConfigDomainCpu *cpu) +{ + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN(domain)); + g_return_if_fail(cpu != NULL || GVIR_CONFIG_IS_DOMAIN_CPU(cpu)); + + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(domain), + "cpu", + GVIR_CONFIG_OBJECT(cpu)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain.h b/libvirt-gconfig/libvirt-gconfig-domain.h index af8b86a..b9a0dce 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain.h +++ b/libvirt-gconfig/libvirt-gconfig-domain.h @@ -31,6 +31,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-os.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-seclabel.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-cpu.h>
G_BEGIN_DECLS
@@ -137,6 +138,9 @@ gboolean gvir_config_domain_set_custom_xml(GVirConfigDomain *domain, GError **error); gchar *gvir_config_domain_get_custom_xml(GVirConfigDomain *domain, const gchar *ns_uri); +GVirConfigDomainCpu *gvir_config_domain_get_cpu(GVirConfigDomain *domain); +void gvir_config_domain_set_cpu(GVirConfigDomain *domain, + GVirConfigDomainCpu *cpu);
G_END_DECLS
diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h index 41c3d80..4b5ccbd 100644 --- a/libvirt-gconfig/libvirt-gconfig.h +++ b/libvirt-gconfig/libvirt-gconfig.h @@ -50,6 +50,7 @@ #include <libvirt-gconfig/libvirt-gconfig-domain-console.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller.h> #include <libvirt-gconfig/libvirt-gconfig-domain-controller-usb.h> +#include <libvirt-gconfig/libvirt-gconfig-domain-cpu.h> #include <libvirt-gconfig/libvirt-gconfig-domain-cpu-feature.h> #include <libvirt-gconfig/libvirt-gconfig-domain-device.h> #include <libvirt-gconfig/libvirt-gconfig-domain-disk.h> diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index fb93931..7eb0971 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -380,6 +380,8 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_domain_get_title; gvir_config_domain_set_title; gvir_config_domain_get_virt_type; + gvir_config_domain_get_cpu; + gvir_config_domain_set_cpu;
gvir_config_domain_os_get_arch; gvir_config_domain_os_get_boot_devices; @@ -430,6 +432,17 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_host_get_uuid; gvir_config_capabilities_host_get_cpu;
+ gvir_config_domain_cpu_get_type; + gvir_config_domain_cpu_match_policy_get_type; + gvir_config_domain_cpu_mode_get_type; + gvir_config_domain_cpu_get_features; + gvir_config_domain_cpu_get_match_policy; + gvir_config_domain_cpu_set_match_policy; + gvir_config_domain_cpu_get_mode; + gvir_config_domain_cpu_set_mode; + gvir_config_domain_cpu_new; + gvir_config_domain_cpu_new_from_xml; + gvir_config_domain_cpu_feature_get_type; gvir_config_domain_cpu_feature_policy_get_type; gvir_config_domain_cpu_feature_get_policy; -- 1.7.10.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> --- libvirt-gconfig/tests/test-domain-create.c | 55 ++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index d22850d..c3e627b 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -173,6 +173,61 @@ int main(int argc, char **argv) gvir_config_domain_set_os(domain, os); g_object_unref(G_OBJECT(os)); + /* cpu node */ + GVirConfigDomainCpu *cpu; + + cpu = gvir_config_domain_cpu_new(); + + /* cpu/feature nodes */ + GVirConfigDomainCpuFeature *feature; + GList *cpu_features = NULL; + + gvir_config_domain_cpu_set_match_policy(cpu, GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT); + gvir_config_domain_cpu_set_mode(cpu, GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH); + feature = gvir_config_domain_cpu_feature_new(); + gvir_config_capabilities_cpu_feature_set_name(GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature), + "foo"); + gvir_config_domain_cpu_feature_set_policy(feature, GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE); + gvir_config_capabilities_cpu_add_feature(GVIR_CONFIG_CAPABILITIES_CPU(cpu), + GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature)); + g_object_unref(feature); + + /* cpu/topology nodes */ + GVirConfigCapabilitiesCpuTopology *topology; + + topology = gvir_config_capabilities_cpu_topology_new(); + gvir_config_capabilities_cpu_topology_set_cores(topology, 1); + gvir_config_capabilities_cpu_topology_set_sockets(topology, 2); + gvir_config_capabilities_cpu_topology_set_threads(topology, 3); + gvir_config_capabilities_cpu_set_topology(GVIR_CONFIG_CAPABILITIES_CPU(cpu), + topology); + g_object_unref(topology); + gvir_config_domain_set_cpu(domain, cpu); + g_object_unref(cpu); + + cpu = gvir_config_domain_get_cpu(domain); + g_assert(gvir_config_domain_cpu_get_match_policy(cpu) == GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT); + g_assert(gvir_config_domain_cpu_get_mode(cpu) == GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH); + g_assert(cpu != NULL); + g_assert(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu)); + + cpu_features = gvir_config_capabilities_cpu_get_features(GVIR_CONFIG_CAPABILITIES_CPU(cpu)); + g_assert(g_list_length(cpu_features) >= 1); + g_assert(GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE(cpu_features->data)); + feature = GVIR_CONFIG_DOMAIN_CPU_FEATURE(cpu_features->data); + g_str_const_check(gvir_config_capabilities_cpu_feature_get_name + (GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature)), "foo"); + g_assert(gvir_config_domain_cpu_feature_get_policy(feature) == GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE); + g_list_free_full(cpu_features, g_object_unref); + + topology = gvir_config_capabilities_cpu_get_topology(GVIR_CONFIG_CAPABILITIES_CPU(cpu)); + g_assert(topology != NULL); + g_assert(gvir_config_capabilities_cpu_topology_get_cores(topology) == 1); + g_assert(gvir_config_capabilities_cpu_topology_get_sockets(topology) == 2); + g_assert(gvir_config_capabilities_cpu_topology_get_threads(topology) == 3); + g_object_unref(topology); + g_object_unref(cpu); + /* disk node */ GVirConfigDomainDisk *disk; -- 1.7.10.4

On Sat, Jun 23, 2012 at 10:17:57PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
- gvir_config_capabilities_cpu_add_feature - gvir_config_capabilities_cpu_set_topology
As I understand it, the capabilities XML is read-only, the only reason for these setters to exist is for use with GVirConfigDomainCpu which is added later in this patch set. I think I'd put the setters in this new class even if this makes the API asymetric (getters in one class, setters in another). Christophe
--- libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c | 32 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h | 6 ++++ libvirt-gconfig/libvirt-gconfig.sym | 2 ++ 3 files changed, 40 insertions(+)
diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c index df77364..e517a20 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.c @@ -56,6 +56,21 @@ gvir_config_capabilities_cpu_get_arch(GVirConfigCapabilitiesCpu *cpu) return gvir_config_object_get_node_content(GVIR_CONFIG_OBJECT(cpu), "arch"); }
+/** + * gvir_config_capabilities_cpu_add_feature: + * + * Adds a new feature to CPU. + */ +void gvir_config_capabilities_cpu_add_feature(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuFeature *feature) +{ + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu)); + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU_FEATURE(feature)); + + gvir_config_object_attach_add(GVIR_CONFIG_OBJECT(cpu), + GVIR_CONFIG_OBJECT(feature)); +} + struct GetFeatureData { GVirConfigXmlDoc *doc; const gchar *schema; @@ -133,3 +148,20 @@ gvir_config_capabilities_cpu_get_topology(GVirConfigCapabilitiesCpu *cpu)
return GVIR_CONFIG_CAPABILITIES_CPU_TOPOLOGY(object); } + +/** + * gvir_config_capabilities_cpu_set_topology: + * + * Sets the topology of the cpu. + */ +void +gvir_config_capabilities_cpu_set_topology(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuTopology *topology) +{ + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu)); + g_return_if_fail(GVIR_CONFIG_IS_CAPABILITIES_CPU_TOPOLOGY(topology)); + + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(cpu), + "topology", + GVIR_CONFIG_OBJECT(topology)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h index 4d896ef..67fe607 100644 --- a/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h +++ b/libvirt-gconfig/libvirt-gconfig-capabilities-cpu.h @@ -29,6 +29,7 @@ #define __LIBVIRT_GCONFIG_CAPABILITIES_CPU_H__
#include "libvirt-gconfig-capabilities-cpu-topology.h" +#include "libvirt-gconfig-capabilities-cpu-feature.h"
G_BEGIN_DECLS
@@ -63,10 +64,15 @@ GType gvir_config_capabilities_cpu_get_type(void);
const gchar * gvir_config_capabilities_cpu_get_arch(GVirConfigCapabilitiesCpu *cpu); +void gvir_config_capabilities_cpu_add_feature(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuFeature *feature); GList * gvir_config_capabilities_cpu_get_features(GVirConfigCapabilitiesCpu *cpu); GVirConfigCapabilitiesCpuTopology * gvir_config_capabilities_cpu_get_topology(GVirConfigCapabilitiesCpu *cpu); +void +gvir_config_capabilities_cpu_set_topology(GVirConfigCapabilitiesCpu *cpu, + GVirConfigCapabilitiesCpuTopology *topology);
G_END_DECLS
diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index 5473148..a9e5da5 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -389,9 +389,11 @@ LIBVIRT_GCONFIG_0.0.9 { gvir_config_capabilities_get_guests;
gvir_config_capabilities_cpu_get_type; + gvir_config_capabilities_cpu_add_feature; gvir_config_capabilities_cpu_get_arch; gvir_config_capabilities_cpu_get_features; gvir_config_capabilities_cpu_get_topology; + gvir_config_capabilities_cpu_set_topology;
gvir_config_capabilities_cpu_feature_get_type; gvir_config_capabilities_cpu_feature_get_name; -- 1.7.10.4
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Mon, Jun 25, 2012 at 01:34:41PM +0200, Christophe Fergeau wrote:
On Sat, Jun 23, 2012 at 10:17:57PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
- gvir_config_capabilities_cpu_add_feature - gvir_config_capabilities_cpu_set_topology
As I understand it, the capabilities XML is read-only, the only reason for these setters to exist is for use with GVirConfigDomainCpu which is added later in this patch set. I think I'd put the setters in this new class even if this makes the API asymetric (getters in one class, setters in another).
Yes & no. Technically you are correct that the capabilities XML is readonly, however, when using the test driver in libvirt, it is possible to pass a custom XML document fully describing the capabilities that the test driver should return. Thus it is useful to have setters in the GVirConfigCapabilities class Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On Mon, Jun 25, 2012 at 12:37:48PM +0100, Daniel P. Berrange wrote:
On Mon, Jun 25, 2012 at 01:34:41PM +0200, Christophe Fergeau wrote:
On Sat, Jun 23, 2012 at 10:17:57PM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
- gvir_config_capabilities_cpu_add_feature - gvir_config_capabilities_cpu_set_topology
As I understand it, the capabilities XML is read-only, the only reason for these setters to exist is for use with GVirConfigDomainCpu which is added later in this patch set. I think I'd put the setters in this new class even if this makes the API asymetric (getters in one class, setters in another).
Yes & no. Technically you are correct that the capabilities XML is readonly, however, when using the test driver in libvirt, it is possible to pass a custom XML document fully describing the capabilities that the test driver should return. Thus it is useful to have setters in the GVirConfigCapabilities class
OK, thanks for the clarification! Christophe
participants (3)
-
Christophe Fergeau
-
Daniel P. Berrange
-
Zeeshan Ali (Khattak)