*/
#ifndef lint
-static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.54 2002-07-20 23:31:18 guy Exp $ (LBL)";
+static const char rcsid[] _U_ =
+ "@(#) $Header: /tcpdump/master/tcpdump/print-snmp.c,v 1.56.2.3 2004-03-23 06:59:59 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <sys/param.h>
-#include <sys/time.h>
+#include <tcpdump-stdinc.h>
-#include <ctype.h>
#include <stdio.h>
#include <string.h>
* Universal ASN.1 types
* (we only care about the tag values for those allowed in the Internet SMI)
*/
-char *Universal[] = {
+const char *Universal[] = {
"U-0",
"Boolean",
"Integer",
/*
* Application-wide ASN.1 types from the Internet SMI and their tags
*/
-char *Application[] = {
+const char *Application[] = {
"IpAddress",
#define IPADDR 0
"Counter",
/*
* Context-specific ASN.1 types for the SNMP PDUs and their tags
*/
-char *Context[] = {
+const char *Context[] = {
"GetRequest",
#define GETREQ 0
"GetNextRequest",
/*
* Context-specific ASN.1 types for the SNMP Exceptions and their tags
*/
-char *Exceptions[] = {
+const char *Exceptions[] = {
"noSuchObject",
#define NOSUCHOBJECT 0
"noSuchInstance",
* Private ASN.1 types
* The Internet SMI does not specify any
*/
-char *Private[] = {
+const char *Private[] = {
"P-0"
};
/*
* error-status values for any SNMP PDU
*/
-char *ErrorStatus[] = {
+const char *ErrorStatus[] = {
"noError",
"tooBig",
"noSuchName",
"inconsistentName"
};
#define DECODE_ErrorStatus(e) \
- ( e >= 0 && e < sizeof(ErrorStatus)/sizeof(ErrorStatus[0]) \
+ ( e >= 0 && (size_t)e < sizeof(ErrorStatus)/sizeof(ErrorStatus[0]) \
? ErrorStatus[e] \
: (snprintf(errbuf, sizeof(errbuf), "err=%u", e), errbuf))
/*
* generic-trap values in the SNMP Trap-PDU
*/
-char *GenericTrap[] = {
+const char *GenericTrap[] = {
"coldStart",
"warmStart",
"linkDown",
"authenticationFailure",
"egpNeighborLoss",
"enterpriseSpecific"
-#define GT_ENTERPRISE 7
+#define GT_ENTERPRISE 6
};
#define DECODE_GenericTrap(t) \
- ( t >= 0 && t < sizeof(GenericTrap)/sizeof(GenericTrap[0]) \
+ ( t >= 0 && (size_t)t < sizeof(GenericTrap)/sizeof(GenericTrap[0]) \
? GenericTrap[t] \
: (snprintf(buf, sizeof(buf), "gt=%d", t), buf))
*/
#define defineCLASS(x) { "x", x, sizeof(x)/sizeof(x[0]) } /* not ANSI-C */
struct {
- char *name;
- char **Id;
+ const char *name;
+ const char **Id;
int numIDs;
} Class[] = {
defineCLASS(Universal),
/*
* defined forms for ASN.1 types
*/
-char *Form[] = {
+const char *Form[] = {
"Primitive",
#define PRIMITIVE 0
"Constructed",
* This is stored as a general-order tree.
*/
struct obj {
- char *desc; /* name of object */
+ const char *desc; /* name of object */
u_char oid; /* sub-id following parent */
u_char type; /* object type (unused) */
struct obj *child, *next; /* child and next sibling pointers */
* private enterprises tree, and the experimental tree.
*/
struct obj_abrev {
- char *prefix; /* prefix for this abrev */
+ const char *prefix; /* prefix for this abrev */
struct obj *node; /* pointer into object table */
- char *oid; /* ASN.1 encoded OID */
+ const char *oid; /* ASN.1 encoded OID */
} obj_abrev_list[] = {
#ifndef NO_ABREV_MIB
/* .iso.org.dod.internet.mgmt.mib */
/*
* SNMP versions recognized by this module
*/
-char *SnmpVersion[] = {
+const char *SnmpVersion[] = {
"SNMPv1",
#define SNMP_VERSION_1 0
"SNMPv2c",
elem->asnlen = *p;
p++; len--; hdr++;
if (elem->asnlen & ASN_BIT8) {
- int noct = elem->asnlen % ASN_BIT8;
+ u_int32_t noct = elem->asnlen % ASN_BIT8;
elem->asnlen = 0;
if (len < noct) {
ifNotTruncated printf("[asnlen? %d<%d]", len, noct);
{
u_char *p = (u_char *)elem->data.raw;
u_int32_t asnlen = elem->asnlen;
- int i;
+ u_int32_t i;
switch (elem->type) {
case BE_INETADDR:
if (asnlen != ASNLEN_INETADDR)
printf("[inetaddr len!=%d]", ASNLEN_INETADDR);
- for (i = asnlen; i-- > 0; p++) {
+ for (i = asnlen; i-- != 0; p++) {
printf((i == asnlen-1) ? "%u" : ".%u", *p);
}
break;
asn1_print(&elem);
return;
}
- if (count < length)
+ if ((u_int)count < length)
printf("[%d extra after SEQ of varbind]", length - count);
/* descend */
length = elem.asnlen;
fputs("[no PDU]", stdout);
return;
}
- if (count < length)
+ if ((u_int)count < length)
printf("[%d extra after PDU]", length - count);
if (vflag) {
fputs("{ ", stdout);
length -= count;
np += count;
- if (count < length)
+ if ((u_int)count < length)
printf("[%d extra after usm SEQ]", length - count);
}
length -= count;
np += count;
- if (count < length)
+ if ((u_int)count < length)
printf("[%d extra after message SEQ]", length - count);
if (vflag) {
asn1_print(&elem);
return;
}
- if (count < length)
+ if ((u_int)count < length)
printf("[%d extra after iSEQ]", length - count);
/* descend */
length = elem.asnlen;