# -*- 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 #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #include #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETINET_IF_ETHER_H #include #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 #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 #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 #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 #endif #if HAVE_NETINET_IP_VAR_H #include #endif ]]) # struct ip6stat # Agent: # AC_CHECK_MEMBERS([struct ip6stat.ip6s_exthdrtoolong ],,,[ AC_INCLUDES_DEFAULT() [ #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETINET6_IP6_VAR_H #include #endif ]]) # # Not-Used: AC_CHECK_MEMBERS([struct ipstat.ips_cantforward, struct ipstat.ips_fragtimeout],,,[ AC_INCLUDES_DEFAULT() [ #if HAVE_NETINET_IN_H #include #endif #if HAVE_NETINET_IP_VAR_H #include #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 #endif #if HAVE_SYS_MBUF_H #include #endif ]]) # struct uvmexp # AC_CHECK_MEMBERS([struct uvmexp.pgswapin],,,[ AC_INCLUDES_DEFAULT() [ #include #include ]]) # struct nlist # AC_CHECK_MEMBERS([struct nlist.n_value, struct nlist64.n_value],,,[ AC_INCLUDES_DEFAULT() [ #if HAVE_NLIST_H #include #endif ]]) # struct sigaction # Agent: # AC_CHECK_MEMBERS([struct sigaction.sa_sigaction],,,[ AC_INCLUDES_DEFAULT() [ #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SIGNAL_H #include #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 #endif #ifdef HAVE_SYS_SOCKET_H #include #elif defined(HAVE_WINSOCK2_H) #include #endif #ifdef HAVE_WS2TCPIP_H #include #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 #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_WINSOCK2_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]]) # struct sockaddr_un # Library: # AC_CHECK_SIZEOF([sockaddr_un.sun_path],,[ AC_INCLUDES_DEFAULT [ #if HAVE_SYS_UN_H #include #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 #endif #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_MOUNT_H #include #endif #ifdef HAVE_NBUTIL_H #include #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 #endif #if HAVE_SYS_STATVFS_H #include #endif ]]) # struct swdevt # Not-Used: # AC_CHECK_MEMBERS([struct swdevt.sw_nblksenabled],,,[ AC_INCLUDES_DEFAULT() [ #ifdef HAVE_SYS_PARAM_H #include #endif #if HAVE_SYS_CONF_H #include #endif ]]) # struct tcpstat # Agent: # AC_CHECK_MEMBERS([struct tcpstat.tcp_rcvmemdrop],,,[ AC_INCLUDES_DEFAULT() [ #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TIMEOUT_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_NETINET_TCP_TIMER_H #include #endif #ifdef HAVE_NETINET_TCP_VAR_H #include #endif ]]) # struct tm # Library: # AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct time.tm_isdst],,,[ AC_INCLUDES_DEFAULT() [ #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif ]]) # extern timezone AC_MSG_CHECKING([extern timezone]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif ]], [[ return timezone; ]])], [ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_TIMEZONE_VARIABLE], [1], [Define if a timezone variable is declared in ]) ], [ AC_MSG_RESULT([no]) ]) # struct timezone # Library: # AC_CHECK_MEMBERS([struct timezone.tz_dsttime],,,[ AC_INCLUDES_DEFAULT() [ #ifdef HAVE_SYS_TIMEB_H # include #endif #if TIME_WITH_SYS_TIME # include # include #else # ifdef HAVE_SYS_TIME_H # include # else # include # 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 #endif #if HAVE_NETINET_IP_VAR_H #include #endif #if HAVE_NETINET_UDP_H #include #endif #if HAVE_NETINET_UDP_VAR_H #include #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 #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #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 #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #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 #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #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 #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #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 #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #endif ]]) # struct ifnet # (Broken on FreeBSD - #define'd in ) # 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 #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_NET_IF_VAR_H #include #endif #ifdef HAVE_SYS_QUEUE_H #include #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 #endif #include #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 #undef KERNEL #undef _KERNEL #include ],[ #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 #endif #include #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 #undef KERNEL #undef _KERNEL #include ],[ 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 ], [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)]) # prioritynames AC_MSG_CHECKING([syslog prioritynames]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include #if HAVE_SYSLOG_H #define SYSLOG_NAMES #include #endif ]], [[ char *test = prioritynames[0].c_name; printf("%s\n", test); /* so it's not unused */ ]])], [ AC_MSG_RESULT([yes]) AC_DEFINE([HAVE_PRIORITYNAMES], [1], [Define if prioritynames variable is declared in ]) ], [ AC_MSG_RESULT([no]) ])