[libvirt] [dbus PATCH 0/8] NWFilter APIs

Katerina Koukiou (8): Introduce NWFilter Interface Implement ListNWFilters method for Connect Interface Implement NWFilterDefineXML method for Connect Interface Implement Name property for NWFilter Interface Implement UUID property for NWFilter Interface Implement GetXMLDesc method for NWFilter Interface Implement NWFilterLookupByName method for Connect Interface Implement NWFilterLookupByUUID method for Connect Interface data/Makefile.am | 1 + data/org.libvirt.Connect.xml | 24 +++++++ data/org.libvirt.NWFilter.xml | 23 +++++++ src/Makefile.am | 1 + src/connect.c | 131 +++++++++++++++++++++++++++++++++++ src/connect.h | 1 + src/nwfilter.c | 157 ++++++++++++++++++++++++++++++++++++++++++ src/nwfilter.h | 9 +++ src/util.c | 32 +++++++++ src/util.h | 15 ++++ 10 files changed, 394 insertions(+) create mode 100644 data/org.libvirt.NWFilter.xml create mode 100644 src/nwfilter.c create mode 100644 src/nwfilter.h -- 2.15.0

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/Makefile.am | 1 + data/org.libvirt.NWFilter.xml | 7 +++++ src/Makefile.am | 1 + src/connect.c | 6 ++++ src/connect.h | 1 + src/nwfilter.c | 65 +++++++++++++++++++++++++++++++++++++++++++ src/nwfilter.h | 9 ++++++ src/util.c | 32 +++++++++++++++++++++ src/util.h | 15 ++++++++++ 9 files changed, 137 insertions(+) create mode 100644 data/org.libvirt.NWFilter.xml create mode 100644 src/nwfilter.c create mode 100644 src/nwfilter.h diff --git a/data/Makefile.am b/data/Makefile.am index 5a085cd..fdec857 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -22,6 +22,7 @@ interfaces_files = \ org.libvirt.Connect.xml \ org.libvirt.Domain.xml \ org.libvirt.Network.xml \ + org.libvirt.NWFilter.xml \ org.libvirt.Secret.xml \ org.libvirt.StoragePool.xml interfacesdir = $(DBUS_INTERFACES_DIR) diff --git a/data/org.libvirt.NWFilter.xml b/data/org.libvirt.NWFilter.xml new file mode 100644 index 0000000..c025d30 --- /dev/null +++ b/data/org.libvirt.NWFilter.xml @@ -0,0 +1,7 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" +"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> + +<node name="/org/libvirt/nwfilter"> + <interface name="org.libvirt.NWFilter"> + </interface> +</node> diff --git a/src/Makefile.am b/src/Makefile.am index 6b2887b..22128c2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,6 +10,7 @@ DAEMON_SOURCES = \ events.c events.h \ gdbus.c gdbus.h \ network.c network.h \ + nwfilter.c nwfilter.h \ secret.c secret.h \ storagepool.c storagepool.h diff --git a/src/connect.c b/src/connect.c index 0b33bc5..136f7ae 100644 --- a/src/connect.c +++ b/src/connect.c @@ -2,6 +2,7 @@ #include "domain.h" #include "events.h" #include "network.h" +#include "nwfilter.h" #include "secret.h" #include "storagepool.h" #include "util.h" @@ -1394,6 +1395,7 @@ virtDBusConnectFree(virtDBusConnect *connect) g_free(connect->domainPath); g_free(connect->networkPath); + g_free(connect->nwfilterPath); g_free(connect->secretPath); g_free(connect->storagePoolPath); g_free(connect); @@ -1451,6 +1453,10 @@ virtDBusConnectNew(virtDBusConnect **connectp, if (error && *error) return; + virtDBusNWFilterRegister(connect, error); + if (error && *error) + return; + virtDBusSecretRegister(connect, error); if (error && *error) return; diff --git a/src/connect.h b/src/connect.h index 08e1b68..fe672ed 100644 --- a/src/connect.h +++ b/src/connect.h @@ -14,6 +14,7 @@ struct virtDBusConnect { const gchar *connectPath; gchar *domainPath; gchar *networkPath; + gchar *nwfilterPath; gchar *secretPath; gchar *storagePoolPath; virConnectPtr connection; diff --git a/src/nwfilter.c b/src/nwfilter.c new file mode 100644 index 0000000..4d20162 --- /dev/null +++ b/src/nwfilter.c @@ -0,0 +1,65 @@ +#include "nwfilter.h" +#include "util.h" + +#include <libvirt/libvirt.h> + +static virtDBusGDBusPropertyTable virtDBusNWFilterPropertyTable[] = { + { 0 } +}; + +static virtDBusGDBusMethodTable virtDBusNWFilterMethodTable[] = { + { 0 } +}; + +static gchar ** +virtDBusNWFilterEnumerate(gpointer userData) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilterPtr) nwfilters = NULL; + gint num = 0; + gchar **ret = NULL; + + if (!virtDBusConnectOpen(connect, NULL)) + return NULL; + + num = virConnectListAllNWFilters(connect->connection, &nwfilters, 0); + if (num < 0) + return NULL; + + if (num == 0) + return NULL; + + ret = g_new0(gchar *, num + 1); + + for (gint i = 0; i < num; i++) { + ret[i] = virtDBusUtilBusPathForVirNWFilter(nwfilters[i], + connect->nwfilterPath); + } + + return ret; +} + +static GDBusInterfaceInfo *interfaceInfo; + +void +virtDBusNWFilterRegister(virtDBusConnect *connect, + GError **error) +{ + connect->nwfilterPath = g_strdup_printf("%s/nwfilter", + connect->connectPath); + + if (!interfaceInfo) { + interfaceInfo = virtDBusGDBusLoadIntrospectData(VIRT_DBUS_NWFILTER_INTERFACE, + error); + if (!interfaceInfo) + return; + } + + virtDBusGDBusRegisterSubtree(connect->bus, + connect->nwfilterPath, + interfaceInfo, + virtDBusNWFilterEnumerate, + virtDBusNWFilterMethodTable, + virtDBusNWFilterPropertyTable, + connect); +} diff --git a/src/nwfilter.h b/src/nwfilter.h new file mode 100644 index 0000000..7afd27f --- /dev/null +++ b/src/nwfilter.h @@ -0,0 +1,9 @@ +#pragma once + +#include "connect.h" + +#define VIRT_DBUS_NWFILTER_INTERFACE "org.libvirt.NWFilter" + +void +virtDBusNWFilterRegister(virtDBusConnect *connect, + GError **error); diff --git a/src/util.c b/src/util.c index 9dd901c..f6aa210 100644 --- a/src/util.c +++ b/src/util.c @@ -247,6 +247,38 @@ virtDBusUtilVirNetworkListFree(virNetworkPtr *networks) g_free(networks); } +virNWFilterPtr +virtDBusUtilVirNWFilterFromBusPath(virConnectPtr connection, + const gchar *path, + const gchar *nwfilterPath) +{ + g_autofree gchar *name = NULL; + gsize prefixLen = strlen(nwfilterPath) + 1; + + name = virtDBusUtilDecodeUUID(path+prefixLen); + + return virNWFilterLookupByUUIDString(connection, name); +} + +gchar * +virtDBusUtilBusPathForVirNWFilter(virNWFilterPtr nwfilter, + const gchar *nwfilterPath) +{ + gchar uuid[VIR_UUID_STRING_BUFLEN] = ""; + g_autofree gchar *newUuid = NULL; + virNWFilterGetUUIDString(nwfilter, uuid); + newUuid = virtDBusUtilEncodeUUID(uuid); + return g_strdup_printf("%s/%s", nwfilterPath, newUuid); +} + +void +virtDBusUtilVirNWFilterListFree(virNWFilterPtr *nwfilters) +{ + for (gint i = 0; nwfilters[i] != NULL; i++) + virNWFilterFree(nwfilters[i]); + + g_free(nwfilters); +} void virtDBusUtilStringListFree(virtDBusCharArray *item) { diff --git a/src/util.h b/src/util.h index 2f37933..09546e3 100644 --- a/src/util.h +++ b/src/util.h @@ -72,6 +72,21 @@ virtDBusUtilVirNetworkListFree(virNetworkPtr *networks); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetwork, virNetworkFree); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNetworkPtr, virtDBusUtilVirNetworkListFree); +virNWFilterPtr +virtDBusUtilVirNWFilterFromBusPath(virConnectPtr connection, + const gchar *path, + const gchar *nwfilterPath); + +gchar * +virtDBusUtilBusPathForVirNWFilter(virNWFilterPtr nwfilter, + const gchar *nwfilterPath); + +void +virtDBusUtilVirNWFilterListFree(virNWFilterPtr *nwfilters); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNWFilter, virNWFilterFree); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNWFilterPtr, virtDBusUtilVirNWFilterListFree); + typedef gchar *virtDBusCharArray; void -- 2.15.0

On Fri, May 11, 2018 at 01:57:44PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/Makefile.am | 1 + data/org.libvirt.NWFilter.xml | 7 +++++ src/Makefile.am | 1 + src/connect.c | 6 ++++ src/connect.h | 1 + src/nwfilter.c | 65 +++++++++++++++++++++++++++++++++++++++++++ src/nwfilter.h | 9 ++++++ src/util.c | 32 +++++++++++++++++++++ src/util.h | 15 ++++++++++ 9 files changed, 137 insertions(+) create mode 100644 data/org.libvirt.NWFilter.xml create mode 100644 src/nwfilter.c create mode 100644 src/nwfilter.h
diff --git a/src/util.c b/src/util.c index 9dd901c..f6aa210 100644 --- a/src/util.c +++ b/src/util.c @@ -247,6 +247,38 @@ virtDBusUtilVirNetworkListFree(virNetworkPtr *networks) g_free(networks); }
+virNWFilterPtr +virtDBusUtilVirNWFilterFromBusPath(virConnectPtr connection, + const gchar *path, + const gchar *nwfilterPath) +{ + g_autofree gchar *name = NULL; + gsize prefixLen = strlen(nwfilterPath) + 1; + + name = virtDBusUtilDecodeUUID(path+prefixLen);
Looks nicer with spaces around the +.
+ + return virNWFilterLookupByUUIDString(connection, name); +} +
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index 243ef35..a78a87d 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -153,6 +153,12 @@ <arg name="flags" type="u" direction="in"/> <arg name="networks" type="ao" direction="out"/> </method> + <method name="ListNWFilters"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virConnectListAllNWFilters"/> + <arg name="flags" type="u" direction="in"/> + <arg name="nwfilters" type="ao" direction="out"/> + </method> <method name="ListSecrets"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-secret.html#virConnectListAllSecrets"/> diff --git a/src/connect.c b/src/connect.c index 136f7ae..ff1120e 100644 --- a/src/connect.c +++ b/src/connect.c @@ -770,6 +770,43 @@ virtDBusConnectListNetworks(GVariant *inArgs, *outArgs = g_variant_new_tuple(&gnetworks, 1); } +static void +virtDBusConnectListNWFilters(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **outArgs, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilterPtr) nwfilters = NULL; + guint flags; + GVariantBuilder builder; + GVariant *gnwfilters; + + g_variant_get(inArgs, "(u)", &flags); + + if (!virtDBusConnectOpen(connect, error)) + return; + + if (virConnectListAllNWFilters(connect->connection, &nwfilters, flags) < 0) + return virtDBusUtilSetLastVirtError(error); + + g_variant_builder_init(&builder, G_VARIANT_TYPE("ao")); + + for (gint i = 0; nwfilters[i]; i++) { + g_autofree gchar *path = NULL; + path = virtDBusUtilBusPathForVirNWFilter(nwfilters[i], + connect->nwfilterPath); + + g_variant_builder_add(&builder, "o", path); + } + + gnwfilters = g_variant_builder_end(&builder); + *outArgs = g_variant_new_tuple(&gnwfilters, 1); +} + static void virtDBusConnectListSecrets(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -1364,6 +1401,7 @@ static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "GetSysinfo", virtDBusConnectGetSysinfo }, { "ListDomains", virtDBusConnectListDomains }, { "ListNetworks", virtDBusConnectListNetworks }, + { "ListNWFilters", virtDBusConnectListNWFilters }, { "ListSecrets", virtDBusConnectListSecrets }, { "ListStoragePools", virtDBusConnectListStoragePools }, { "NetworkCreateXML", virtDBusConnectNetworkCreateXML }, -- 2.15.0

On Fri, May 11, 2018 at 01:57:45PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index a78a87d..c228c6d 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -195,6 +195,12 @@ <arg name="uuid" type="s" direction="in"/> <arg name="network" type="o" direction="out"/> </method> + <method name="NWFilterDefineXML"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterDefineXML"/> + <arg name="xml" type="s" direction="in"/> + <arg name="nwfilter" type="o" direction="out"/> + </method> <method name="NodeGetCPUMap"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-host.html#virNodeGetCPUMap"/> diff --git a/src/connect.c b/src/connect.c index ff1120e..8981f36 100644 --- a/src/connect.c +++ b/src/connect.c @@ -994,6 +994,34 @@ virtDBusConnectNetworkLookupByUUID(GVariant *inArgs, *outArgs = g_variant_new("(o)", path); } +static void +virtDBusConnectNWFilterDefineXML(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **outArgs, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + g_autofree gchar *path = NULL; + const gchar *xml; + + g_variant_get(inArgs, "(&s)", &xml); + + if (!virtDBusConnectOpen(connect, error)) + return; + + nwfilter = virNWFilterDefineXML(connect->connection, xml); + if (!nwfilter) + return virtDBusUtilSetLastVirtError(error); + + path = virtDBusUtilBusPathForVirNWFilter(nwfilter, connect->nwfilterPath); + + *outArgs = g_variant_new("(o)", path); +} + static void virtDBusConnectNodeGetCPUMap(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -1408,6 +1436,7 @@ static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "NetworkDefineXML", virtDBusConnectNetworkDefineXML }, { "NetworkLookupByName", virtDBusConnectNetworkLookupByName }, { "NetworkLookupByUUID", virtDBusConnectNetworkLookupByUUID }, + { "NWFilterDefineXML", virtDBusConnectNWFilterDefineXML }, { "NodeGetCPUMap", virtDBusConnectNodeGetCPUMap }, { "NodeGetCPUStats", virtDBusConnectNodeGetCPUStats }, { "NodeGetFreeMemory", virtDBusConnectNodeGetFreeMemory }, -- 2.15.0

On Fri, May 11, 2018 at 01:57:46PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 5 +++++ src/nwfilter.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/data/org.libvirt.NWFilter.xml b/data/org.libvirt.NWFilter.xml index c025d30..9a1b44f 100644 --- a/data/org.libvirt.NWFilter.xml +++ b/data/org.libvirt.NWFilter.xml @@ -3,5 +3,10 @@ <node name="/org/libvirt/nwfilter"> <interface name="org.libvirt.NWFilter"> + <property name="Name" type="s" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterGetName"/> + <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> + </property> </interface> </node> diff --git a/src/nwfilter.c b/src/nwfilter.c index 4d20162..c72317e 100644 --- a/src/nwfilter.c +++ b/src/nwfilter.c @@ -3,7 +3,50 @@ #include <libvirt/libvirt.h> +static virNWFilterPtr +virtDBusNWFilterGetVirNWFilter(virtDBusConnect *connect, + const gchar *objectPath, + GError **error) +{ + virNWFilterPtr nwfilter; + + if (virtDBusConnectOpen(connect, error) < 0) + return NULL; + + nwfilter = virtDBusUtilVirNWFilterFromBusPath(connect->connection, + objectPath, + connect->nwfilterPath); + if (!nwfilter) { + virtDBusUtilSetLastVirtError(error); + return NULL; + } + + return nwfilter; +} + +static void +virtDBusNWFilterGetName(const gchar *objectPath, + gpointer userData, + GVariant **value, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + const gchar *name; + + nwfilter = virtDBusNWFilterGetVirNWFilter(connect, objectPath, error); + if (!nwfilter) + return; + + name = virNWFilterGetName(nwfilter); + if (!name) + return virtDBusUtilSetLastVirtError(error); + + *value = g_variant_new("s", name); +} + static virtDBusGDBusPropertyTable virtDBusNWFilterPropertyTable[] = { + { "Name", virtDBusNWFilterGetName, NULL }, { 0 } }; -- 2.15.0

On Fri, May 11, 2018 at 01:57:47PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 5 +++++ src/nwfilter.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 5 +++++ src/nwfilter.c | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/data/org.libvirt.NWFilter.xml b/data/org.libvirt.NWFilter.xml index 9a1b44f..fae61dc 100644 --- a/data/org.libvirt.NWFilter.xml +++ b/data/org.libvirt.NWFilter.xml @@ -8,5 +8,10 @@ value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterGetName"/> <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> </property> + <property name="UUID" type="s" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterGetUUIDString"/> + <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> + </property> </interface> </node> diff --git a/src/nwfilter.c b/src/nwfilter.c index c72317e..90183a7 100644 --- a/src/nwfilter.c +++ b/src/nwfilter.c @@ -45,8 +45,29 @@ virtDBusNWFilterGetName(const gchar *objectPath, *value = g_variant_new("s", name); } +static void +virtDBusNWFilterGetUUID(const gchar *objectPath, + gpointer userData, + GVariant **value, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + gchar uuid[VIR_UUID_STRING_BUFLEN] = ""; + + nwfilter = virtDBusNWFilterGetVirNWFilter(connect, objectPath, error); + if (!nwfilter) + return; + + if (virNWFilterGetUUIDString(nwfilter, uuid) < 0) + return virtDBusUtilSetLastVirtError(error); + + *value = g_variant_new("s", uuid); +} + static virtDBusGDBusPropertyTable virtDBusNWFilterPropertyTable[] = { { "Name", virtDBusNWFilterGetName, NULL }, + { "UUID", virtDBusNWFilterGetUUID, NULL }, { 0 } }; -- 2.15.0

On Fri, May 11, 2018 at 01:57:48PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 5 +++++ src/nwfilter.c | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 6 ++++++ src/nwfilter.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/data/org.libvirt.NWFilter.xml b/data/org.libvirt.NWFilter.xml index fae61dc..69e3357 100644 --- a/data/org.libvirt.NWFilter.xml +++ b/data/org.libvirt.NWFilter.xml @@ -13,5 +13,11 @@ value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterGetUUIDString"/> <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/> </property> + <method name="GetXMLDesc"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterGetXMLDesc"/> + <arg name="flags" type="u" direction="in"/> + <arg name="xml" type="s" direction="out"/> + </method> </interface> </node> diff --git a/src/nwfilter.c b/src/nwfilter.c index 90183a7..acfbdd5 100644 --- a/src/nwfilter.c +++ b/src/nwfilter.c @@ -65,6 +65,33 @@ virtDBusNWFilterGetUUID(const gchar *objectPath, *value = g_variant_new("s", uuid); } +static void +virtDBusNWFilterGetXMLDesc(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + g_autofree gchar *xml = NULL; + guint flags; + + g_variant_get(inArgs, "(u)", &flags); + + nwfilter = virtDBusNWFilterGetVirNWFilter(connect, objectPath, error); + if (!nwfilter) + return; + + xml = virNWFilterGetXMLDesc(nwfilter, flags); + if (!xml) + return virtDBusUtilSetLastVirtError(error); + + *outArgs = g_variant_new("(s)", xml); +} + static virtDBusGDBusPropertyTable virtDBusNWFilterPropertyTable[] = { { "Name", virtDBusNWFilterGetName, NULL }, { "UUID", virtDBusNWFilterGetUUID, NULL }, @@ -72,6 +99,7 @@ static virtDBusGDBusPropertyTable virtDBusNWFilterPropertyTable[] = { }; static virtDBusGDBusMethodTable virtDBusNWFilterMethodTable[] = { + { "GetXMLDesc", virtDBusNWFilterGetXMLDesc }, { 0 } }; -- 2.15.0

On Fri, May 11, 2018 at 01:57:49PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.NWFilter.xml | 6 ++++++ src/nwfilter.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index c228c6d..6847aaf 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -201,6 +201,12 @@ <arg name="xml" type="s" direction="in"/> <arg name="nwfilter" type="o" direction="out"/> </method> + <method name="NWFilterLookupByName"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterLookupByName"/> + <arg name="name" type="s" direction="in"/> + <arg name="nwfilter" type="o" direction="out"/> + </method> <method name="NodeGetCPUMap"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-host.html#virNodeGetCPUMap"/> diff --git a/src/connect.c b/src/connect.c index 8981f36..d0fb791 100644 --- a/src/connect.c +++ b/src/connect.c @@ -1022,6 +1022,34 @@ virtDBusConnectNWFilterDefineXML(GVariant *inArgs, *outArgs = g_variant_new("(o)", path); } +static void +virtDBusConnectNWFilterLookupByName(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **outArgs, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + g_autofree gchar *path = NULL; + const gchar *name; + + g_variant_get(inArgs, "(s)", &name); + + if (!virtDBusConnectOpen(connect, error)) + return; + + nwfilter = virNWFilterLookupByName(connect->connection, name); + if (!nwfilter) + return virtDBusUtilSetLastVirtError(error); + + path = virtDBusUtilBusPathForVirNWFilter(nwfilter, connect->nwfilterPath); + + *outArgs = g_variant_new("(o)", path); +} + static void virtDBusConnectNodeGetCPUMap(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -1437,6 +1465,7 @@ static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "NetworkLookupByName", virtDBusConnectNetworkLookupByName }, { "NetworkLookupByUUID", virtDBusConnectNetworkLookupByUUID }, { "NWFilterDefineXML", virtDBusConnectNWFilterDefineXML }, + { "NWFilterLookupByName", virtDBusConnectNWFilterLookupByName }, { "NodeGetCPUMap", virtDBusConnectNodeGetCPUMap }, { "NodeGetCPUStats", virtDBusConnectNodeGetCPUStats }, { "NodeGetFreeMemory", virtDBusConnectNodeGetFreeMemory }, -- 2.15.0

On Fri, May 11, 2018 at 01:57:50PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index 6847aaf..9f42d8c 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -207,6 +207,12 @@ <arg name="name" type="s" direction="in"/> <arg name="nwfilter" type="o" direction="out"/> </method> + <method name="NWFilterLookupByUUID"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-nwfilter.html#virNWFilterLookupByUUIDString"/> + <arg name="uuid" type="s" direction="in"/> + <arg name="nwfilter" type="o" direction="out"/> + </method> <method name="NodeGetCPUMap"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-host.html#virNodeGetCPUMap"/> diff --git a/src/connect.c b/src/connect.c index d0fb791..861b0ed 100644 --- a/src/connect.c +++ b/src/connect.c @@ -1050,6 +1050,34 @@ virtDBusConnectNWFilterLookupByName(GVariant *inArgs, *outArgs = g_variant_new("(o)", path); } +static void +virtDBusConnectNWFilterLookupByUUID(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **outArgs, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect = userData; + g_autoptr(virNWFilter) nwfilter = NULL; + g_autofree gchar *path = NULL; + const gchar *uuidstr; + + g_variant_get(inArgs, "(&s)", &uuidstr); + + if (!virtDBusConnectOpen(connect, error)) + return; + + nwfilter = virNWFilterLookupByUUIDString(connect->connection, uuidstr); + if (!nwfilter) + return virtDBusUtilSetLastVirtError(error); + + path = virtDBusUtilBusPathForVirNWFilter(nwfilter, connect->nwfilterPath); + + *outArgs = g_variant_new("(o)", path); +} + static void virtDBusConnectNodeGetCPUMap(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -1466,6 +1494,7 @@ static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "NetworkLookupByUUID", virtDBusConnectNetworkLookupByUUID }, { "NWFilterDefineXML", virtDBusConnectNWFilterDefineXML }, { "NWFilterLookupByName", virtDBusConnectNWFilterLookupByName }, + { "NWFilterLookupByUUID", virtDBusConnectNWFilterLookupByUUID }, { "NodeGetCPUMap", virtDBusConnectNodeGetCPUMap }, { "NodeGetCPUStats", virtDBusConnectNodeGetCPUStats }, { "NodeGetFreeMemory", virtDBusConnectNodeGetFreeMemory }, -- 2.15.0

On Fri, May 11, 2018 at 01:57:51PM +0200, Katerina Koukiou wrote:
Signed-off-by: Katerina Koukiou <kkoukiou@redhat.com> --- data/org.libvirt.Connect.xml | 6 ++++++ src/connect.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

On Fri, May 11, 2018 at 01:57:43PM +0200, Katerina Koukiou wrote:
Katerina Koukiou (8): Introduce NWFilter Interface Implement ListNWFilters method for Connect Interface Implement NWFilterDefineXML method for Connect Interface
We have define, but there's no Undefine. Jano
Implement Name property for NWFilter Interface Implement UUID property for NWFilter Interface Implement GetXMLDesc method for NWFilter Interface Implement NWFilterLookupByName method for Connect Interface Implement NWFilterLookupByUUID method for Connect Interface
participants (2)
-
Ján Tomko
-
Katerina Koukiou