#ifndef _MPD_DEFS_H
#define _MPD_DEFS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <alloca.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <errno.h>
#include <sys/types.h>
#include <limits.h>
#include <fcntl.h>
#include <signal.h>
#include <poll.h>
#include <unistd.h>
#include <time.h>
#include <stdarg.h>
#include <syslog.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/sysmacros.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/ioctl.h>
#include <sys/sockio.h>
#include <net/if.h>
#include <stropts.h>
#include <sys/tihdr.h>
#include <inet/mib2.h>
#include <string.h>
#include <ctype.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/if_ether.h>
#include <netinet/ip6.h>
#include <netinet/icmp6.h>
#include <net/route.h>
#include <net/if_dl.h>
#include <tiuser.h>
#include <inet/ip.h>
#include <libintl.h>
#include <locale.h>
#include <deflt.h>
#include <libdlpi.h>
#include <libinetutil.h>
#include <libnvpair.h>
#include <libsysevent.h>
#include <sys/sysevent.h>
#include <sys/sysevent/eventdefs.h>
#include <sys/sysevent/ipmp.h>
#include <ipmp_mpathd.h>
#include <ipmp_query_impl.h>
#include <assert.h>
#define D_ALL 0xffff
#define D_PROBE 0x0001
#define D_FAILREP 0x0002
#define D_PHYINT 0x0004
#define D_LOGINT 0x0008
#define D_TARGET 0x0010
#define D_TIMER 0x0020
#define D_PKTBAD 0x0040
#define D_LINKNOTE 0x0080
#define IF_SEPARATOR ':'
#define IPV6_MAX_HOPS 255
#define NUM_PROBE_FAILS 5
#define NUM_PROBE_REPAIRS 10
#define MIN_RANDOM_FACTOR 0.5
#define MAX_RANDOM_FACTOR 1.0
#define MIN_PROBE_TARGETS 3
#define MAX_PROBE_TARGETS 5
#define MIN_RECOVERY_TIME (60000000000LL)
#define MIN_SETTLING_TIME (60000000000LL)
#define TESTADDR_CONF_TIME 20
#define PROBE_STATS_COUNT \
((uint16_t)(NUM_PROBE_REPAIRS * MAX_PROBE_TARGETS + 2))
#define FAILURE_DETECTION_TIME 10000
#define MIN_FAILURE_DETECTION_TIME 100
#define FAILURE_DETECTION_QP 40
#define NEXT_FDT_MULTIPLE 2
#define LOWER_FDT_TRIGGER 4
#define EXCEPTION_FACTOR 2
#define IF_SCAN_INTERVAL 20000
#define GET_RANDOM(LOW, HIGH) (random() % ((HIGH) - (LOW) + 1) + (LOW))
#define TIMER_INFINITY 0x7FFFFFFFU
#define TIME_GE(a, b) ((int32_t)((a) - (b)) >= 0)
#define TIME_GT(a, b) ((int32_t)((a) - (b)) > 0)
#define TIME_LT(a, b) ((int32_t)((a) - (b)) < 0)
#define TIME_LE(a, b) ((int32_t)((a) - (b)) <= 0)
#define SEQ_GE(a, b) ((int16_t)((a) - (b)) >= (int16_t)0)
#define SEQ_GT(a, b) ((int16_t)((a) - (b)) > (int16_t)0)
#define SEQ_LT(a, b) ((int16_t)((a) - (b)) < (int16_t)0)
#define SEQ_LE(a, b) ((int16_t)((a) - (b)) <= (int16_t)0)
#define AF_OTHER(af) ((af) == AF_INET ? AF_INET6 : AF_INET)
#define AF_STR(af) ((af) == AF_INET ? "inet" : "inet6")
extern boolean_t failback_enabled;
extern boolean_t track_all_phyints;
extern int user_probe_interval;
extern int user_failure_detection_time;
extern int ifsock_v4;
extern int ifsock_v6;
extern int debug;
extern boolean_t cleanup_started;
extern boolean_t handle_link_notifications;
extern void timer_schedule(uint_t delay);
extern void logmsg(int pri, const char *fmt, ...);
extern void logperror(const char *str);
extern int poll_add(int fd);
extern int poll_remove(int fd);
extern uint64_t getcurrentsec(void);
extern uint_t getcurrenttime(void);
#define logerr(...) logmsg(LOG_ERR, __VA_ARGS__)
#define logtrace(...) logmsg(LOG_INFO, __VA_ARGS__)
#define logdebug(...) logmsg(LOG_DEBUG, __VA_ARGS__)
#ifdef __cplusplus
}
#endif
#endif