3 #include <net-snmp/net-snmp-config.h>
14 #include <sys/types.h>
16 #include <netinet/in.h>
31 #include <net-snmp/types.h>
32 #include <net-snmp/output_api.h>
33 #include <net-snmp/library/snmp_debug.h> /* For this file's "internal" definitions */
34 #include <net-snmp/config_api.h>
35 #include <net-snmp/utilities.h>
37 #include <net-snmp/library/mib.h>
38 #include <net-snmp/library/snmp_api.h>
40 static int dodebug = SNMP_ALWAYS_DEBUG;
41 static int debug_num_tokens = 0;
42 static char *debug_tokens[MAX_DEBUG_TOKENS];
43 static int debug_print_everything = 0;
46 * indent debugging: provide a space padded section to return an indent for
48 static int debugindent = 0;
50 static char debugindentchars[] =
54 * Prototype definitions
56 void debug_config_register_tokens(const char *configtoken,
58 void debug_config_turn_on_debugging(const char *configtoken,
64 return debugindentchars;
68 debug_indent_add(int amount)
70 if (debugindent + amount >= 0 && debugindent + amount < 80) {
71 debugindentchars[debugindent] = ' ';
72 debugindent += amount;
73 debugindentchars[debugindent] = '\0';
78 debug_config_register_tokens(const char *configtoken, char *tokens)
80 debug_register_tokens(tokens);
84 debug_config_turn_on_debugging(const char *configtoken, char *line)
86 snmp_set_do_debugging(atoi(line));
92 debugindentchars[0] = '\0'; /* zero out the debugging indent array. */
93 #ifdef BRCM_SNMP_SUPPORT
94 register_prenetsnmp_mib_handler("snmp", "doDebugging",
95 debug_config_turn_on_debugging, NULL,
97 register_prenetsnmp_mib_handler("snmp", "debugTokens",
98 debug_config_register_tokens, NULL,
100 #endif /* BRCM_SNMP_SUPPORT */
104 debug_register_tokens(char *tokens)
108 if (tokens == 0 || *tokens == 0)
111 newp = strdup(tokens); /* strtok messes it up */
112 cp = strtok(newp, DEBUG_TOKEN_DELIMITER);
114 if (strlen(cp) < MAX_DEBUG_TOKEN_LEN) {
115 if (strcasecmp(cp, DEBUG_ALWAYS_TOKEN) == 0)
116 debug_print_everything = 1;
117 else if (debug_num_tokens < MAX_DEBUG_TOKENS)
118 debug_tokens[debug_num_tokens++] = strdup(cp);
120 cp = strtok(NULL, DEBUG_TOKEN_DELIMITER);
127 * debug_is_token_registered(char *TOKEN):
129 * returns SNMPERR_SUCCESS
132 * if TOKEN has been registered and debugging support is turned on.
135 debug_is_token_registered(const char *token)
140 * debugging flag is on or off
143 return SNMPERR_GENERR;
145 if (debug_num_tokens == 0 || debug_print_everything) {
147 * no tokens specified, print everything
149 return SNMPERR_SUCCESS;
151 for (i = 0; i < debug_num_tokens; i++) {
152 if (strncmp(debug_tokens[i], token, strlen(debug_tokens[i])) ==
154 return SNMPERR_SUCCESS;
158 return SNMPERR_GENERR;
163 debugmsg(const char *token, const char *format, ...)
172 va_start(debugargs, format);
178 token = va_arg(debugargs, const char *);
179 format = va_arg(debugargs, const char *); /* ??? */
182 if (debug_is_token_registered(token) == SNMPERR_SUCCESS) {
183 snmp_vlog(LOG_DEBUG, format, debugargs);
189 debugmsg_oid(const char *token, const oid * theoid, size_t len)
192 size_t buf_len = 0, out_len = 0;
194 if (sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid, len)) {
196 debugmsg(token, "%s", buf);
200 debugmsg(token, "%s [TRUNCATED]", buf);
210 debugmsg_var(const char *token, netsnmp_variable_list * var)
213 size_t buf_len = 0, out_len = 0;
215 if (var == NULL || token == NULL) {
219 if (sprint_realloc_variable(&buf, &buf_len, &out_len, 1,
220 var->name, var->name_length, var)) {
222 debugmsg(token, "%s", buf);
226 debugmsg(token, "%s [TRUNCATED]", buf);
236 debugmsg_oidrange(const char *token, const oid * theoid, size_t len,
237 size_t var_subid, oid range_ubound)
240 size_t buf_len = 0, out_len = 0, i = 0;
243 if (var_subid == 0) {
244 rc = sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid,
248 rc = sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid,
251 sprintf(tmpbuf, ".%lu--%lu", theoid[var_subid - 1],
253 rc = snmp_strcat(&buf, &buf_len, &out_len, 1, tmpbuf);
255 for (i = var_subid; i < len; i++) {
256 sprintf(tmpbuf, ".%lu", theoid[i]);
257 if (!snmp_strcat(&buf, &buf_len, &out_len, 1, tmpbuf)) {
267 debugmsg(token, "%s%s", buf, rc ? "" : " [TRUNCATED]");
273 debugmsg_hex(const char *token, u_char * thedata, size_t len)
276 size_t buf_len = 0, out_len = 0;
278 if (sprint_realloc_hexstring
279 (&buf, &buf_len, &out_len, 1, thedata, len)) {
281 debugmsg(token, "%s", buf);
285 debugmsg(token, "%s [TRUNCATED]", buf);
295 debugmsg_hextli(const char *token, u_char * thedata, size_t len)
297 char buf[SPRINT_MAX_LEN], token2[SPRINT_MAX_LEN];
299 size_t b3_len = 0, o3_len = 0;
301 sprintf(token2, "dumpx_%s", token);
304 * XX tracing lines removed from this function DEBUGTRACE;
307 for (incr = 16; len > 0; len -= incr, thedata += incr) {
308 if ((int) len < incr) {
312 * XXnext two lines were DEBUGPRINTINDENT(token);
314 sprintf(buf, "dumpx%s", token);
315 debugmsg(buf, "%s: %s", token2, debug_indent());
316 if (sprint_realloc_hexstring
317 (&b3, &b3_len, &o3_len, 1, thedata, incr)) {
319 debugmsg(token2, "%s", b3);
323 debugmsg(token2, "%s [TRUNCATED]", b3);
336 debugmsgtoken(const char *token, const char *format, ...)
338 debugmsgtoken(va_alist)
345 va_start(debugargs, format);
350 token = va_arg(debugargs, const char *);
353 debugmsg(token, "%s: ", token);
359 * for speed, these shouldn't be in default_storage space
362 snmp_set_do_debugging(int val)
368 snmp_get_do_debugging(void)
373 #else /* BRCM_SNMP_DEBUG not defined */
375 #include <net-snmp/net-snmp-config.h>
386 #include <sys/types.h>
387 #if HAVE_NETINET_IN_H
388 #include <netinet/in.h>
403 #include <net-snmp/types.h>
404 #include <net-snmp/output_api.h>
405 #include <net-snmp/library/snmp_debug.h> /* For this file's "internal" definitions */
406 #include <net-snmp/config_api.h>
407 #include <net-snmp/utilities.h>
409 #include <net-snmp/library/mib.h>
410 #include <net-snmp/library/snmp_api.h>
413 * Prototype definitions
415 void debug_config_register_tokens(const char *configtoken,
417 void debug_config_turn_on_debugging(const char *configtoken,
419 static int dodebug = SNMP_ALWAYS_DEBUG;
428 debug_indent_add(int amount)
434 debug_config_register_tokens(const char *configtoken, char *tokens)
440 debug_config_turn_on_debugging(const char *configtoken, char *line)
446 snmp_debug_init(void)
452 debug_register_tokens(char *tokens)
459 * debug_is_token_registered(char *TOKEN):
461 * returns SNMPERR_SUCCESS
464 * if TOKEN has been registered and debugging support is turned on.
467 debug_is_token_registered(const char *token)
469 return SNMPERR_GENERR;
474 debugmsg(const char *token, const char *format, ...)
484 debugmsg_oid(const char *token, const oid * theoid, size_t len)
490 debugmsg_var(const char *token, netsnmp_variable_list * var)
496 debugmsg_oidrange(const char *token, const oid * theoid, size_t len,
497 size_t var_subid, oid range_ubound)
503 debugmsg_hex(const char *token, u_char * thedata, size_t len)
509 debugmsg_hextli(const char *token, u_char * thedata, size_t len)
516 debugmsgtoken(const char *token, const char *format, ...)
518 debugmsgtoken(va_alist)
526 * for speed, these shouldn't be in default_storage space
529 snmp_set_do_debugging(int val)
535 snmp_get_do_debugging(void)
540 #endif /* BRCM_SNMP_DEBUG */