/*++ Copyright (C) 1992-1996 Microsoft Corporation Module Name: snmp.h Abstract: Definitions for SNMP Extension Agent development. --*/ #ifndef _INC_SNMP #define _INC_SNMP /////////////////////////////////////////////////////////////////////////////// // // // Additional header files // // // /////////////////////////////////////////////////////////////////////////////// #include #ifdef __cplusplus extern "C" { #endif /////////////////////////////////////////////////////////////////////////////// // // // SNMP API return type definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMPAPI INT #define SNMP_FUNC_TYPE WINAPI /////////////////////////////////////////////////////////////////////////////// // // // SNMP API return code definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMPAPI_NOERROR TRUE #define SNMPAPI_ERROR FALSE /////////////////////////////////////////////////////////////////////////////// // // // SNMP API error code definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMP_MEM_ALLOC_ERROR 1 /////////////////////////////////////////////////////////////////////////////// // // // BER API error code definitions // // // /////////////////////////////////////////////////////////////////////////////// #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 code definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20 #define SNMP_PDUAPI_INVALID_ES 21 #define SNMP_PDUAPI_INVALID_GT 22 /////////////////////////////////////////////////////////////////////////////// // // // AUTH API error code definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMP_AUTHAPI_INVALID_VERSION 30 #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32 /////////////////////////////////////////////////////////////////////////////// // // // SNMP PDU error status definitions // // // /////////////////////////////////////////////////////////////////////////////// #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 /////////////////////////////////////////////////////////////////////////////// // // // SNMP PDU generic trap definitions // // // /////////////////////////////////////////////////////////////////////////////// #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 /////////////////////////////////////////////////////////////////////////////// // // // BER encoding definitions // // // /////////////////////////////////////////////////////////////////////////////// #define ASN_UNIVERSAL 0x00 #define ASN_APPLICATION 0x40 #define ASN_CONTEXTSPECIFIC 0x80 #define ASN_PRIVATE 0xC0 #define ASN_PRIMATIVE 0x00 #define ASN_CONSTRUCTOR 0x20 // // For BER tags with a number ranging from 0 to 30 (inclusive), the // identifier octets consists of a single octet encoded as follows: // // 7 6 5 4 3 2 1 0 // +---+-+---------+ // |Cls|P| Tag Num | // +---+-+---------+ // // where // // Cls - is the class of the tag // // 00 - universal // 01 - application // 10 - context-specific // 11 - private // // P - indicates whether encoding is primitive // // 0 - primitive // 1 - constructed // // Tag Num - is the number of the tag // /////////////////////////////////////////////////////////////////////////////// // // // 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) /////////////////////////////////////////////////////////////////////////////// // // // SNMP ASN type definitions // // // /////////////////////////////////////////////////////////////////////////////// typedef struct { BYTE * stream; // pointer to octet stream UINT length; // number of octets in stream BOOL dynamic; // true if octets must be freed } AsnOctetString; typedef struct { UINT idLength; // number of integers in oid UINT * ids; // pointer to integer stream } AsnObjectIdentifier; typedef LONG AsnInteger; typedef DWORD AsnCounter; typedef DWORD AsnGauge; typedef DWORD AsnTimeticks; typedef AsnOctetString AsnSequence; typedef AsnOctetString AsnImplicitSequence; typedef AsnOctetString AsnIPAddress; typedef AsnOctetString AsnDisplayString; typedef AsnOctetString AsnOpaque; typedef AsnObjectIdentifier AsnObjectName; typedef AsnIPAddress AsnNetworkAddress; typedef struct { BYTE asnType; union { AsnInteger number; AsnOctetString string; AsnObjectIdentifier object; AsnSequence sequence; AsnIPAddress address; AsnCounter counter; AsnGauge gauge; AsnTimeticks ticks; AsnOpaque arbitrary; } asnValue; } AsnAny; typedef AsnAny AsnObjectSyntax; /////////////////////////////////////////////////////////////////////////////// // // // SNMP API type definitions // // // /////////////////////////////////////////////////////////////////////////////// typedef struct vb { AsnObjectName name; // variable's object identifer AsnObjectSyntax value; // variable's value (in asn terms) } RFC1157VarBind; typedef struct { RFC1157VarBind * list; // array of variable bindings UINT len; // number of bindings in array } RFC1157VarBindList; /////////////////////////////////////////////////////////////////////////////// // // // SNMP API prototypes // // // /////////////////////////////////////////////////////////////////////////////// SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidCpy( OUT AsnObjectIdentifier *DstObjId, IN AsnObjectIdentifier *SrcObjId ); SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidAppend( IN OUT AsnObjectIdentifier *DstObjId, IN AsnObjectIdentifier *SrcObjId ); SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidNCmp( IN AsnObjectIdentifier *ObjIdA, IN AsnObjectIdentifier *ObjIdB, IN UINT Len ); SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidCmp( IN AsnObjectIdentifier *ObjIdA, IN AsnObjectIdentifier *ObjIdB ); VOID SNMP_FUNC_TYPE SnmpUtilOidFree( IN OUT AsnObjectIdentifier *ObjId ); SNMPAPI SNMP_FUNC_TYPE SnmpUtilVarBindListCpy( OUT RFC1157VarBindList *DstVarBindList, IN RFC1157VarBindList *SrcVarBindList ); SNMPAPI SNMP_FUNC_TYPE SnmpUtilVarBindCpy( OUT RFC1157VarBind *DstVarBind, IN RFC1157VarBind *SrcVarBind ); VOID SNMP_FUNC_TYPE SnmpUtilVarBindListFree( IN OUT RFC1157VarBindList *VarBindList ); VOID SNMP_FUNC_TYPE SnmpUtilVarBindFree( IN OUT RFC1157VarBind *VarBind ); VOID SNMP_FUNC_TYPE SnmpUtilPrintAsnAny( IN AsnAny *Any ); VOID SNMP_FUNC_TYPE SnmpUtilMemFree( IN OUT LPVOID Addr ); LPVOID SNMP_FUNC_TYPE SnmpUtilMemAlloc( IN UINT Size ); LPVOID SNMP_FUNC_TYPE SnmpUtilMemReAlloc( IN LPVOID Addr, IN UINT NewSize ); /////////////////////////////////////////////////////////////////////////////// // // // SNMP debugging definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMP_LOG_SILENT 0x0 #define SNMP_LOG_FATAL 0x1 #define SNMP_LOG_ERROR 0x2 #define SNMP_LOG_WARNING 0x3 #define SNMP_LOG_TRACE 0x4 #define SNMP_LOG_VERBOSE 0x5 /////////////////////////////////////////////////////////////////////////////// // // // SNMP debugging prototypes // // // /////////////////////////////////////////////////////////////////////////////// VOID SNMP_FUNC_TYPE SnmpUtilDbgPrint( IN INT nLogLevel, // see log levels above... IN LPSTR szFormat, IN ... ); #if DBG #define SNMPDBG(_x_) SnmpUtilDbgPrint _x_ #else #define SNMPDBG(_x_) #endif /////////////////////////////////////////////////////////////////////////////// // // // Miscellaneous definitions // // // /////////////////////////////////////////////////////////////////////////////// #define SNMP_MAX_OID_LEN 0x7f00 // max number of elements in oid /////////////////////////////////////////////////////////////////////////////// // // // Support for old definitions (support disabled via SNMPSTRICT) // // // /////////////////////////////////////////////////////////////////////////////// #ifndef SNMPSTRICT #define SNMP_oidcpy SnmpUtilOidCpy #define SNMP_oidappend SnmpUtilOidAppend #define SNMP_oidncmp SnmpUtilOidNCmp #define SNMP_oidcmp SnmpUtilOidCmp #define SNMP_oidfree SnmpUtilOidFree #define SNMP_CopyVarBindList SnmpUtilVarBindListCpy #define SNMP_FreeVarBindList SnmpUtilVarBindListFree #define SNMP_CopyVarBind SnmpUtilVarBindCpy #define SNMP_FreeVarBind SnmpUtilVarBindFree #define SNMP_printany SnmpUtilPrintAsnAny #define SNMP_free SnmpUtilMemFree #define SNMP_malloc SnmpUtilMemAlloc #define SNMP_realloc SnmpUtilMemReAlloc #define SNMP_DBG_free SnmpUtilMemFree #define SNMP_DBG_malloc SnmpUtilMemAlloc #define SNMP_DBG_realloc SnmpUtilMemReAlloc #endif // SNMPSTRICT #ifdef __cplusplus } #endif #endif // _INC_SNMP