blob: d90df075adc150aa97a22856dd30e2248ede51f9 [file] [log] [blame]
#ifndef NET_SNMP_TYPES_H
#define NET_SNMP_TYPES_H
/**
* Definitions of data structures, used within the library API.
*/
#include <stdio.h>
#ifndef NET_SNMP_CONFIG_H
#error "Please include <net-snmp/net-snmp-config.h> before this file"
#endif
/*
* For 'timeval'
*/
#if TIME_WITH_SYS_TIME
# ifdef WIN32
# include <sys/timeb.h>
# else
# include <sys/time.h>
# endif
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#include <sys/types.h>
#if 1
/*
* If neither the Microsoft winsock header file nor the MinGW winsock header
* file has already been included, do this now.
*/
# if defined(HAVE_WINSOCK2_H) && defined(HAVE_WS2TCPIP_H)
# if !defined(__MINGW32__) && !defined(HAVE_WIN32_PLATFORM_SDK) && \
_MSC_VER -0 <= 1200 && _WIN32_WINNT -0 >= 0x0400
/*
* When using the MSVC 6 header files, including <winsock2.h> when
* _WIN32_WINNT >= 0x0400 results in a compilation error. Hence include
* <windows.h> instead, because <winsock2.h> is included from inside
* <windows.h> when _WIN32_WINNT >= 0x0400. The SDK version of <windows.h>
* does not include <winsock2.h> however.
*/
# include <windows.h>
# else
# include <winsock2.h>
# endif
# include <ws2tcpip.h>
# elif defined(HAVE_WINSOCK_H)
# include <winsock.h>
# endif
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h> /* For definition of in_addr_t */
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef MAX_SUBID /* temporary - duplicate definition protection */
#ifndef EIGHTBIT_SUBIDS
typedef u_long oid;
#define MAX_SUBID 0xFFFFFFFFUL
#define NETSNMP_PRIo "l"
#else
typedef u_char oid;
#define MAX_SUBID 0xFF
#define NETSNMP_PRIo ""
#endif
#endif
#ifndef HAVE_SOCKLEN_T
typedef u_int socklen_t;
#endif
#ifndef HAVE_IN_ADDR_T
/*
* The type in_addr_t must match the type of sockaddr_in::sin_addr.
* For MSVC and MinGW32, this is u_long.
*/
typedef u_long in_addr_t;
#endif
#ifndef HAVE_SSIZE_T
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
typedef int ssize_t;
#else
typedef long ssize_t;
#endif
#endif
/*
* Try to ensure we have 32-bit (and hopefully 64-bit)
* integer types available.
*/
#ifndef HAVE_INT8_T
typedef signed char int8_t;
#endif /* !HAVE_INT8_T */
#ifndef HAVE_UINT8_T
#ifdef HAVE_U_INT8_T
typedef u_int8_t uint8_t;
#else
typedef unsigned char uint8_t;
#endif
#endif /* !HAVE_UINT8_T */
#ifndef HAVE_INT16_T
#if SIZEOF_INT == 2
#define INT16_T int
#elif SIZEOF_SHORT == 2
#define INT16_T short
#else
#define _INT16_IS_NOT_16BIT
#define INT16_T short
#endif
typedef INT16_T int16_t;
#endif /* !HAVE_INT16_T */
#ifndef HAVE_UINT16_T
#ifdef HAVE_U_INT16_T
typedef u_int16_t uint16_t;
#else
#ifdef INT16_T
typedef unsigned INT16_T uint16_t;
#else
typedef unsigned short uint16_t;
#endif
#endif
#endif /* !HAVE_UINT16_T */
#ifndef HAVE_INT32_T
#if SIZEOF_INT == 4
#define INT32_T int
#elif SIZEOF_LONG == 4
#define INT32_T long
#elif SIZEOF_SHORT == 4
#define INT32_T short
#else
#define _INT32_IS_NOT_32BIT
#define INT32_T int
#endif
typedef INT32_T int32_t;
#endif /* !HAVE_INT32_T */
#ifndef HAVE_UINT32_T
#ifdef HAVE_U_INT32_T
typedef u_int32_t uint32_t;
#else
#ifdef INT32_T
typedef unsigned INT32_T uint32_t;
#else
typedef unsigned int uint32_t;
#endif
#endif
#endif /* !HAVE_UINT32_T */
#ifndef HAVE_INT64_T
#if SIZEOF_LONG == 8
#define INT64_T long
#elif SIZEOF_LONG_LONG == 8
#define INT64_T long long
#elif SIZEOF_INT == 8
#define INT64_T int
#elif SIZEOF_LONG >= 8
#define INT64_T long
#define _INT64_IS_NOT_64BIT
#endif
#ifdef INT64_T
typedef INT64_T int64_t;
#define HAVE_INT64_T 1
#endif
#endif /* !HAVE_INT64_T */
#ifndef HAVE_UINT64_T
#ifdef HAVE_U_INT64_T
typedef u_int64_t uint64_t;
#elif defined(INT64_T)
typedef unsigned INT64_T uint64_t;
#endif
#define HAVE_UINT64_T 1
#endif
#ifndef HAVE_INTMAX_T
#ifdef SIZEOF_LONG_LONG
typedef long long intmax_t;
#define SIZEOF_INTMAX_T SIZEOF_LONG_LONG
#elif defined(HAVE_INT64_T) && !defined(_INT64_IS_NOT_64BIT)
typedef int64_t intmax_t;
#define SIZEOF_INTMAX_T 8
#else
typedef long intmax_t;
#define SIZEOF_INTMAX_T SIZEOF_LONG
#endif
#define HAVE_INTMAX_T 1
#endif
#ifndef HAVE_UINTMAX_T
#ifdef SIZEOF_LONG_LONG
typedef unsigned long long uintmax_t;
#elif defined(HAVE_UINT64_T) && !defined(_INT64_IS_NOT_64BIT)
typedef uint64_t uintmax_t;
#else
typedef unsigned long uintmax_t;
#endif
#define HAVE_UINTMAX_T 1
#endif
#ifndef HAVE_UINTPTR_T
#if SIZEOF_LONG == 8
/* likely 64bit machine with 64bit addressing? */
typedef unsigned long uintptr_t;
#else
typedef unsigned uintptr_t;
#endif
#endif
#ifndef HAVE_INTPTR_T
#if SIZEOF_LONG == 8
/* likely 64bit machine with 64bit addressing? */
typedef long intptr_t;
#else
typedef int intptr_t;
#endif
#endif
/*
* For the initial release, this will just refer to the
* relevant UCD header files.
* In due course, the types and structures relevant to the
* Net-SNMP API will be identified, and defined here directly.
*
* But for the time being, this header file is primarily a placeholder,
* to allow application writers to adopt the new header file names.
*/
#include <net-snmp/definitions.h>
#include <net-snmp/library/snmp_api.h>
/*
* #include <net-snmp/library/libsnmp.h>
*/
typedef struct netsnmp_index_s {
size_t len;
oid *oids;
} netsnmp_index;
typedef struct netsnmp_void_array_s {
size_t size;
void * *array;
} netsnmp_void_array;
/*
* references to various types
*/
typedef struct netsnmp_ref_void {
void * val;
} netsnmp_ref_void;
typedef union {
u_long ul;
u_int ui;
u_short us;
u_char uc;
long sl;
int si;
short ss;
char sc;
char * cp;
void * vp;
} netsnmp_cvalue;
#if 0
typedef struct netsnmp_ref_u_char {
u_char * val;
} netsnmp_ref_U_char;
typedef struct netsnmp_ref_char {
char * val;
} netsnmp_ref_void;
typedef struct netsnmp_ref_int_s {
int val;
} netsnmp_ref_int;
typedef struct netsnmp_ref_u_int_s {
u_int val;
} netsnmp_ref_int;
typedef struct netsnmp_ref_u_long_s {
u_long val;
} netsnmp_ref_u_long;
#endif
typedef struct netsnmp_ref_size_t_s {
size_t val;
} * netsnmp_ref_size_t;
#ifdef __cplusplus
}
#endif
#endif /* NET_SNMP_TYPES_H */