Fix build for platforms lacking struct ifreq

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
This commit is contained in:
Daniel P. Berrange 2011-12-01 13:31:18 +00:00 committed by Eric Blake
parent 55d76a7270
commit 949e10911a
2 changed files with 35 additions and 21 deletions

View File

@ -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 \ sys/un.h sys/syscall.h netinet/tcp.h ifaddrs.h libtasn1.h \
net/if.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 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 if the header is not present. Assume -ltasn1 is present if the
dnl header could be found. dnl header could be found.

View File

@ -45,7 +45,7 @@
virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \ virReportErrorHelper(VIR_FROM_THIS, code, __FILE__, \
__FUNCTION__, __LINE__, __VA_ARGS__) __FUNCTION__, __LINE__, __VA_ARGS__)
#ifdef HAVE_NET_IF_H #if defined(HAVE_STRUCT_IFREQ)
static int virNetDevSetupControlFull(const char *ifname, static int virNetDevSetupControlFull(const char *ifname,
struct ifreq *ifr, struct ifreq *ifr,
int domain, int domain,
@ -87,7 +87,7 @@ static int virNetDevSetupControl(const char *ifname,
#endif #endif
#ifdef SIOCGIFFLAGS #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevExists: * virNetDevExists:
* @ifname * @ifname
@ -130,7 +130,7 @@ int virNetDevExists(const char *ifname)
#endif #endif
#ifdef SIOCGIFHWADDR #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevSetMAC: * virNetDevSetMAC:
* @ifname: interface name to set MTU for * @ifname: interface name to set MTU for
@ -186,7 +186,7 @@ int virNetDevSetMAC(const char *ifname,
#endif #endif
#ifdef SIOCGIFHWADDR #if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevGetMAC: * virNetDevGetMAC:
* @ifname: interface name to set MTU for * @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: * virNetDevGetMTU:
* @ifname: interface name get MTU for * @ifname: interface name get MTU for
@ -362,7 +362,7 @@ int virNetDevGetMTU(const char *ifname)
#endif #endif
#ifdef SIOCSIFMTU #if defined(SIOCSIFMTU) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevSetMTU: * virNetDevSetMTU:
* @ifname: interface name to set MTU for * @ifname: interface name to set MTU for
@ -460,7 +460,7 @@ int virNetDevSetNamespace(const char *ifname, int pidInNs)
return rc; return rc;
} }
#ifdef SIOCSIFNAME #if defined(SIOCSIFNAME) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevSetName: * virNetDevSetName:
* @ifname: name of device * @ifname: name of device
@ -510,7 +510,7 @@ int virNetDevSetName(const char* ifname, const char *newifname)
#endif #endif
#ifdef SIOCSIFFLAGS #if defined(SIOCSIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevSetOnline: * virNetDevSetOnline:
* @ifname: the interface name * @ifname: the interface name
@ -571,7 +571,7 @@ int virNetDevSetOnline(const char *ifname,
#endif #endif
#ifdef SIOCGIFFLAGS #if defined(SIOCGIFFLAGS) && defined(HAVE_STRUCT_IFREQ)
/** /**
* virNetDevIsOnline: * virNetDevIsOnline:
* @ifname: the interface name * @ifname: the interface name
@ -626,7 +626,7 @@ int virNetDevIsOnline(const char *ifname,
* *
* Returns 0 on success, -1 on failure * Returns 0 on success, -1 on failure
*/ */
#ifdef __linux__ #if defined(SIOCGIFINDEX) && defined(HAVE_STRUCT_IFREQ)
int virNetDevGetIndex(const char *ifname, int *ifindex) int virNetDevGetIndex(const char *ifname, int *ifindex)
{ {
int ret = -1; int ret = -1;
@ -662,7 +662,7 @@ cleanup:
VIR_FORCE_CLOSE(fd); VIR_FORCE_CLOSE(fd);
return ret; return ret;
} }
#else /* ! __linux__ */ #else /* ! SIOCGIFINDEX */
int virNetDevGetIndex(const char *ifname ATTRIBUTE_UNUSED, int virNetDevGetIndex(const char *ifname ATTRIBUTE_UNUSED,
int *ifindex 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")); _("Unable to get interface index on this platform"));
return -1; return -1;
} }
#endif /* ! __linux__ */ #endif /* ! SIOCGIFINDEX */
#ifdef __linux__ #if defined(SIOCGIFVLAN) && defined(HAVE_STRUCT_IFREQ)
int virNetDevGetVLanID(const char *ifname, int *vlanid) int virNetDevGetVLanID(const char *ifname, int *vlanid)
{ {
struct vlan_ioctl_args vlanargs = { struct vlan_ioctl_args vlanargs = {
@ -709,7 +709,7 @@ int virNetDevGetVLanID(const char *ifname, int *vlanid)
return ret; return ret;
} }
#else /* ! __linux__ */ #else /* ! SIOCGIFVLAN */
int virNetDevGetVLanID(const char *ifname ATTRIBUTE_UNUSED, int virNetDevGetVLanID(const char *ifname ATTRIBUTE_UNUSED,
int *vlanid ATTRIBUTE_UNUSED) int *vlanid ATTRIBUTE_UNUSED)
{ {
@ -717,7 +717,7 @@ int virNetDevGetVLanID(const char *ifname ATTRIBUTE_UNUSED,
_("Unable to get VLAN on this platform")); _("Unable to get VLAN on this platform"));
return -1; return -1;
} }
#endif /* ! __linux__ */ #endif /* ! SIOCGIFVLAN */
@ -816,7 +816,7 @@ cleanup:
* *
* Returns 0 on success, -errno on failure. * Returns 0 on success, -errno on failure.
*/ */
#ifdef __linux__ #if defined(SIOCGIFADDR) && defined(HAVE_STRUCT_IFREQ)
int virNetDevGetIPv4Address(const char *ifname, int virNetDevGetIPv4Address(const char *ifname,
virSocketAddrPtr addr) virSocketAddrPtr addr)
{ {
@ -846,7 +846,7 @@ cleanup:
return ret; return ret;
} }
#else #else /* ! SIOCGIFADDR */
int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED, int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
virSocketAddrPtr addr ATTRIBUTE_UNUSED) virSocketAddrPtr addr ATTRIBUTE_UNUSED)
@ -856,7 +856,7 @@ int virNetDevGetIPv4Address(const char *ifname ATTRIBUTE_UNUSED,
return -1; 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 * 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, int virNetDevValidateConfig(const char *ifname,
const unsigned char *macaddr, int ifindex) const unsigned char *macaddr, int ifindex)
{ {
@ -924,7 +924,7 @@ int virNetDevValidateConfig(const char *ifname,
VIR_FORCE_CLOSE(fd); VIR_FORCE_CLOSE(fd);
return ret; return ret;
} }
#else /* ! __linux__ */ #else /* ! HAVE_STRUCT_IFREQ */
int virNetDevValidateConfig(const char *ifname ATTRIBUTE_UNUSED, int virNetDevValidateConfig(const char *ifname ATTRIBUTE_UNUSED,
const unsigned char *macaddr ATTRIBUTE_UNUSED, const unsigned char *macaddr ATTRIBUTE_UNUSED,
int ifindex 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")); _("Unable to check interface config on this platform"));
return -1; return -1;
} }
#endif /* ! __linux__ */ #endif /* ! HAVE_STRUCT_IFREQ */
#ifdef __linux__ #ifdef __linux__