[libvirt-glib PATCHv5 7/7] gobject: Add wrapper for virNetworkGetDHCPLeases

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 libvirt-gobject/libvirt-gobject-network.c | 55 +++++++++++++++++++++++++++++++
 libvirt-gobject/libvirt-gobject-network.h |  4 +++
 libvirt-gobject/libvirt-gobject.sym       |  2 ++
 3 files changed, 61 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-network.c b/libvirt-gobject/libvirt-gobject-network.c
index b1b38a0..2a7bed6 100644
--- a/libvirt-gobject/libvirt-gobject-network.c
+++ b/libvirt-gobject/libvirt-gobject-network.c
@@ -29,6 +29,7 @@
 #include "libvirt-glib/libvirt-glib.h"
 #include "libvirt-gobject/libvirt-gobject.h"
 #include "libvirt-gobject-compat.h"
+#include "libvirt-gobject/libvirt-gobject-network-dhcp-lease-private.h"
 
 #define GVIR_NETWORK_GET_PRIVATE(obj)                         \
         (G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_NETWORK, GVirNetworkPrivate))
@@ -224,3 +225,57 @@ GVirConfigNetwork *gvir_network_get_config(GVirNetwork *network,
     free(xml);
     return conf;
 }
+
+/**
+ * gvir_network_get_dhcp_leases:
+ * @network: the network
+ * @mac: (allow-none): The optional ASCII formatted MAC address of an interface
+ * @flags: placeholder for flags, must be 0
+ *
+ * @err: Place-holder for possible errors
+ *
+ * This function fetches leases info of guests in the specified network. If the
+ * optional parameter @mac is specified, the returned list will contain only
+ * lease info about a specific guest interface with @mac. There can be multiple
+ * leases for a single @mac because this API supports DHCPv6 too.
+ *
+ * Returns:  (element-type LibvirtGObject.NetworkDHCPLease) (transfer full): the
+ * list of network leases. Each object in the returned list should be unreffed
+ * with g_object_unref() and the list itself using g_list_free, when no longer
+ * needed.
+ */
+GList *gvir_network_get_dhcp_leases(GVirNetwork *network,
+                                    const char* mac,
+                                    guint flags,
+                                    GError **err)
+{
+    virNetworkDHCPLeasePtr *leases;
+    GList *ret = NULL;
+    int num_leases, i;
+
+    g_return_val_if_fail(GVIR_IS_NETWORK(network), NULL);
+    g_return_val_if_fail(err == NULL || *err == NULL, NULL);
+    g_return_val_if_fail(flags != 0, NULL);
+
+    num_leases = virNetworkGetDHCPLeases(network->priv->handle, mac, &leases, flags);
+    if (num_leases < 0) {
+        gvir_set_error_literal(err, GVIR_NETWORK_ERROR,
+                               0,
+                               "Unable to get network DHCP leases");
+        return NULL;
+    }
+
+    if (num_leases == 0)
+        return NULL;
+
+    for (i = 0; i < num_leases; i++) {
+        GVirNetworkDHCPLease *lease;
+
+        lease = gvir_network_dhcp_lease_new(leases[i]);
+        ret = g_list_prepend(ret, lease);
+    }
+    ret = g_list_reverse(ret);
+    free(leases);
+
+    return ret;
+}
diff --git a/libvirt-gobject/libvirt-gobject-network.h b/libvirt-gobject/libvirt-gobject-network.h
index 9f746c0..5617ed6 100644
--- a/libvirt-gobject/libvirt-gobject-network.h
+++ b/libvirt-gobject/libvirt-gobject-network.h
@@ -71,6 +71,10 @@ const gchar *gvir_network_get_uuid(GVirNetwork *network);
 GVirConfigNetwork *gvir_network_get_config(GVirNetwork *network,
                                            guint flags,
                                            GError **err);
+GList *gvir_network_get_dhcp_leases(GVirNetwork *network,
+                                    const char* mac,
+                                    guint flags,
+                                    GError **err);
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym
index dfd858a..ca89a45 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -300,6 +300,8 @@ LIBVIRT_GOBJECT_0.2.2 {
 	gvir_network_dhcp_lease_get_mac;
 	gvir_network_dhcp_lease_get_prefix;
 	gvir_network_dhcp_lease_get_type;
+
+	gvir_network_get_dhcp_leases;
 } LIBVIRT_GOBJECT_0.2.1;
 
 # .... define new API here using predicted next version number ....
-- 
2.4.3

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]