[libvirt] [PATCH] Fix build for platforms lacking struct ifreq
Daniel Veillard
veillard at redhat.com
Thu Dec 1 14:22:24 UTC 2011
On Thu, Dec 01, 2011 at 01:31:18PM +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> This ought to fix the build if you have net/if.h but do
> not have struct ifreq
>
> * configure.ac: Check for struct ifreq in net/if.h
> * src/util/virnetdev.c: Conditionalize to avoid use of
> struct ifreq if it does not exist
> ---
> configure.ac | 14 ++++++++++++++
> src/util/virnetdev.c | 42 +++++++++++++++++++++---------------------
> 2 files changed, 35 insertions(+), 21 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index de2f379..77e5cc9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -163,6 +163,20 @@ AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
> sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h \
> net/if.h])
>
> +AC_MSG_CHECKING([for struct ifreq in net/if.h])
> +AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
> + [[
> + #include <net/if.h>
> + ]],
> + [[
> + struct ifreq ifr;
> + ]])],[
> + AC_DEFINE([HAVE_STRUCT_IFREQ],[],[Defined if struct ifreq existsin net/if.h])
> + AC_MSG_RESULT([yes])
> + ],[
> + AC_MSG_RESULT([yes])
> + ])
> +
> dnl Our only use of libtasn1.h is in the testsuite, and can be skipped
> dnl if the header is not present. Assume -ltasn1 is present if the
> dnl header could be found.
> diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
> index 86196a1..3187215 100644
> --- a/src/util/virnetdev.c
> +++ b/src/util/virnetdev.c
> @@ -45,7 +45,7 @@
> virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \
> __FUNCTION__, __LINE__, __VA_ARGS__)
>
> -#ifdef HAVE_NET_IF_H
> +#if defined(HAVE_STRUCT_IFREQ)
> static int virNetDevSetupControlFull(const char *ifname,
> struct ifreq *ifr,
> int domain,
> @@ -87,7 +87,7 @@ static int virNetDevSetupControl(const char *ifname,
> #endif
>
>
> -#ifdef SIOCGIFFLAGS
> +#if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevExists:
> * @ifname
> @@ -130,7 +130,7 @@ int virNetDevExists(const char *ifname)
> #endif
>
>
> -#ifdef SIOCGIFHWADDR
> +#if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevSetMAC:
> * @ifname: interface name to set MTU for
> @@ -186,7 +186,7 @@ int virNetDevSetMAC(const char *ifname,
> #endif
>
>
> -#ifdef SIOCGIFHWADDR
> +#if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevGetMAC:
> * @ifname: interface name to set MTU for
> @@ -320,7 +320,7 @@ virNetDevRestoreMacAddress(const char *linkdev,
> }
>
>
> -#ifdef SIOCGIFMTU
> +#if defined(SIOCGIFMTU) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevGetMTU:
> * @ifname: interface name get MTU for
> @@ -362,7 +362,7 @@ int virNetDevGetMTU(const char *ifname)
> #endif
>
>
> -#ifdef SIOCSIFMTU
> +#if defined(SIOCSIFMTU) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevSetMTU:
> * @ifname: interface name to set MTU for
> @@ -460,7 +460,7 @@ int virNetDevSetNamespace(const char *ifname, int pidInNs)
> return rc;
> }
>
> -#ifdef SIOCSIFNAME
> +#if defined(SIOCSIFNAME) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevSetName:
> * @ifname: name of device
> @@ -510,7 +510,7 @@ int virNetDevSetName(const char* ifname, const char *newifname)
> #endif
>
>
> -#ifdef SIOCSIFFLAGS
> +#if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevSetOnline:
> * @ifname: the interface name
> @@ -571,7 +571,7 @@ int virNetDevSetOnline(const char *ifname,
> #endif
>
>
> -#ifdef SIOCGIFFLAGS
> +#if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
> /**
> * virNetDevIsOnline:
> * @ifname: the interface name
> @@ -626,7 +626,7 @@ int virNetDevIsOnline(const char *ifname,
> *
> * Returns 0 on success, -1 on failure
> */
> -#ifdef __linux__
> +#if defined(SIOCGIFINDEX) && defined(HAVE_STRUCT_IFREQ)
> int virNetDevGetIndex(const char *ifname, int *ifindex)
> {
> int ret = -1;
> @@ -662,7 +662,7 @@ cleanup:
> VIR_FORCE_CLOSE(fd);
> return ret;
> }
> -#else /* ! __linux__ */
> +#else /* ! SIOCGIFINDEX */
> int virNetDevGetIndex(const char *ifname ATTRIBUTE_UNUSED,
> int *ifindex ATTRIBUTE_UNUSED)
> {
> @@ -670,10 +670,10 @@ int virNetDevGetIndex(const char *ifname ATTRIBUTE_UNUSED,
> _("Unable to get interface index on this platform"));
> return -1;
> }
> -#endif /* ! __linux__ */
> +#endif /* ! SIOCGIFINDEX */
>
>
> -#ifdef __linux__
> +#if defined(SIOCGIFVLAN) && defined(HAVE_STRUCT_IFREQ)
> int virNetDevGetVLanID(const char *ifname, int *vlanid)
> {
> struct vlan_ioctl_args vlanargs = {
> @@ -709,7 +709,7 @@ int virNetDevGetVLanID(const char *ifname, int *vlanid)
>
> return ret;
> }
> -#else /* ! __linux__ */
> +#else /* ! SIOCGIFVLAN */
> int virNetDevGetVLanID(const char *ifname ATTRIBUTE_UNUSED,
> int *vlanid ATTRIBUTE_UNUSED)
> {
> @@ -717,7 +717,7 @@ int virNetDevGetVLanID(const char *ifname ATTRIBUTE_UNUSED,
> _("Unable to get VLAN on this platform"));
> return -1;
> }
> -#endif /* ! __linux__ */
> +#endif /* ! SIOCGIFVLAN */
>
>
>
> @@ -816,7 +816,7 @@ cleanup:
> *
> * Returns 0 on success, -errno on failure.
> */
> -#ifdef __linux__
> +#if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ)
> int virNetDevGetIPv4Address(const char *ifname,
> virSocketAddrPtr addr)
> {
> @@ -846,7 +846,7 @@ cleanup:
> return ret;
> }
>
> -#else
> +#else /* ! SIOCGIFADDR */
>
> int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
> virSocketAddrPtr addr ATTRIBUTE_UNUSED)
> @@ -856,7 +856,7 @@ int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
> return -1;
> }
>
> -#endif /* __linux__ */
> +#endif /* ! SIOCGIFADDR */
>
>
> /**
> @@ -871,7 +871,7 @@ int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
> *
> * Returns 1 if the config matches, 0 if the config does not match, or interface does not exist, -1 on error
> */
> -#ifdef __linux__
> +#if defined(HAVE_STRUCT_IFREQ)
> int virNetDevValidateConfig(const char *ifname,
> const unsigned char *macaddr, int ifindex)
> {
> @@ -924,7 +924,7 @@ int virNetDevValidateConfig(const char *ifname,
> VIR_FORCE_CLOSE(fd);
> return ret;
> }
> -#else /* ! __linux__ */
> +#else /* ! HAVE_STRUCT_IFREQ */
> int virNetDevValidateConfig(const char *ifname ATTRIBUTE_UNUSED,
> const unsigned char *macaddr ATTRIBUTE_UNUSED,
> int ifindex ATTRIBUTE_UNUSED)
> @@ -933,7 +933,7 @@ int virNetDevValidateConfig(const char *ifname ATTRIBUTE_UNUSED,
> _("Unable to check interface config on this platform"));
> return -1;
> }
> -#endif /* ! __linux__ */
> +#endif /* ! HAVE_STRUCT_IFREQ */
>
>
> #ifdef __linux__
> --
> 1.7.6.4
ACK, seems this should take care of the reported BSD incompatibility
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list