347 lines
8.5 KiB
C
347 lines
8.5 KiB
C
/*++
|
|
|
|
Copyright (C) 1992 - 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
snmp.h
|
|
|
|
Abstract:
|
|
|
|
Type definitions for SNMP Extension Agent Development.
|
|
|
|
--*/
|
|
|
|
#ifndef snmp_h
|
|
#define snmp_h
|
|
|
|
#include <windows.h>
|
|
|
|
|
|
//
|
|
// SNMP API Constant Definitions
|
|
//
|
|
|
|
// Purely for code readability
|
|
#define IN
|
|
#define OUT
|
|
|
|
|
|
// API return type
|
|
|
|
#define SNMPAPI int
|
|
|
|
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
|
|
#define SNMP_FUNC_TYPE __stdcall
|
|
#else
|
|
#define SNMP_FUNC_TYPE
|
|
#endif
|
|
|
|
|
|
// API return codes
|
|
#define SNMPAPI_NOERROR TRUE
|
|
#define SNMPAPI_ERROR FALSE
|
|
|
|
|
|
// class field of BER tag
|
|
#define ASN_UNIVERSAL 0x00
|
|
#define ASN_APPLICATION 0x40
|
|
#define ASN_CONTEXTSPECIFIC 0x80
|
|
#define ASN_PRIVATE 0xC0
|
|
|
|
// primative/constructed field of BER tag
|
|
#define ASN_PRIMATIVE 0x00
|
|
#define ASN_CONSTRUCTOR 0x20
|
|
|
|
|
|
// ASN.1 simple types
|
|
#define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x02)
|
|
#define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x04)
|
|
#define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x05)
|
|
#define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x06)
|
|
|
|
// ASN.1 constructor types
|
|
#define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
|
|
#define ASN_SEQUENCEOF ASN_SEQUENCE
|
|
|
|
// ASN.1 application specific primatives
|
|
#define ASN_RFC1155_IPADDRESS (ASN_APPLICATION | ASN_PRIMATIVE | 0x00)
|
|
#define ASN_RFC1155_COUNTER (ASN_APPLICATION | ASN_PRIMATIVE | 0x01)
|
|
#define ASN_RFC1155_GAUGE (ASN_APPLICATION | ASN_PRIMATIVE | 0x02)
|
|
#define ASN_RFC1155_TIMETICKS (ASN_APPLICATION | ASN_PRIMATIVE | 0x03)
|
|
#define ASN_RFC1155_OPAQUE (ASN_APPLICATION | ASN_PRIMATIVE | 0x04)
|
|
#define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING
|
|
|
|
// ASN.1 application specific constructors
|
|
#define ASN_RFC1157_GETREQUEST \
|
|
(ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x00)
|
|
#define ASN_RFC1157_GETNEXTREQUEST \
|
|
(ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x01)
|
|
#define ASN_RFC1157_GETRESPONSE \
|
|
(ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x02)
|
|
#define ASN_RFC1157_SETREQUEST \
|
|
(ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x03)
|
|
#define ASN_RFC1157_TRAP \
|
|
(ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x04)
|
|
|
|
|
|
// PDU error status
|
|
#define SNMP_ERRORSTATUS_NOERROR 0
|
|
#define SNMP_ERRORSTATUS_TOOBIG 1
|
|
#define SNMP_ERRORSTATUS_NOSUCHNAME 2
|
|
#define SNMP_ERRORSTATUS_BADVALUE 3
|
|
#define SNMP_ERRORSTATUS_READONLY 4
|
|
#define SNMP_ERRORSTATUS_GENERR 5
|
|
|
|
|
|
// PDU generic traps
|
|
#define SNMP_GENERICTRAP_COLDSTART 0
|
|
#define SNMP_GENERICTRAP_WARMSTART 1
|
|
#define SNMP_GENERICTRAP_LINKDOWN 2
|
|
#define SNMP_GENERICTRAP_LINKUP 3
|
|
#define SNMP_GENERICTRAP_AUTHFAILURE 4
|
|
#define SNMP_GENERICTRAP_EGPNEIGHLOSS 5
|
|
#define SNMP_GENERICTRAP_ENTERSPECIFIC 6
|
|
|
|
|
|
|
|
//
|
|
// SNMP Error codes
|
|
//
|
|
|
|
// General error codes
|
|
#define SNMP_MEM_ALLOC_ERROR 1
|
|
|
|
// BER API error codes (using Get/Set LastError)
|
|
#define SNMP_BERAPI_INVALID_LENGTH 10
|
|
#define SNMP_BERAPI_INVALID_TAG 11
|
|
#define SNMP_BERAPI_OVERFLOW 12
|
|
#define SNMP_BERAPI_SHORT_BUFFER 13
|
|
#define SNMP_BERAPI_INVALID_OBJELEM 14
|
|
|
|
// PDU API Error Codes
|
|
#define SNMP_PDUAPI_UNRECOGNIZED_PDU 20
|
|
#define SNMP_PDUAPI_INVALID_ES 21
|
|
#define SNMP_PDUAPI_INVALID_GT 22
|
|
|
|
// AUTHENTICATION API Error Codes
|
|
#define SNMP_AUTHAPI_INVALID_VERSION 30
|
|
#define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
|
|
#define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
|
|
|
|
|
|
|
|
//
|
|
// SNMP API Type Definitions
|
|
//
|
|
|
|
typedef long AsnInteger;
|
|
typedef struct {
|
|
BYTE *stream;
|
|
UINT length;
|
|
BOOL dynamic;
|
|
} AsnOctetString;
|
|
typedef struct {
|
|
UINT idLength;
|
|
UINT *ids;
|
|
} AsnObjectIdentifier;
|
|
|
|
typedef AsnOctetString AsnSequence;
|
|
typedef AsnSequence AsnImplicitSequence;
|
|
|
|
typedef AsnOctetString AsnIPAddress;
|
|
typedef AsnOctetString AsnDisplayString;
|
|
typedef DWORD AsnCounter;
|
|
typedef DWORD AsnGauge;
|
|
typedef DWORD AsnTimeticks;
|
|
typedef AsnOctetString AsnOpaque;
|
|
|
|
typedef struct {
|
|
BYTE asnType;
|
|
union {
|
|
// RFC 1155 SimpleSyntax (subset of ISO ASN.1)
|
|
AsnInteger number;
|
|
AsnOctetString string;
|
|
AsnObjectIdentifier object;
|
|
|
|
// ISO ASN.1
|
|
AsnSequence sequence;
|
|
|
|
// RFC 1155 ApplicationSyntax
|
|
AsnIPAddress address;
|
|
AsnCounter counter;
|
|
AsnGauge gauge;
|
|
AsnTimeticks ticks;
|
|
AsnOpaque arbitrary;
|
|
} asnValue;
|
|
} AsnAny;
|
|
|
|
typedef AsnObjectIdentifier AsnObjectName;
|
|
typedef AsnAny AsnObjectSyntax;
|
|
typedef AsnIPAddress AsnNetworkAddress;
|
|
|
|
typedef struct vb {
|
|
AsnObjectName name;
|
|
AsnObjectSyntax value;
|
|
} RFC1157VarBind;
|
|
|
|
typedef struct {
|
|
RFC1157VarBind *list;
|
|
UINT len;
|
|
} RFC1157VarBindList;
|
|
|
|
typedef struct {
|
|
RFC1157VarBindList varBinds;
|
|
AsnInteger requestType;
|
|
AsnInteger requestId;
|
|
AsnInteger errorStatus;
|
|
AsnInteger errorIndex;
|
|
} RFC1157Pdu;
|
|
|
|
typedef struct {
|
|
RFC1157VarBindList varBinds;
|
|
AsnObjectIdentifier enterprise;
|
|
AsnNetworkAddress agentAddr;
|
|
AsnInteger genericTrap;
|
|
AsnInteger specificTrap;
|
|
AsnTimeticks timeStamp;
|
|
} RFC1157TrapPdu;
|
|
|
|
typedef struct {
|
|
BYTE pduType;
|
|
union {
|
|
RFC1157Pdu pdu;
|
|
RFC1157TrapPdu trap;
|
|
} pduValue;
|
|
} RFC1157Pdus;
|
|
|
|
typedef struct {
|
|
AsnObjectIdentifier dstParty;
|
|
AsnObjectIdentifier srcParty;
|
|
RFC1157Pdus pdu;
|
|
AsnOctetString community; // This is temporary
|
|
} SnmpMgmtCom;
|
|
|
|
|
|
|
|
//
|
|
// SNMP Utility Prototypes
|
|
//
|
|
|
|
|
|
// Preferred names for the APIs, prototypes following may change in future.
|
|
|
|
#define SnmpUtilOidCpy(a,b) SNMP_oidcpy(a,b)
|
|
#define SnmpUtilOidAppend(a,b) SNMP_oidappend(a,b)
|
|
#define SnmpUtilOidNCmp(a,b,c) SNMP_oidncmp(a,b,c)
|
|
#define SnmpUtilOidCmp(a,b) SNMP_oidcmp(a,b)
|
|
#define SnmpUtilOidFree(a) SNMP_oidfree(a)
|
|
|
|
#define SnmpUtilVarBindListCpy(a,b) SNMP_CopyVarBindList(a,b)
|
|
#define SnmpUtilVarBindCpy(a,b) SNMP_CopyVarBind(a,b)
|
|
#define SnmpUtilVarBindListFree(a) SNMP_FreeVarBindList(a)
|
|
#define SnmpUtilVarBindFree(a) SNMP_FreeVarBind(a)
|
|
|
|
#define SnmpUtilPrintAsnAny(a) SNMP_printany(a)
|
|
|
|
#ifdef SNMPDBG
|
|
#define SNMP_free(x) SNMP_DBG_free(x, __LINE__, __FILE__)
|
|
#define SNMP_malloc(x) SNMP_DBG_malloc(x, __LINE__, __FILE__)
|
|
#define SNMP_realloc(x, y) SNMP_DBG_realloc(x, y, __LINE__, __FILE__)
|
|
#else
|
|
#define SNMP_free(x) GlobalFree( (HGLOBAL) x )
|
|
#define SNMP_malloc(x) (void *) GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, (DWORD)x )
|
|
#define SNMP_realloc(x, y) (void *) ((x == NULL) ? GlobalAlloc( GMEM_FIXED | GMEM_ZEROINIT, (DWORD) y) : \
|
|
GlobalReAlloc( (HGLOBAL)x, (DWORD)y, GMEM_MOVEABLE | GMEM_ZEROINIT ))
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern void
|
|
SNMP_FUNC_TYPE SNMP_DBG_free(
|
|
IN void *x,
|
|
IN int line,
|
|
IN char *file
|
|
);
|
|
|
|
extern void *
|
|
SNMP_FUNC_TYPE SNMP_DBG_malloc(
|
|
IN unsigned int x,
|
|
IN int line,
|
|
IN char *file
|
|
);
|
|
|
|
extern void *
|
|
SNMP_FUNC_TYPE SNMP_DBG_realloc(
|
|
IN void *x,
|
|
IN unsigned int y,
|
|
IN int line,
|
|
IN char *file
|
|
);
|
|
|
|
|
|
|
|
extern SNMPAPI
|
|
SNMP_FUNC_TYPE SNMP_oidcpy(
|
|
OUT AsnObjectIdentifier *DestObjId, // Destination OID
|
|
IN AsnObjectIdentifier *SrcObjId // Source OID
|
|
);
|
|
|
|
extern SNMPAPI
|
|
SNMP_FUNC_TYPE SNMP_oidappend(
|
|
IN OUT AsnObjectIdentifier *DestObjId, // Destination OID
|
|
IN AsnObjectIdentifier *SrcObjId // Source OID
|
|
);
|
|
|
|
extern SNMPAPI
|
|
SNMP_FUNC_TYPE SNMP_oidncmp(
|
|
IN AsnObjectIdentifier *A, // First OID
|
|
IN AsnObjectIdentifier *B, // Second OID
|
|
IN UINT Len // Max len to compare
|
|
);
|
|
|
|
#define SNMP_oidcmp(A,B) SNMP_oidncmp(A,B,max((A)->idLength,(B)->idLength))
|
|
|
|
extern void
|
|
SNMP_FUNC_TYPE SNMP_oidfree(
|
|
IN OUT AsnObjectIdentifier *Obj // OID to free
|
|
);
|
|
|
|
extern SNMPAPI
|
|
SNMP_FUNC_TYPE SNMP_CopyVarBindList(
|
|
RFC1157VarBindList *dst, // Destination var bind list
|
|
RFC1157VarBindList *src // Source var bind list
|
|
);
|
|
|
|
extern SNMPAPI
|
|
SNMP_FUNC_TYPE SNMP_CopyVarBind(
|
|
RFC1157VarBind *dst, // Destination var bind
|
|
RFC1157VarBind *src // Source var bind
|
|
);
|
|
|
|
|
|
extern void
|
|
SNMP_FUNC_TYPE SNMP_FreeVarBindList(
|
|
RFC1157VarBindList *VarBindList // Variable bindings list to free
|
|
);
|
|
|
|
extern void
|
|
SNMP_FUNC_TYPE SNMP_FreeVarBind(
|
|
RFC1157VarBind *VarBind // Variable binding to free
|
|
);
|
|
|
|
|
|
extern void
|
|
SNMP_FUNC_TYPE SNMP_printany(
|
|
IN AsnAny *Any
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* snmp_h */
|
|
|