[libvirt] [PATCH glib] Make use of DHCP API conditionally compiled
Daniel P. Berrange
berrange at redhat.com
Tue Jul 21 14:20:03 UTC 2015
Previously the use of virDomainOpenGraphicsFD API from libvirt
1.2.8 was made to be conditionally compiled. Given this past
practice, make use of the virNetworkGetDHCPLeases API
conditional too, rather than requiring newer libvirt.
---
configure.ac | 6 ++-
.../libvirt-gobject-network-dhcp-lease.c | 50 ++++++++++++++++++++++
libvirt-gobject/libvirt-gobject-network.c | 12 ++++++
3 files changed, 67 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 26beada..228788e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,7 +9,7 @@ AC_CANONICAL_HOST
AM_SILENT_RULES([yes])
-LIBVIRT_REQUIRED=1.2.6
+LIBVIRT_REQUIRED=0.10.2
AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file
GLIB2_REQUIRED=2.36.0
AC_SUBST([GLIB2_REQUIRED]) dnl used in the .spec file
@@ -97,6 +97,10 @@ PKG_CHECK_MODULES(LIBVIRT, libvirt >= $LIBVIRT_REQUIRED)
AC_CHECK_LIB([virt],
[virDomainOpenGraphicsFD],
[AC_DEFINE([HAVE_VIR_DOMAIN_OPEN_GRAPHICS_FD], 1, [Have virDomainOpenGraphicsFD?])])
+# virNetworkGetDHCPLeases was introduced in libvirt 1.2.6
+AC_CHECK_LIB([virt],
+ [virNetworkGetDHCPLeases],
+ [AC_DEFINE([HAVE_VIR_NETWORK_GET_DHCP_LEASES], 1, [Have virNetworkGetDHCPLeases?])])
enable_tests=no
PKG_CHECK_MODULES(GLIB2, glib-2.0 >= $GLIB2_TEST_REQUIRED,
[enable_tests=yes],
diff --git a/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c b/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
index 6ac3c14..90a402b 100644
--- a/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
+++ b/libvirt-gobject/libvirt-gobject-network-dhcp-lease.c
@@ -30,14 +30,20 @@
#include "libvirt-glib/libvirt-glib.h"
#include "libvirt-gobject/libvirt-gobject.h"
#include "libvirt-gobject-compat.h"
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
#include "libvirt-gobject/libvirt-gobject-network-dhcp-lease-private.h"
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
#define GVIR_NETWORK_DHCP_LEASE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_NETWORK_DHCP_LEASE, GVirNetworkDHCPLeasePrivate))
struct _GVirNetworkDHCPLeasePrivate
{
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
virNetworkDHCPLeasePtr handle;
+#else
+ void *handle;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
};
G_DEFINE_TYPE(GVirNetworkDHCPLease, gvir_network_dhcp_lease, G_TYPE_OBJECT);
@@ -75,8 +81,10 @@ static void gvir_network_dhcp_lease_set_property(GObject *object,
switch (prop_id) {
case PROP_HANDLE:
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
if (priv->handle)
virNetworkDHCPLeaseFree(priv->handle);
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
priv->handle = g_value_get_pointer(value);
break;
@@ -89,11 +97,15 @@ static void gvir_network_dhcp_lease_set_property(GObject *object,
static void gvir_network_dhcp_lease_finalize(GObject *object)
{
GVirNetworkDHCPLease *lease = GVIR_NETWORK_DHCP_LEASE(object);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
GVirNetworkDHCPLeasePrivate *priv = lease->priv;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
g_debug("Finalize GVirNetworkDHCPLease=%p", lease);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
virNetworkDHCPLeaseFree(priv->handle);
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
G_OBJECT_CLASS(gvir_network_dhcp_lease_parent_class)->finalize(object);
}
@@ -127,12 +139,14 @@ static void gvir_network_dhcp_lease_init(GVirNetworkDHCPLease *lease)
lease->priv = GVIR_NETWORK_DHCP_LEASE_GET_PRIVATE(lease);
}
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
GVirNetworkDHCPLease *gvir_network_dhcp_lease_new(virNetworkDHCPLeasePtr handle)
{
return g_object_new(GVIR_TYPE_NETWORK_DHCP_LEASE,
"handle", handle,
NULL);
}
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
/**
* gvir_network_dhcp_lease_get_iface:
@@ -144,7 +158,11 @@ const gchar *gvir_network_dhcp_lease_get_iface(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->iface;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -157,7 +175,11 @@ gint64 gvir_network_dhcp_lease_get_expiry_time(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), -1);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->expirytime;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return -1;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -170,7 +192,11 @@ gint gvir_network_dhcp_lease_get_ip_type(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), -1);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->type;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return -1;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -183,7 +209,11 @@ const gchar *gvir_network_dhcp_lease_get_mac(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->mac;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -196,7 +226,11 @@ const gchar *gvir_network_dhcp_lease_get_iaid(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->iaid;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -209,7 +243,11 @@ const gchar *gvir_network_dhcp_lease_get_ip(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->ipaddr;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -222,7 +260,11 @@ guint gvir_network_dhcp_lease_get_prefix(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), 0);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->prefix;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return 0;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -235,7 +277,11 @@ const gchar *gvir_network_dhcp_lease_get_hostname(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->hostname;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
/**
@@ -248,5 +294,9 @@ const gchar *gvir_network_dhcp_lease_get_client_id(GVirNetworkDHCPLease *lease)
{
g_return_val_if_fail(GVIR_IS_NETWORK_DHCP_LEASE(lease), NULL);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
return lease->priv->handle->clientid;
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
diff --git a/libvirt-gobject/libvirt-gobject-network.c b/libvirt-gobject/libvirt-gobject-network.c
index 45dbb71..a278105 100644
--- a/libvirt-gobject/libvirt-gobject-network.c
+++ b/libvirt-gobject/libvirt-gobject-network.c
@@ -29,7 +29,9 @@
#include "libvirt-glib/libvirt-glib.h"
#include "libvirt-gobject/libvirt-gobject.h"
#include "libvirt-gobject-compat.h"
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
#include "libvirt-gobject/libvirt-gobject-network-dhcp-lease-private.h"
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
#define GVIR_NETWORK_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), GVIR_TYPE_NETWORK, GVirNetworkPrivate))
@@ -249,14 +251,17 @@ GList *gvir_network_get_dhcp_leases(GVirNetwork *network,
guint flags,
GError **err)
{
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
virNetworkDHCPLeasePtr *leases;
GList *ret = NULL;
int num_leases, i;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
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);
+#ifdef HAVE_VIR_NETWORK_GET_DHCP_LEASES
num_leases = virNetworkGetDHCPLeases(network->priv->handle, mac, &leases, flags);
if (num_leases < 0) {
gvir_set_error_literal(err, GVIR_NETWORK_ERROR,
@@ -277,4 +282,11 @@ GList *gvir_network_get_dhcp_leases(GVirNetwork *network,
free(leases);
return g_list_reverse(ret);
+#else /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
+ (void)mac;
+ gvir_set_error_literal(err, GVIR_NETWORK_ERROR,
+ 0,
+ "Unable to get network DHCP leases");
+ return NULL;
+#endif /* HAVE_VIR_NETWORK_GET_DHCP_LEASES */
}
--
2.4.3
More information about the libvir-list
mailing list