blob: a62e66151cb0f95c41dbca58591b98ec1e35f875 [file] [log] [blame]
# -*- autoconf -*-
#########################################
##
# Checks for data structures & members
##
#########################################
##
# Simple checks:
##
# struct arphd
# Agent:
#
AC_CHECK_MEMBERS([struct arphd.at_next],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <net/if.h>
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETINET_IF_ETHER_H
#include <netinet/if_ether.h>
#endif
]])
# struct des_ks_struct
# ('weak_key' indicates older version of OpenSSL)
# Library:
#
if test "x$ac_cv_header_openssl_des_h" = "xyes" ; then
AC_CHECK_MEMBERS([struct des_ks_struct.weak_key],,,[[
#ifdef HAVE_OPENSSL_DES_H
#include <openssl/des.h>
#endif
]])
fi
# struct dirent
# (see also AC_STRUCT_DIRENT_D_TYPE)
# Library:
#
AC_CHECK_MEMBERS([struct dirent.d_type],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_DIRENT_H
#include <dirent.h>
#endif
]])
# struct ethtool_cmd
#
if test "x$ac_cv_header_linux_ethtool_h" = "xyes" ; then
AC_CHECK_MEMBERS([struct ethtool_cmd.speed_hi],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_LINUX_ETHTOOL_H
#include <linux/ethtool.h>
#endif
]])
fi
# struct ipstat
# Agent:
#
AC_CHECK_MEMBERS([struct ipstat.ips_cantfrag,
struct ipstat.ips_delivered,
struct ipstat.ips_fragdropped,
struct ipstat.ips_fragmented,
struct ipstat.ips_localout,
struct ipstat.ips_noproto,
struct ipstat.ips_noroute,
struct ipstat.ips_odropped,
struct ipstat.ips_ofragments,
struct ipstat.ips_reassembled],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETINET_IP_VAR_H
#include <netinet/ip_var.h>
#endif
]])
# struct ip6stat
# Agent:
#
AC_CHECK_MEMBERS([struct ip6stat.ip6s_exthdrtoolong ],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETINET6_IP6_VAR_H
#include <netinet6/ip6_var.h>
#endif
]])
#
# Not-Used:
AC_CHECK_MEMBERS([struct ipstat.ips_cantforward,
struct ipstat.ips_fragtimeout],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETINET_IP_VAR_H
#include <netinet/ip_var.h>
#endif
]])
# struct mbstat
# Not-Used:
#
AC_CHECK_MEMBERS([struct mbstat.m_clusters,
struct mbstat.m_clfree,
struct mbstat.m_mbufs],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#if HAVE_SYS_MBUF_H
#include <sys/mbuf.h>
#endif
]])
# struct nlist
#
AC_CHECK_MEMBERS([struct nlist.n_value,
struct nlist64.n_value],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_NLIST_H
#include <nlist.h>
#endif
]])
# struct sigaction
# Agent:
#
AC_CHECK_MEMBERS([struct sigaction.sa_sigaction],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SIGNAL_H
#include <sys/signal.h>
#endif
]])
# struct sockaddr
# Library:
#
AC_CHECK_MEMBERS([struct sockaddr.sa_len,
struct sockaddr.sa_union.sa_generic.sa_family2,
struct sockaddr_storage.ss_family,
struct sockaddr_storage.__ss_family],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#elif defined(HAVE_WINSOCK2_H)
#include <winsock2.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
]])
# struct sockaddr_in6 (see RFC 2553)
# Library:
#
AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#ifdef HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
]])
# struct sockaddr_un
# Library:
#
AC_CHECK_SIZEOF([sockaddr_un.sun_path],,[
AC_INCLUDES_DEFAULT
[
#if HAVE_SYS_UN_H
#include <sys/un.h>
#endif
struct sockaddr_un sockaddr_un;
]])
# struct statfs
# Agent:
#
AC_CHECK_MEMBERS([struct statfs.f_favail,
struct statfs.f_ffree,
struct statfs.f_files,
struct statfs.f_flags,
struct statfs.f_frsize],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_SYS_STATFS_H
#include <sys/statfs.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
#ifdef HAVE_NBUTIL_H
#include <nbutil.h>
#endif
]])
# struct statvfs
# Agent:
#
AC_CHECK_MEMBERS([struct statvfs.f_files,
struct statvfs.f_frsize,
struct statvfs.mnt_dir],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_SYS_STATFS_H
#include <sys/statfs.h>
#endif
#if HAVE_SYS_STATVFS_H
#include <sys/statvfs.h>
#endif
]])
# struct swdevt
# Not-Used:
#
AC_CHECK_MEMBERS([struct swdevt.sw_nblksenabled],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#if HAVE_SYS_CONF_H
#include <sys/conf.h>
#endif
]])
# struct tcpstat
# Agent:
#
AC_CHECK_MEMBERS([struct tcpstat.tcp_rcvmemdrop],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_TIMEOUT_H
#include <sys/timeout.h>
#endif
#ifdef HAVE_NETINET_TCP_H
#include <netinet/tcp.h>
#endif
#ifdef HAVE_NETINET_TCP_TIMER_H
#include <netinet/tcp_timer.h>
#endif
#ifdef HAVE_NETINET_TCP_VAR_H
#include <netinet/tcp_var.h>
#endif
]])
# struct tm
# Library:
#
AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[
AC_INCLUDES_DEFAULT()
[
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
]])
# extern timezone
AC_MSG_CHECKING([extern timezone])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
]], [[
return timezone;
]])], [
AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_TIMEZONE_VARIABLE], [1], [Define if a timezone variable is declared in <sys/time.h>])
], [
AC_MSG_RESULT([no])
])
# struct timezone
# Library:
#
AC_CHECK_MEMBERS([struct timezone.tz_dsttime],,,[
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_TIMEB_H
# include <sys/timeb.h>
#endif
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
]])
# struct udpstat
# Agent:
#
AC_CHECK_MEMBERS([struct udpstat.udps_discard,
struct udpstat.udps_fullsock,
struct udpstat.udps_noport,
struct udpstat.udps_noportbcast,
struct udpstat.udps_ipackets,
struct udpstat.udps_opackets],,,[
AC_INCLUDES_DEFAULT()
[
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETINET_IP_VAR_H
#include <netinet/ip_var.h>
#endif
#if HAVE_NETINET_UDP_H
#include <netinet/udp.h>
#endif
#if HAVE_NETINET_UDP_VAR_H
#include <netinet/udp_var.h>
#endif
]])
##
# ifnet-related checks:
##
# Does "struct ifnet" need _KERNEL defined? (Irix)
#
AC_CACHE_CHECK([if _KERNEL needs to be defined for if_mtu],
[ac_cv_IFNET_NEEDS_KERNEL],
[ac_cv_IFNET_NEEDS_KERNEL=unknown
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
], [[struct ifnet test; test.if_mtu = 0;]])],
[ac_cv_IFNET_NEEDS_KERNEL=no])
if test "$ac_cv_IFNET_NEEDS_KERNEL" = unknown ; then
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([
#define _KERNEL 1
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
], [[struct ifnet test; test.if_mtu = 0;]])],
[ac_cv_IFNET_NEEDS_KERNEL=yes])
fi])
if test "x$ac_cv_IFNET_NEEDS_KERNEL" = "xyes"; then
AC_DEFINE(NETSNMP_IFNET_NEEDS_KERNEL, 1,
[ifnet needs to have _KERNEL defined])
fi
# Does "struct ifnet" need _KERNEL_STRUCTURES defined? (DragonFly 3)
#
AC_CACHE_CHECK([if _KERNEL_STRUCTURES needs to be defined for if_mtu],
[ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES],
[ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES=unknown
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
], [[struct ifnet test; test.if_mtu = 0;]])],
[ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES=no])
if test "$ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES" = unknown ; then
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([
#define _KERNEL_STRUCTURES 1
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
], [[struct ifnet test; test.if_mtu = 0;]])],
[ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES=yes])
fi])
if test "x$ac_cv_IFNET_NEEDS_KERNEL_STRUCTURES" = "xyes"; then
AC_DEFINE(NETSNMP_IFNET_NEEDS_KERNEL_STRUCTURES, 1,
[ifnet needs to have _KERNEL_STRUCTURES defined])
fi
# struct ifaddr
# Not-Used:
#
AC_CHECK_MEMBERS([struct ifaddr.ifa_next],,,[
[
#ifdef NETSNMP_IFNET_NEEDS_KERNEL_STRUCTURES
#define _KERNEL_STRUCTURES 1
#endif
#ifdef NETSNMP_IFNET_NEEDS_KERNEL
#define KERNEL
#if !defined(__DragonFly__)
#define _KERNEL 1
#endif
#endif
]
AC_INCLUDES_DEFAULT()
[
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
]])
# struct ifnet
# (Broken on FreeBSD - #define'd in <net/if.h>)
# Agent: (?or Not-Used?)
#
AC_CHECK_MEMBERS([struct ifnet.if_addrlist,
struct ifnet.if_addrhead.tqh_first,
struct ifnet.if_baudrate,
struct ifnet.if_baudrate.ifs_value,
struct ifnet.if_ibytes,
struct ifnet.if_imcasts,
struct ifnet.if_iqdrops,
struct ifnet.if_lastchange.tv_sec,
struct ifnet.if_lastchange.tv_nsec,
struct ifnet.if_mtu,
struct ifnet.if_noproto,
struct ifnet.if_obytes,
struct ifnet.if_omcasts,
struct ifnet.if_speed,
struct ifnet.if_type,
struct ifnet.if_xname],,,[[
#ifdef NETSNMP_IFNET_NEEDS_KERNEL_STRUCTURES
#define _KERNEL_STRUCTURES 1
#endif
#ifdef NETSNMP_IFNET_NEEDS_KERNEL
#define KERNEL
#if !defined(__DragonFly__)
#define _KERNEL 1
#endif
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NET_IF_VAR_H
#include <net/if_var.h>
#endif
#ifdef HAVE_SYS_QUEUE_H
#include <sys/queue.h>
#endif
#ifdef linux
struct ifnet {
char *if_name; /* name, e.g. "en" or "lo" */
short if_unit; /* sub-unit for lower level driver */
short if_mtu; /* maximum transmission unit */
short if_flags; /* up/down, broadcast, etc. */
int if_metric; /* routing metric (external only) */
char if_hwaddr [6]; /* ethernet address */
int if_type; /* interface type: 1=generic,
28=slip, ether=6, loopback=24 */
int if_speed; /* interface speed: in bits/sec */
struct sockaddr if_addr; /* interface's address */
struct sockaddr ifu_broadaddr; /* broadcast address */
struct sockaddr ia_subnetmask; /* interface's mask */
struct ifqueue {
int ifq_len;
int ifq_drops;
} if_snd; /* output queue */
int if_ibytes; /* octets received on interface */
int if_ipackets; /* packets received on interface */
int if_ierrors; /* input errors on interface */
int if_iqdrops; /* input queue overruns */
int if_obytes; /* octets sent on interface */
int if_opackets; /* packets sent on interface */
int if_oerrors; /* output errors on interface */
int if_collisions; /* collisions on csma interfaces */
/* end statistics */
struct ifnet *if_next;
};
#endif
]])
# Check for BSD 4.3 vs 4.4 struct rtentry
#
AC_CACHE_CHECK([type of rtentry structure],
[ac_cv_RTENTRY_TYPE],
[
# BSD 4.4 compatible structure
# ('rt_nodes' array)
#
AC_TRY_COMPILE([
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include <sys/types.h>
#ifdef NETSNMP_IFNET_NEEDS_KERNEL_STRUCTURES
#define _KERNEL_STRUCTURES 1
#endif
#ifdef NETSNMP_IFNET_NEEDS_KERNEL
#define KERNEL
#if !defined(__DragonFly__)
#define _KERNEL 1
#endif
#endif
#include <sys/socket.h>
#undef KERNEL
#undef _KERNEL
#include <net/route.h>
],[
#ifndef HAVE_STRUCT_RTENTRY_RT_DST
#define rt_dst rt_nodes->rn_key
#endif
struct rtentry rt;
rt.rt_nodes[0].rn_flags = 1;
rt.rt_dst;
], ac_cv_RTENTRY_TYPE="BSD-4.4")
if test "x$ac_cv_RTENTRY_TYPE" = "x"; then
# BSD 4.3 compatible structure
# ('rt_hash')
#
AC_TRY_COMPILE([
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include <sys/types.h>
#ifdef NETSNMP_IFNET_NEEDS_KERNEL_STRUCTURES
#define _KERNEL_STRUCTURES 1
#endif
#ifdef NETSNMP_IFNET_NEEDS_KERNEL
#define KERNEL
#if !defined(__DragonFly__)
#define _KERNEL 1
#endif
#endif
#include <sys/socket.h>
#undef KERNEL
#undef _KERNEL
#include <net/route.h>
],[
struct rtentry rt;
rt.rt_hash;
], ac_cv_RTENTRY_TYPE="BSD-4.3")
fi
if test "x$ac_cv_RTENTRY_TYPE" = "x"; then
# Neither BSD 4.3 nor 4.4 compatible structure
#
ac_cv_RTENTRY_TYPE="unknown"
fi
])
if test "x$ac_cv_RTENTRY_TYPE" = "xBSD-4.4"; then
AC_DEFINE(RTENTRY_4_4, 1, [Use BSD 4.4 routing table entries?])
fi
# Check for ortentry (Alpha)
#
if test "x$ac_cv_RTENTRY_TYPE" = "xunknown"; then
AC_CACHE_CHECK([for struct rtentry],
[ac_cv_struct_rtentry],
[AC_EGREP_CPP(ortentry,
[
#define KERNEL
#include <net/route.h>
],
[ac_cv_struct_rtentry=ortentry],
[ac_cv_struct_rtentry=rtentry ])
if test "x$ac_cv_struct_rtentry" = "xrtentry" ; then
ac_cv_struct_rtentry="rtentry"
else
ac_cv_struct_rtentry="ortentry"
fi
])
else
RTENTRY_TYPE="rtentry"
ac_cv_struct_rtentry="rtentry"
fi
if test "x$ac_cv_struct_rtentry" = "x"; then
ac_cv_struct_rtentry=rtentry
fi
AC_DEFINE_UNQUOTED(RTENTRY,struct ${ac_cv_struct_rtentry},
[define rtentry to ortentry on SYSV machines (alphas)])