blob: 2b767d6218707f8c25bc21098d534cfc42a71855 [file] [log] [blame]
/*
* tools.h
*/
#ifndef _TOOLS_H
#define _TOOLS_H
#ifdef __cplusplus
extern "C" {
#endif
/*
* General acros and constants.
*/
#ifdef WIN32
# define SNMP_MAXPATH MAX_PATH
#else
# ifdef PATH_MAX
# define SNMP_MAXPATH PATH_MAX
# else
# define SNMP_MAXPATH MAXPATHLEN
# endif
#endif
#define SNMP_MAXBUF (1024 * 4)
#define SNMP_MAXBUF_MEDIUM 1024
#define SNMP_MAXBUF_SMALL 512
#define SNMP_MAXBUF_MESSAGE 1500
#define SNMP_MAXOID 64
#define SNMP_FILEMODE_CLOSED 0600
#define SNMP_FILEMODE_OPEN 0644
#define BYTESIZE(bitsize) ((bitsize + 7) >> 3)
#define ROUNDUP8(x) ( ( (x+7) >> 3 ) * 8 )
#define SNMP_FREE(s) if (s) { free((void *)s); s=NULL; }
/* XXX Not optimal everywhere. */
#define SNMP_MALLOC_STRUCT(s) (struct s *) calloc(1, sizeof(struct s))
#define SNMP_ZERO(s,l) if (s) memset(s, 0, l);
#define TOUPPER(c) (c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c)
#define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c)
#define HEX2VAL(s) \
((isalpha(s) ? (TOLOWER(s)-'a'+10) : (TOLOWER(s)-'0')) & 0xf)
#define VAL2HEX(s) ( (s) + (((s) >= 10) ? ('a'-10) : '0') )
#define SNMP_MAX(a,b) ((a) > (b) ? (a) : (b))
#define SNMP_MIN(a,b) ((a) > (b) ? (b) : (a))
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
/*
* QUIT the FUNction:
* e Error code variable
* l Label to goto to cleanup and get out of the function.
*
* XXX It would be nice if the label could be constructed by the
* preprocessor in context. Limited to a single error return value.
* Temporary hack at best.
*/
#define QUITFUN(e, l) \
if ( (e) != SNMPERR_SUCCESS) { \
rval = SNMPERR_GENERR; \
goto l ; \
}
/*
* DIFFTIMEVAL
* Set <diff> to the difference between <now> (current) and <then> (past).
*
* ASSUMES that all inputs are (struct timeval)'s.
* Cf. system.c:calculate_time_diff().
*/
#define DIFFTIMEVAL(now, then, diff) \
{ \
now.tv_sec--; \
now.tv_usec += 1000000L; \
diff.tv_sec = now.tv_sec - then.tv_sec; \
diff.tv_usec = now.tv_usec - then.tv_usec; \
if (diff.tv_usec > 1000000L){ \
diff.tv_usec -= 1000000L; \
diff.tv_sec++; \
} \
}
/*
* ISTRANSFORM
* ASSUMES the minimum length for ttype and toid.
*/
#define USM_LENGTH_OID_TRANSFORM 10
#define ISTRANSFORM(ttype, toid) \
!snmp_oid_compare(ttype, USM_LENGTH_OID_TRANSFORM, \
usm ## toid ## Protocol, USM_LENGTH_OID_TRANSFORM)
#define ENGINETIME_MAX 2147483647 /* ((2^31)-1) */
#define ENGINEBOOT_MAX 2147483647 /* ((2^31)-1) */
/*
* Prototypes.
*/
void free_zero (void *buf, size_t size);
u_char *malloc_random (size_t *size);
u_char *malloc_zero (size_t size);
int memdup (u_char **to, const u_char *from, size_t size);
u_int binary_to_hex (const u_char *input, size_t len, char **output);
int hex_to_binary2 (const u_char *input, size_t len, char **output);
void dump_chunk (const char *debugtoken, const char *title, const u_char *buf, int size);
char *dump_snmpEngineID (const u_char *buf, size_t *buflen);
typedef void * marker_t;
marker_t atime_newMarker(void);
void atime_setMarker(marker_t pm);
long atime_diff( marker_t first, marker_t second );
int atime_ready( marker_t pm, int deltaT);
#ifdef __cplusplus
}
#endif
#endif /* _TOOLS_H */