[libvirt] [PATCH glib] Make use of DHCP API conditionally compiled

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Tue Jul 21 14:56:54 UTC 2015


On Tue, Jul 21, 2015 at 3:20 PM, Daniel P. Berrange <berrange at redhat.com> wrote:
> 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);

Why not just move this debug below to avoid adding two #ifdef here?

> +#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

Similarly here. I'd just add on #ifdef. If macro is not defined, just
return NULL.

>      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
>



-- 
Regards,

Zeeshan Ali (Khattak)
________________________________________
Befriend GNOME: http://www.gnome.org/friends/




More information about the libvir-list mailing list