On Wed, Oct 30, 2013 at 10:52:19AM +0100, Christophe Fergeau wrote: > ACK > > Do you have push access to libvirt git repos? No I do not. If you want to go that route my github username is 'imain'. It's fine either way though, you can just push this if you like. Ian > Christophe > > On Tue, Oct 29, 2013 at 12:13:38PM -0700, Ian Main wrote: > > This patch adds support for setting filterref's on interfaces. Also > > supported are parameters to the filterref's. > > > > V2: > > > > - alphabetical orderized (don't look it up!) Makefile.am > > - s/set_filter/set_name/ s/get_filter/get_name/ > > - remove trailing whitespace. > > - fix missing line. > > - add return_val_if_fail check. > > - moved qcow fix in demo to a new patch. > > - fixed new_from_xml(). > > > > V3: > > > > - added g_debug in add_filterref_parameter(); > > - more fixing new_from_xml(). > > - orderized (I like this word now) libvirt-gconfig.h includes. > > > > Signed-off-by: Ian Main <imain@xxxxxxxxxx> > > --- > > examples/config-demo.py | 7 + > > libvirt-gconfig/Makefile.am | 4 + > > ...-gconfig-domain-interface-filterref-parameter.c | 101 +++++++++++++ > > ...-gconfig-domain-interface-filterref-parameter.h | 75 ++++++++++ > > .../libvirt-gconfig-domain-interface-filterref.c | 159 +++++++++++++++++++++ > > .../libvirt-gconfig-domain-interface-filterref.h | 76 ++++++++++ > > libvirt-gconfig/libvirt-gconfig-domain-interface.c | 41 ++++++ > > libvirt-gconfig/libvirt-gconfig-domain-interface.h | 5 + > > libvirt-gconfig/libvirt-gconfig.h | 2 + > > libvirt-gconfig/libvirt-gconfig.sym | 18 +++ > > 10 files changed, 488 insertions(+) > > create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.c > > create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.h > > create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.c > > create mode 100644 libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h > > > > diff --git a/examples/config-demo.py b/examples/config-demo.py > > index 09b9e89..367d99a 100644 > > --- a/examples/config-demo.py > > +++ b/examples/config-demo.py > > @@ -35,6 +35,13 @@ domain.add_device(disk) > > > > interface = LibvirtGConfig.DomainInterfaceNetwork.new() > > interface.set_source("default") > > +filterref = LibvirtGConfig.DomainInterfaceFilterref.new() > > +filterref.set_name("clean-traffic") > > +parameter = LibvirtGConfig.DomainInterfaceFilterrefParameter.new() > > +parameter.set_name("IP") > > +parameter.set_value("205.23.12.40") > > +filterref.add_parameter(parameter) > > +interface.set_filterref(filterref) > > domain.add_device(interface) > > > > interface = LibvirtGConfig.DomainInterfaceUser.new() > > diff --git a/libvirt-gconfig/Makefile.am b/libvirt-gconfig/Makefile.am > > index 35dc978..0793da1 100644 > > --- a/libvirt-gconfig/Makefile.am > > +++ b/libvirt-gconfig/Makefile.am > > @@ -47,6 +47,8 @@ GCONFIG_HEADER_FILES = \ > > libvirt-gconfig-domain-input.h \ > > libvirt-gconfig-domain-interface.h \ > > libvirt-gconfig-domain-interface-bridge.h \ > > + libvirt-gconfig-domain-interface-filterref.h \ > > + libvirt-gconfig-domain-interface-filterref-parameter.h \ > > libvirt-gconfig-domain-interface-network.h \ > > libvirt-gconfig-domain-interface-user.h \ > > libvirt-gconfig-domain-memballoon.h \ > > @@ -129,6 +131,8 @@ GCONFIG_SOURCE_FILES = \ > > libvirt-gconfig-domain-input.c \ > > libvirt-gconfig-domain-interface.c \ > > libvirt-gconfig-domain-interface-bridge.c \ > > + libvirt-gconfig-domain-interface-filterref.c \ > > + libvirt-gconfig-domain-interface-filterref-parameter.c \ > > libvirt-gconfig-domain-interface-network.c \ > > libvirt-gconfig-domain-interface-user.c \ > > libvirt-gconfig-domain-memballoon.c \ > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.c b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.c > > new file mode 100644 > > index 0000000..e697e86 > > --- /dev/null > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.c > > @@ -0,0 +1,101 @@ > > +/* > > + * libvirt-gconfig-domain-interface-filterref-parameter.c: > > + * libvirt filterref parameters > > + * > > + * Copyright (C) 2013 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, see > > + * <http://www.gnu.org/licenses/>. > > + * > > + * Authors: Ian Main <imain@xxxxxxxxxx> > > + * Daniel P. Berrange <berrange@xxxxxxxxxx> > > + */ > > + > > +#include <config.h> > > + > > +#include "libvirt-gconfig/libvirt-gconfig.h" > > +#include "libvirt-gconfig/libvirt-gconfig-private.h" > > + > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_GET_PRIVATE(obj) \ > > + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, GVirConfigDomainInterfaceFilterrefParameterPrivate)) > > + > > +struct _GVirConfigDomainInterfaceFilterrefParameterPrivate > > +{ > > + gboolean unused; > > +}; > > + > > +G_DEFINE_TYPE(GVirConfigDomainInterfaceFilterrefParameter, gvir_config_domain_interface_filterref_parameter, GVIR_CONFIG_TYPE_OBJECT); > > + > > +static void gvir_config_domain_interface_filterref_parameter_class_init(GVirConfigDomainInterfaceFilterrefParameterClass *klass) > > +{ > > + g_type_class_add_private(klass, sizeof(GVirConfigDomainInterfaceFilterrefParameterPrivate)); > > +} > > + > > +static void gvir_config_domain_interface_filterref_parameter_init(GVirConfigDomainInterfaceFilterrefParameter *parameter) > > +{ > > + g_debug("Init GVirConfigDomainInterfaceFilterrefParameter=%p", parameter); > > + > > + parameter->priv = GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_GET_PRIVATE(parameter); > > +} > > + > > +GVirConfigDomainInterfaceFilterrefParameter *gvir_config_domain_interface_filterref_parameter_new(void) > > +{ > > + GVirConfigObject *object; > > + > > + object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, > > + "parameter", NULL); > > + return GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER(object); > > +} > > + > > +GVirConfigDomainInterfaceFilterrefParameter * > > +gvir_config_domain_interface_filterref_parameter_new_from_xml(const gchar *xml, GError **error) > > +{ > > + GVirConfigObject *object; > > + > > + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, > > + "parameter", > > + NULL, > > + xml, > > + error); > > + > > + return GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER(object); > > +} > > + > > +void gvir_config_domain_interface_filterref_parameter_set_name(GVirConfigDomainInterfaceFilterrefParameter *parameter, const gchar *name) > > +{ > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_PARAMETER(parameter)); > > + gvir_config_object_set_attribute(GVIR_CONFIG_OBJECT(parameter), > > + "name", name, NULL); > > +} > > + > > +void gvir_config_domain_interface_filterref_parameter_set_value(GVirConfigDomainInterfaceFilterrefParameter *parameter, const gchar *value) > > +{ > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_PARAMETER(parameter)); > > + gvir_config_object_set_attribute(GVIR_CONFIG_OBJECT(parameter), > > + "value", value, NULL); > > +} > > + > > +const gchar *gvir_config_domain_interface_filterref_parameter_get_name(GVirConfigDomainInterfaceFilterrefParameter *parameter) > > +{ > > + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(parameter), > > + NULL, > > + "name"); > > +} > > +const gchar *gvir_config_domain_interface_filterref_parameter_get_value(GVirConfigDomainInterfaceFilterrefParameter *parameter) > > +{ > > + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(parameter), > > + NULL, > > + "value"); > > +} > > + > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.h b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.h > > new file mode 100644 > > index 0000000..a768c84 > > --- /dev/null > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.h > > @@ -0,0 +1,75 @@ > > +/* > > + * libvirt-gconfig-domain-interface-filterref-parameter.h: > > + * libvirt filterref parameters > > + * > > + * Copyright (C) 2013 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, see > > + * <http://www.gnu.org/licenses/>. > > + * > > + * Authors: Ian Main <imain@xxxxxxxxxx> > > + * Daniel P. Berrange <berrange@xxxxxxxxxx> > > + */ > > + > > +#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_INTERFACE_FILTERREF_PARAMETER_H__ > > +#define __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_H__ > > + > > +G_BEGIN_DECLS > > + > > +#define GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER (gvir_config_domain_interface_filterref_parameter_get_type ()) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, GVirConfigDomainInterfaceFilterrefParameter)) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, GVirConfigDomainInterfaceFilterrefParameterClass)) > > +#define GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_PARAMETER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER)) > > +#define GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_PARAMETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER)) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, GVirConfigDomainInterfaceFilterrefParameterClass)) > > + > > +typedef struct _GVirConfigDomainInterfaceFilterrefParameter GVirConfigDomainInterfaceFilterrefParameter; > > +typedef struct _GVirConfigDomainInterfaceFilterrefParameterPrivate GVirConfigDomainInterfaceFilterrefParameterPrivate; > > +typedef struct _GVirConfigDomainInterfaceFilterrefParameterClass GVirConfigDomainInterfaceFilterrefParameterClass; > > + > > +struct _GVirConfigDomainInterfaceFilterrefParameter > > +{ > > + GVirConfigObject parent; > > + > > + GVirConfigDomainInterfaceFilterrefParameterPrivate *priv; > > + > > + /* Do not add fields to this struct */ > > +}; > > + > > +struct _GVirConfigDomainInterfaceFilterrefParameterClass > > +{ > > + GVirConfigObjectClass parent_class; > > + > > + gpointer padding[20]; > > +}; > > + > > +GType gvir_config_domain_interface_filterref_parameter_get_type(void); > > + > > +GVirConfigDomainInterfaceFilterrefParameter *gvir_config_domain_interface_filterref_parameter_new(void); > > + > > +GVirConfigDomainInterfaceFilterrefParameter * > > +gvir_config_domain_interface_filterref_parameter_new_from_xml(const gchar *xml, GError **error); > > + > > +void gvir_config_domain_interface_filterref_parameter_set_name(GVirConfigDomainInterfaceFilterrefParameter *parameter, const gchar *name); > > +void gvir_config_domain_interface_filterref_parameter_set_value(GVirConfigDomainInterfaceFilterrefParameter *parameter, const gchar *value); > > +const gchar *gvir_config_domain_interface_filterref_parameter_get_name(GVirConfigDomainInterfaceFilterrefParameter *parameter); > > +const gchar *gvir_config_domain_interface_filterref_parameter_get_value(GVirConfigDomainInterfaceFilterrefParameter *parameter); > > + > > +G_END_DECLS > > + > > +#endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_FILTERREF_PARAMETER_H__ */ > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.c b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.c > > new file mode 100644 > > index 0000000..c192249 > > --- /dev/null > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.c > > @@ -0,0 +1,159 @@ > > +/* > > + * libvirt-gconfig-domain-interface-network-filterref.c: > > + * libvirt filter reference config. > > + * > > + * Copyright (C) 2013 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, see > > + * <http://www.gnu.org/licenses/>. > > + * > > + * Author: Ian Main <imain@xxxxxxxxxx> > > + */ > > + > > +#include <config.h> > > + > > +#include "libvirt-gconfig/libvirt-gconfig.h" > > +#include "libvirt-gconfig/libvirt-gconfig-private.h" > > + > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_GET_PRIVATE(obj) \ > > + (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, GVirConfigDomainInterfaceFilterrefPrivate)) > > + > > +struct _GVirConfigDomainInterfaceFilterrefPrivate > > +{ > > + gboolean unused; > > +}; > > + > > +G_DEFINE_TYPE(GVirConfigDomainInterfaceFilterref, gvir_config_domain_interface_filterref, GVIR_CONFIG_TYPE_OBJECT); > > + > > +static void gvir_config_domain_interface_filterref_class_init(GVirConfigDomainInterfaceFilterrefClass *klass) > > +{ > > + g_type_class_add_private(klass, sizeof(GVirConfigDomainInterfaceFilterrefPrivate)); > > +} > > + > > +static void gvir_config_domain_interface_filterref_init(GVirConfigDomainInterfaceFilterref *filterref) > > +{ > > + g_debug("Init GVirConfigDomainInterfaceFilterref=%p", filterref); > > + > > + filterref->priv = GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_GET_PRIVATE(filterref); > > +} > > + > > + > > +GVirConfigDomainInterfaceFilterref *gvir_config_domain_interface_filterref_new(void) > > +{ > > + GVirConfigObject *object; > > + > > + object = gvir_config_object_new(GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, > > + "filterref", NULL); > > + return GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF(object); > > +} > > + > > +GVirConfigDomainInterfaceFilterref *gvir_config_domain_interface_filterref_new_from_xml(const gchar *xml, > > + GError **error) > > +{ > > + GVirConfigObject *object; > > + > > + object = gvir_config_object_new_from_xml(GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, > > + "filterref", NULL, xml, error); > > + if (gvir_config_object_get_attribute(object, NULL, "filter") == NULL) { > > + g_object_unref(G_OBJECT(object)); > > + return NULL; > > + } > > + return GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF(object); > > +} > > + > > +void gvir_config_domain_interface_filterref_set_name(GVirConfigDomainInterfaceFilterref *filterref, > > + const char *filter) > > +{ > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(filterref)); > > + > > + gvir_config_object_set_attribute(GVIR_CONFIG_OBJECT(filterref), > > + "filter", filter, NULL); > > +} > > + > > +const char *gvir_config_domain_interface_filterref_get_name(GVirConfigDomainInterfaceFilterref *filterref) > > +{ > > + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(filterref), NULL); > > + return gvir_config_object_get_attribute(GVIR_CONFIG_OBJECT(filterref), > > + NULL, > > + "filter"); > > +} > > + > > +void gvir_config_domain_interface_filterref_add_parameter(GVirConfigDomainInterfaceFilterref *filterref, > > + GVirConfigDomainInterfaceFilterrefParameter *parameter) > > +{ > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(filterref)); > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_PARAMETER(parameter)); > > + > > + gvir_config_object_attach_add(GVIR_CONFIG_OBJECT(filterref), > > + GVIR_CONFIG_OBJECT(parameter)); > > +} > > + > > +struct GetParameterData { > > + GVirConfigXmlDoc *doc; > > + GList *parameters; > > +}; > > + > > + > > +static gboolean add_filterref_parameter(xmlNodePtr node, gpointer opaque) > > +{ > > + struct GetParameterData* data = (struct GetParameterData*)opaque; > > + GVirConfigObject *parameter; > > + > > + if (g_strcmp0((const gchar *)node->name, "parameter") != 0) { > > + g_debug("unexpected node %s", node->name); > > + return TRUE; > > + } > > + > > + parameter = gvir_config_object_new_from_tree(GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF_PARAMETER, > > + data->doc, NULL, node); > > + if (parameter != NULL) > > + data->parameters = g_list_append(data->parameters, parameter); > > + else > > + g_debug("Failed to parse %s node", node->name); > > + > > + return TRUE; > > +} > > + > > +/** > > + * gvir_config_domain_interface_filterref_get_parameters: > > + * @filterref: a #GVirConfigDomainInterfaceFilterref > > + * > > + * Gets the list of parameters attached to @filterref. The returned list should be > > + * freed with g_list_free(), after its elements have been unreffed with > > + * g_object_unref(). > > + * > > + * Returns: (element-type LibvirtGConfig.DomainInterfaceFilterrefParameter) (transfer full): > > + * a newly allocated #GList of #GVirConfigDomainInterfaceFilterrefParameter. > > + */ > > +GList *gvir_config_domain_interface_filterref_get_parameters(GVirConfigDomainInterfaceFilterref *filterref) > > +{ > > + struct GetParameterData data; > > + > > + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(filterref), NULL); > > + > > + g_object_get(G_OBJECT(filterref), "doc", &data.doc, NULL); > > + data.parameters = NULL; > > + > > + gvir_config_object_foreach_child(GVIR_CONFIG_OBJECT(filterref), > > + NULL, > > + add_filterref_parameter, > > + &data); > > + > > + if (data.doc != NULL) { > > + g_object_unref(G_OBJECT(data.doc)); > > + } > > + > > + return data.parameters; > > +} > > + > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h > > new file mode 100644 > > index 0000000..4a2bfd4 > > --- /dev/null > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h > > @@ -0,0 +1,76 @@ > > +/* > > + * libvirt-gconfig-domain-interface-network-filterref.h: libvirt filter reference config > > + * > > + * Copyright (C) 2013 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, see > > + * <http://www.gnu.org/licenses/>. > > + * > > + * Author: Ian Main <imain@xxxxxxxxxx> > > + */ > > + > > +#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_INTERFACE_FILTERREF_H__ > > +#define __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_FILTERREF_H__ > > + > > +G_BEGIN_DECLS > > + > > +#define GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF (gvir_config_domain_interface_filterref_get_type ()) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, GVirConfigDomainInterfaceFilterref)) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, GVirConfigDomainInterfaceFilterrefClass)) > > +#define GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF)) > > +#define GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF)) > > +#define GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF, GVirConfigDomainInterfaceFilterrefClass)) > > + > > +typedef struct _GVirConfigDomainInterfaceFilterref GVirConfigDomainInterfaceFilterref; > > +typedef struct _GVirConfigDomainInterfaceFilterrefPrivate GVirConfigDomainInterfaceFilterrefPrivate; > > +typedef struct _GVirConfigDomainInterfaceFilterrefClass GVirConfigDomainInterfaceFilterrefClass; > > + > > +struct _GVirConfigDomainInterfaceFilterref > > +{ > > + GVirConfigObject parent; > > + > > + GVirConfigDomainInterfaceFilterrefPrivate *priv; > > + > > + /* Do not add fields to this struct */ > > +}; > > + > > +struct _GVirConfigDomainInterfaceFilterrefClass > > +{ > > + GVirConfigObjectClass parent_class; > > + > > + gpointer padding[20]; > > +}; > > + > > +GType gvir_config_domain_interface_filterref_get_type(void); > > + > > +GVirConfigDomainInterfaceFilterref *gvir_config_domain_interface_filterref_new(void); > > + > > +GVirConfigDomainInterfaceFilterref * > > +gvir_config_domain_interface_filterref_new_from_xml(const gchar *xml, GError **error); > > + > > +void gvir_config_domain_interface_filterref_set_name(GVirConfigDomainInterfaceFilterref *filterref, > > + const char *filter); > > +const char *gvir_config_domain_interface_filterref_get_name(GVirConfigDomainInterfaceFilterref *filterref); > > + > > +void gvir_config_domain_interface_filterref_add_parameter(GVirConfigDomainInterfaceFilterref *filterref, > > + GVirConfigDomainInterfaceFilterrefParameter *parameter); > > +GList *gvir_config_domain_interface_filterref_get_parameters(GVirConfigDomainInterfaceFilterref *filterref); > > + > > +G_END_DECLS > > + > > +#endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_FILTERREF_H__ */ > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.c b/libvirt-gconfig/libvirt-gconfig-domain-interface.c > > index 86a0c34..ce1b3f0 100644 > > --- a/libvirt-gconfig/libvirt-gconfig-domain-interface.c > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.c > > @@ -131,6 +131,47 @@ const char *gvir_config_domain_interface_get_model(GVirConfigDomainInterface *in > > "model", "type"); > > } > > > > +/** > > + * gvir_config_domain_interface_set_filterref: > > + * @interface: a #GVirConfigDomainInterface > > + * @filterref: (allow-none): the filterref to set > > + */ > > +void gvir_config_domain_interface_set_filterref(GVirConfigDomainInterface *interface, > > + GVirConfigDomainInterfaceFilterref *filterref) > > +{ > > + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE(interface)); > > + g_return_if_fail(filterref == NULL || GVIR_CONFIG_IS_DOMAIN_INTERFACE_FILTERREF(filterref)); > > + > > + gvir_config_object_attach_replace(GVIR_CONFIG_OBJECT(interface), > > + "filterref", > > + GVIR_CONFIG_OBJECT(filterref)); > > +} > > + > > +/** > > + * gvir_config_domain_interface_get_filterref: > > + * @interface: a #GVirConfigDomainInterface > > + * > > + * Gets the filterref associated with the @interface > > + * > > + * Returns: (transfer full): A #GVirConfigDomainInterfaceFilterref. The returned > > + * object should be unreffed with g_object_unref() when no longer needed. > > + */ > > + > > +GVirConfigDomainInterfaceFilterref *gvir_config_domain_interface_get_filterref(GVirConfigDomainInterface *interface) > > +{ > > + GVirConfigObject *object; > > + > > + g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_INTERFACE(interface), NULL); > > + > > + object = gvir_config_object_get_child_with_type > > + (GVIR_CONFIG_OBJECT(interface), > > + "filterref", > > + GVIR_CONFIG_TYPE_DOMAIN_INTERFACE_FILTERREF); > > + > > + return GVIR_CONFIG_DOMAIN_INTERFACE_FILTERREF(object); > > +} > > + > > + > > G_GNUC_INTERNAL GVirConfigDomainDevice * > > gvir_config_domain_interface_new_from_tree(GVirConfigXmlDoc *doc, > > xmlNodePtr tree) > > diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.h b/libvirt-gconfig/libvirt-gconfig-domain-interface.h > > index 65c5d0b..2b0c22f 100644 > > --- a/libvirt-gconfig/libvirt-gconfig-domain-interface.h > > +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.h > > @@ -27,6 +27,8 @@ > > #ifndef __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ > > #define __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ > > > > +#include <libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h> > > + > > G_BEGIN_DECLS > > > > #define GVIR_CONFIG_TYPE_DOMAIN_INTERFACE (gvir_config_domain_interface_get_type ()) > > @@ -76,6 +78,9 @@ const char *gvir_config_domain_interface_get_ifname(GVirConfigDomainInterface *i > > GVirConfigDomainInterfaceLinkState gvir_config_domain_interface_get_link_state(GVirConfigDomainInterface *interface); > > const char *gvir_config_domain_interface_get_mac(GVirConfigDomainInterface *interface); > > const char *gvir_config_domain_interface_get_model(GVirConfigDomainInterface *interface); > > +void gvir_config_domain_interface_set_filterref(GVirConfigDomainInterface *interface, > > + GVirConfigDomainInterfaceFilterref *filterref); > > +GVirConfigDomainInterfaceFilterref *gvir_config_domain_interface_get_filterref(GVirConfigDomainInterface *interface); > > > > G_END_DECLS > > > > diff --git a/libvirt-gconfig/libvirt-gconfig.h b/libvirt-gconfig/libvirt-gconfig.h > > index 03e8ce7..af80241 100644 > > --- a/libvirt-gconfig/libvirt-gconfig.h > > +++ b/libvirt-gconfig/libvirt-gconfig.h > > @@ -64,6 +64,8 @@ > > #include <libvirt-gconfig/libvirt-gconfig-domain-input.h> > > #include <libvirt-gconfig/libvirt-gconfig-domain-interface.h> > > #include <libvirt-gconfig/libvirt-gconfig-domain-interface-bridge.h> > > +#include <libvirt-gconfig/libvirt-gconfig-domain-interface-filterref-parameter.h> > > +#include <libvirt-gconfig/libvirt-gconfig-domain-interface-filterref.h> > > #include <libvirt-gconfig/libvirt-gconfig-domain-interface-network.h> > > #include <libvirt-gconfig/libvirt-gconfig-domain-interface-user.h> > > #include <libvirt-gconfig/libvirt-gconfig-domain-memballoon.h> > > diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym > > index 72eafc1..a5f8b05 100644 > > --- a/libvirt-gconfig/libvirt-gconfig.sym > > +++ b/libvirt-gconfig/libvirt-gconfig.sym > > @@ -608,6 +608,24 @@ global: > > gvir_config_domain_graphics_rdp_set_replace_user; > > > > gvir_config_object_new_from_xml; > > + > > + gvir_config_domain_interface_set_filterref; > > + gvir_config_domain_interface_get_filterref; > > + > > + gvir_config_domain_interface_filterref_get_type; > > + gvir_config_domain_interface_filterref_new; > > + gvir_config_domain_interface_filterref_new_from_xml; > > + gvir_config_domain_interface_filterref_set_name; > > + gvir_config_domain_interface_filterref_get_name; > > + gvir_config_domain_interface_filterref_add_parameter; > > + gvir_config_domain_interface_filterref_get_parameters; > > + gvir_config_domain_interface_filterref_parameter_get_type; > > + gvir_config_domain_interface_filterref_parameter_new; > > + gvir_config_domain_interface_filterref_parameter_new_from_xml; > > + gvir_config_domain_interface_filterref_parameter_set_name; > > + gvir_config_domain_interface_filterref_parameter_set_value; > > + gvir_config_domain_interface_filterref_parameter_get_name; > > + gvir_config_domain_interface_filterref_parameter_get_value; > > } LIBVIRT_GCONFIG_0.1.7; > > > > # .... define new API here using predicted next version number .... > > -- > > 1.8.1.4 > > > > -- > > libvir-list mailing list > > libvir-list@xxxxxxxxxx > > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list