These attributes are valid for all types deriving from GVirConfigDomainInterface so we add it to the base class. --- libvirt-gconfig/libvirt-gconfig-domain-interface.c | 62 ++++++++++++++++++++ libvirt-gconfig/libvirt-gconfig-domain-interface.h | 14 +++++ libvirt-gconfig/libvirt-gconfig.sym | 5 ++ libvirt-gconfig/tests/test-domain-create.c | 18 +++++- 4 files changed, 95 insertions(+), 4 deletions(-) diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.c b/libvirt-gconfig/libvirt-gconfig-domain-interface.c index 5732ff1..6f64234 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface.c +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.c @@ -19,11 +19,13 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Daniel P. Berrange <berrange@xxxxxxxxxx> + * Christophe Fergeau <cfergeau@xxxxxxxxxx> */ #include <config.h> #include "libvirt-gconfig/libvirt-gconfig.h" +#include "libvirt-gconfig/libvirt-gconfig-object-private.h" #define GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_CONFIG_DOMAIN_INTERFACE, GVirConfigDomainInterfacePrivate)) @@ -48,3 +50,63 @@ static void gvir_config_domain_interface_init(GVirConfigDomainInterface *interfa interface->priv = GVIR_CONFIG_DOMAIN_INTERFACE_GET_PRIVATE(interface); } + +void gvir_config_domain_interface_set_ifname(GVirConfigDomainInterface *interface, + const char *ifname) +{ + GVirConfigObject *node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface), + "target"); + g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node)); + gvir_config_object_set_attribute(node, "device", ifname, NULL); + g_object_unref(G_OBJECT(node)); +} + +void gvir_config_domain_interface_set_link_state(GVirConfigDomainInterface *interface, + GVirConfigDomainInterfaceLinkState state) +{ + GVirConfigObject *node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface), + "link"); + g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node)); + gvir_config_object_set_attribute_with_type(node, + "state", + GVIR_TYPE_CONFIG_DOMAIN_INTERFACE_LINK_STATE, + state, + NULL); + g_object_unref(G_OBJECT(node)); +} + +void gvir_config_domain_interface_set_mac(GVirConfigDomainInterface *interface, + const char *mac_address) +{ + GVirConfigObject *node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface), + "mac"); + g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node)); + gvir_config_object_set_attribute(node, "address", mac_address, NULL); + g_object_unref(G_OBJECT(node)); +} + +void gvir_config_domain_interface_set_model(GVirConfigDomainInterface *interface, + const char *model) +{ + GVirConfigObject *node; + + g_return_if_fail(GVIR_IS_CONFIG_DOMAIN_INTERFACE(interface)); + + node = gvir_config_object_replace_child(GVIR_CONFIG_OBJECT(interface), + "model"); + g_return_if_fail(GVIR_IS_CONFIG_OBJECT(node)); + gvir_config_object_set_attribute(node, "type", model, NULL); + g_object_unref(G_OBJECT(node)); +} diff --git a/libvirt-gconfig/libvirt-gconfig-domain-interface.h b/libvirt-gconfig/libvirt-gconfig-domain-interface.h index 7021ae4..28bbd41 100644 --- a/libvirt-gconfig/libvirt-gconfig-domain-interface.h +++ b/libvirt-gconfig/libvirt-gconfig-domain-interface.h @@ -56,9 +56,23 @@ struct _GVirConfigDomainInterfaceClass gpointer padding[20]; }; +typedef enum { + GVIR_CONFIG_DOMAIN_INTERFACE_LINK_STATE_DEFAULT, + GVIR_CONFIG_DOMAIN_INTERFACE_LINK_STATE_UP, + GVIR_CONFIG_DOMAIN_INTERFACE_LINK_STATE_DOWN +} GVirConfigDomainInterfaceLinkState; GType gvir_config_domain_interface_get_type(void); +void gvir_config_domain_interface_set_ifname(GVirConfigDomainInterface *interface, + const char *ifname); +void gvir_config_domain_interface_set_link_state(GVirConfigDomainInterface *interface, + GVirConfigDomainInterfaceLinkState state); +void gvir_config_domain_interface_set_mac(GVirConfigDomainInterface *interface, + const char *mac_address); +void gvir_config_domain_interface_set_model(GVirConfigDomainInterface *interface, + const char *model); + G_END_DECLS #endif /* __LIBVIRT_GCONFIG_DOMAIN_INTERFACE_H__ */ diff --git a/libvirt-gconfig/libvirt-gconfig.sym b/libvirt-gconfig/libvirt-gconfig.sym index b06231c..6adc2c2 100644 --- a/libvirt-gconfig/libvirt-gconfig.sym +++ b/libvirt-gconfig/libvirt-gconfig.sym @@ -111,6 +111,11 @@ LIBVIRT_GCONFIG_0.0.1 { gvir_config_domain_input_set_bus; gvir_config_domain_interface_get_type; + gvir_config_domain_interface_link_state_get_type; + gvir_config_domain_interface_set_ifname; + gvir_config_domain_interface_set_link_state; + gvir_config_domain_interface_set_mac; + gvir_config_domain_interface_set_model; gvir_config_domain_interface_network_get_type; gvir_config_domain_interface_network_new; diff --git a/libvirt-gconfig/tests/test-domain-create.c b/libvirt-gconfig/tests/test-domain-create.c index bcaa29a..42aa09b 100644 --- a/libvirt-gconfig/tests/test-domain-create.c +++ b/libvirt-gconfig/tests/test-domain-create.c @@ -105,13 +105,23 @@ int main(void) devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(disk)); - /* network interface node */ - GVirConfigDomainInterfaceNetwork *interface; + /* network interfaces node */ + GVirConfigDomainInterface *interface; - interface = gvir_config_domain_interface_network_new(); - gvir_config_domain_interface_network_set_source(interface, "default"); + interface = GVIR_CONFIG_DOMAIN_INTERFACE(gvir_config_domain_interface_network_new()); + gvir_config_domain_interface_network_set_source(GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK(interface), + "default"); devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(interface)); + interface = GVIR_CONFIG_DOMAIN_INTERFACE(gvir_config_domain_interface_user_new()); + gvir_config_domain_interface_set_ifname(interface, "eth0"); + gvir_config_domain_interface_set_link_state(interface, + GVIR_CONFIG_DOMAIN_INTERFACE_LINK_STATE_UP); + gvir_config_domain_interface_set_mac(interface, "00:11:22:33:44:55"); + gvir_config_domain_interface_set_model(interface, "foo"); + devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(interface)); + + /* input node */ GVirConfigDomainInput *input; -- 1.7.7.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list