00001
00008 #ifndef _TOOLS_H
00009 #define _TOOLS_H
00010
00011 #ifdef __cplusplus
00012 extern "C" {
00013 #endif
00014
00015
00016
00017
00018
00019
00020 #ifdef WIN32
00021 # define SNMP_MAXPATH MAX_PATH
00022 #else
00023 # ifdef PATH_MAX
00024 # define SNMP_MAXPATH PATH_MAX
00025 # else
00026 # ifdef MAXPATHLEN
00027 # define SNMP_MAXPATH MAXPATHLEN
00028 # else
00029 # define SNMP_MAXPATH 1024
00030 # endif
00031 # endif
00032 #endif
00033
00034 #define SNMP_MAXBUF (1024 * 4)
00035 #define SNMP_MAXBUF_MEDIUM 1024
00036 #define SNMP_MAXBUF_SMALL 512
00037
00038 #define SNMP_MAXBUF_MESSAGE 1500
00039
00040 #define SNMP_MAXOID 64
00041 #define SNMP_MAX_CMDLINE_OIDS 128
00042
00043 #define SNMP_FILEMODE_CLOSED 0600
00044 #define SNMP_FILEMODE_OPEN 0644
00045
00046 #define BYTESIZE(bitsize) ((bitsize + 7) >> 3)
00047 #define ROUNDUP8(x) ( ( (x+7) >> 3 ) * 8 )
00048
00049 #define SNMP_STRORNULL(x) ( x ? x : "(null)")
00050
00053 #define SNMP_FREE(s) do { if (s) { free((void *)s); s=NULL; } } while(0)
00054
00057 #define SNMP_SWIPE_MEM(n,s) do { if (n) free((void *)n); n = s; s=NULL; } while(0)
00058
00059
00060
00061
00064 #define SNMP_MALLOC_STRUCT(s) (struct s *) calloc(1, sizeof(struct s))
00065
00068 #define SNMP_MALLOC_TYPEDEF(td) (td *) calloc(1, sizeof(td))
00069
00072 #define SNMP_ZERO(s,l) do { if (s) memset(s, 0, l); } while(0)
00073
00074
00075 #define TOUPPER(c) (c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c)
00076 #define TOLOWER(c) (c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c)
00077
00078 #define HEX2VAL(s) \
00079 ((isalpha(s) ? (TOLOWER(s)-'a'+10) : (TOLOWER(s)-'0')) & 0xf)
00080 #define VAL2HEX(s) ( (s) + (((s) >= 10) ? ('a'-10) : '0') )
00081
00082
00085 #define SNMP_MAX(a,b) ((a) > (b) ? (a) : (b))
00086
00089 #define SNMP_MIN(a,b) ((a) > (b) ? (b) : (a))
00090
00099 #define SNMP_MACRO_VAL_TO_STR(s) SNMP_MACRO_VAL_TO_STR_PRIV(s)
00100 #define SNMP_MACRO_VAL_TO_STR_PRIV(s) #s
00101
00102 #ifndef FALSE
00103 #define FALSE 0
00104 #endif
00105 #ifndef TRUE
00106 #define TRUE 1
00107 #endif
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 #define QUITFUN(e, l) \
00119 if ( (e) != SNMPERR_SUCCESS) { \
00120 rval = SNMPERR_GENERR; \
00121 goto l ; \
00122 }
00123
00124
00125
00126
00127
00128
00129
00130
00131 #define DIFFTIMEVAL(now, then, diff) \
00132 { \
00133 now.tv_sec--; \
00134 now.tv_usec += 1000000L; \
00135 diff.tv_sec = now.tv_sec - then.tv_sec; \
00136 diff.tv_usec = now.tv_usec - then.tv_usec; \
00137 if (diff.tv_usec > 1000000L){ \
00138 diff.tv_usec -= 1000000L; \
00139 diff.tv_sec++; \
00140 } \
00141 }
00142
00143
00144
00145
00146
00147
00148 #define USM_LENGTH_OID_TRANSFORM 10
00149
00150 #define ISTRANSFORM(ttype, toid) \
00151 !snmp_oid_compare(ttype, USM_LENGTH_OID_TRANSFORM, \
00152 usm ## toid ## Protocol, USM_LENGTH_OID_TRANSFORM)
00153
00154 #define ENGINETIME_MAX 2147483647
00155 #define ENGINEBOOT_MAX 2147483647
00156
00157
00158
00159
00160
00161
00162
00163
00164 int snmp_realloc(u_char ** buf, size_t * buf_len);
00165
00166 void free_zero(void *buf, size_t size);
00167
00168 u_char *malloc_random(size_t * size);
00169 u_char *malloc_zero(size_t size);
00170 int memdup(u_char ** to, const u_char * from, size_t size);
00171
00172 u_int binary_to_hex(const u_char * input, size_t len,
00173 char **output);
00174
00175 int netsnmp_hex_to_binary(u_char ** buf, size_t * buf_len,
00176 size_t * offset, int allow_realloc,
00177 const char *hex, const char *delim);
00178
00179 int snmp_hex_to_binary(u_char ** buf, size_t * buf_len,
00180 size_t * offset, int allow_realloc,
00181 const char *hex);
00182
00183 int hex_to_binary2(const u_char * input, size_t len,
00184 char **output);
00185
00186 int snmp_decimal_to_binary(u_char ** buf, size_t * buf_len,
00187 size_t * out_len,
00188 int allow_realloc,
00189 const char *decimal);
00190 int snmp_strcat(u_char ** buf, size_t * buf_len,
00191 size_t * out_len, int allow_realloc,
00192 const u_char * s);
00193 char *netsnmp_strdup_and_null(const u_char * from,
00194 size_t from_len);
00195
00196 void dump_chunk(const char *debugtoken, const char *title,
00197 const u_char * buf, int size);
00198 char *dump_snmpEngineID(const u_char * buf, size_t * buflen);
00199
00200 typedef void *marker_t;
00201 marker_t atime_newMarker(void);
00202 void atime_setMarker(marker_t pm);
00203 long atime_diff(marker_t first, marker_t second);
00204 u_long uatime_diff(marker_t first, marker_t second);
00205 u_long uatime_hdiff(marker_t first, marker_t second);
00206 int atime_ready(marker_t pm, int deltaT);
00207 int uatime_ready(marker_t pm, unsigned int deltaT);
00208
00209 int marker_tticks(marker_t pm);
00210 int timeval_tticks(struct timeval *tv);
00211 char *netsnmp_getenv(const char *name);
00212
00213 int netsnmp_addrstr_hton(char *ptr, size_t len);
00214
00215 #ifdef __cplusplus
00216 }
00217 #endif
00218 #endif
00219