# -*- 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)])

