/* WinSNMP.h */ /* Copyright (C) 1993-1999 Microsoft Corporation */ /* v1.0 - Sep 13, 1993 */ /* v1.1 - Jun 12, 1994 */ /* v2.0 - Nov 1, 1997 */ /* - Nov 17, 1997: inc limits.h, tests for ULONG/UINT_MAX */ /* - Mar 23, 1998: fixed typo in "lpClientData" */ /* Questions/comments to Bob Natale, bnatale@acecomm.com */ #ifndef _INC_WINSNMP /* Include WinSNMP declarations */ #define _INC_WINSNMP /* Just once! */ #if _MSC_VER > 1000 #pragma once #endif #ifndef _INC_WINDOWS /* Include Windows declarations, if not already done */ #include #define _INC_WINDOWS /* Just once! */ #endif /* _INC_WINDOWS */ #include #ifdef __cplusplus extern "C" { #endif /* WinSNMP API Type Definitions */ typedef HANDLE HSNMP_SESSION, FAR *LPHSNMP_SESSION; typedef HANDLE HSNMP_ENTITY, FAR *LPHSNMP_ENTITY; typedef HANDLE HSNMP_CONTEXT, FAR *LPHSNMP_CONTEXT; typedef HANDLE HSNMP_PDU, FAR *LPHSNMP_PDU; typedef HANDLE HSNMP_VBL, FAR *LPHSNMP_VBL; typedef unsigned char smiBYTE, FAR *smiLPBYTE; /* SNMP-related types */ #if ULONG_MAX == 4294967295U typedef signed long smiINT, FAR *smiLPINT; typedef smiINT smiINT32, FAR *smiLPINT32; typedef unsigned long smiUINT32, FAR *smiLPUINT32; #elif UINT_MAX == 4294967295U typedef int smiINT, FAR *smiLPINT; typedef smiINT smiINT32, FAR *smiLPINT32; typedef unsigned int smiUINT32, FAR *smiLPUINT32; #else #error can not define smiINT and smiUINT #endif typedef struct { smiUINT32 len; smiLPBYTE ptr;} smiOCTETS, FAR *smiLPOCTETS; typedef const smiOCTETS FAR *smiLPCOCTETS; typedef smiOCTETS smiBITS, FAR *smiLPBITS; typedef struct { smiUINT32 len; smiLPUINT32 ptr;} smiOID, FAR *smiLPOID; typedef const smiOID FAR *smiLPCOID; typedef smiOCTETS smiIPADDR, FAR *smiLPIPADDR; typedef smiUINT32 smiCNTR32, FAR *smiLPCNTR32; typedef smiUINT32 smiGAUGE32, FAR *smiLPGAUGE32; typedef smiUINT32 smiTIMETICKS, FAR *smiLPTIMETICKS; typedef smiOCTETS smiOPAQUE, FAR *smiLPOPAQUE; typedef smiOCTETS smiNSAPADDR, FAR *smiLPNSAPADDR; typedef struct { smiUINT32 hipart; smiUINT32 lopart;} smiCNTR64, FAR *smiLPCNTR64; /* ASN/BER Base Types */ /* (used in forming SYNTAXes and certain SNMP types/values) */ #define ASN_UNIVERSAL (0x00) #define ASN_APPLICATION (0x40) #define ASN_CONTEXT (0x80) #define ASN_PRIVATE (0xC0) #define ASN_PRIMITIVE (0x00) #define ASN_CONSTRUCTOR (0x20) /* SNMP ObjectSyntax Values */ #define SNMP_SYNTAX_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10) /* These values are used in the "syntax" member of the smiVALUE structure which follows */ #define SNMP_SYNTAX_INT (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02) #define SNMP_SYNTAX_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03) #define SNMP_SYNTAX_OCTETS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04) #define SNMP_SYNTAX_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05) #define SNMP_SYNTAX_OID (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06) #define SNMP_SYNTAX_INT32 SNMP_SYNTAX_INT #define SNMP_SYNTAX_IPADDR (ASN_APPLICATION | ASN_PRIMITIVE | 0x00) #define SNMP_SYNTAX_CNTR32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01) #define SNMP_SYNTAX_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02) #define SNMP_SYNTAX_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03) #define SNMP_SYNTAX_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04) #define SNMP_SYNTAX_NSAPADDR (ASN_APPLICATION | ASN_PRIMITIVE | 0x05) #define SNMP_SYNTAX_CNTR64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06) #define SNMP_SYNTAX_UINT32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07) #define SNMP_SYNTAX_UNSIGNED32 SNMP_SYNTAX_GAUGE32 /* Exception conditions in response PDUs for SNMPv2 */ #define SNMP_SYNTAX_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00) #define SNMP_SYNTAX_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01) #define SNMP_SYNTAX_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02) typedef struct { /* smiVALUE portion of VarBind */ smiUINT32 syntax; /* Insert SNMP_SYNTAX_ */ union { smiINT sNumber; /* SNMP_SYNTAX_INT SNMP_SYNTAX_INT32 */ smiUINT32 uNumber; /* SNMP_SYNTAX_UINT32 SNMP_SYNTAX_CNTR32 SNMP_SYNTAX_GAUGE32 SNMP_SYNTAX_TIMETICKS */ smiCNTR64 hNumber; /* SNMP_SYNTAX_CNTR64 */ smiOCTETS string; /* SNMP_SYNTAX_OCTETS SNMP_SYNTAX_BITS SNMP_SYNTAX_OPAQUE SNMP_SYNTAX_IPADDR SNMP_SYNTAX_NSAPADDR */ smiOID oid; /* SNMP_SYNTAX_OID */ smiBYTE empty; /* SNMP_SYNTAX_NULL SNMP_SYNTAX_NOSUCHOBJECT SNMP_SYNTAX_NOSUCHINSTANCE SNMP_SYNTAX_ENDOFMIBVIEW */ } value; /* union */ } smiVALUE, FAR *smiLPVALUE; typedef const smiVALUE FAR *smiLPCVALUE; /* SNMP Limits */ #define MAXOBJIDSIZE 128 /* Max number of components in an OID */ #define MAXOBJIDSTRSIZE 1408 /* Max len of decoded MAXOBJIDSIZE OID */ /* PDU Type Values */ #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0) #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1) #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2) #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) /* SNMP_PDU_V1TRAP is obsolete in SNMPv2 */ #define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5) #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6) #define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7) /* SNMPv1 Trap Values */ /* (These values might be superfluous wrt WinSNMP applications) */ #define SNMP_TRAP_COLDSTART 0 #define SNMP_TRAP_WARMSTART 1 #define SNMP_TRAP_LINKDOWN 2 #define SNMP_TRAP_LINKUP 3 #define SNMP_TRAP_AUTHFAIL 4 #define SNMP_TRAP_EGPNEIGHBORLOSS 5 #define SNMP_TRAP_ENTERPRISESPECIFIC 6 /* SNMP Error Codes Returned in Error_status Field of PDU */ /* (these are NOT WinSNMP API Error Codes */ /* Error Codes Common to SNMPv1 and SNMPv2 */ #define SNMP_ERROR_NOERROR 0 #define SNMP_ERROR_TOOBIG 1 #define SNMP_ERROR_NOSUCHNAME 2 #define SNMP_ERROR_BADVALUE 3 #define SNMP_ERROR_READONLY 4 #define SNMP_ERROR_GENERR 5 /* Error Codes Added for SNMPv2 */ #define SNMP_ERROR_NOACCESS 6 #define SNMP_ERROR_WRONGTYPE 7 #define SNMP_ERROR_WRONGLENGTH 8 #define SNMP_ERROR_WRONGENCODING 9 #define SNMP_ERROR_WRONGVALUE 10 #define SNMP_ERROR_NOCREATION 11 #define SNMP_ERROR_INCONSISTENTVALUE 12 #define SNMP_ERROR_RESOURCEUNAVAILABLE 13 #define SNMP_ERROR_COMMITFAILED 14 #define SNMP_ERROR_UNDOFAILED 15 #define SNMP_ERROR_AUTHORIZATIONERROR 16 #define SNMP_ERROR_NOTWRITABLE 17 #define SNMP_ERROR_INCONSISTENTNAME 18 /* WinSNMP API Values */ /* Values used to indicate entity/context translation modes */ #define SNMPAPI_TRANSLATED 0 #define SNMPAPI_UNTRANSLATED_V1 1 #define SNMPAPI_UNTRANSLATED_V2 2 /* Values used to indicate "SNMP level" supported by the implementation */ #define SNMPAPI_NO_SUPPORT 0 #define SNMPAPI_V1_SUPPORT 1 #define SNMPAPI_V2_SUPPORT 2 #define SNMPAPI_M2M_SUPPORT 3 /* Values used to indicate retransmit mode in the implementation */ #define SNMPAPI_OFF 0 /* Refuse support */ #define SNMPAPI_ON 1 /* Request support */ /* WinSNMP API Function Return Codes */ typedef smiUINT32 SNMPAPI_STATUS; /* Used for function ret values */ #define SNMPAPI_FAILURE 0 /* Generic error code */ #define SNMPAPI_SUCCESS 1 /* Generic success code */ /* WinSNMP API Error Codes (for SnmpGetLastError) */ /* (NOT SNMP Response-PDU error_status codes) */ #define SNMPAPI_ALLOC_ERROR 2 /* Error allocating memory */ #define SNMPAPI_CONTEXT_INVALID 3 /* Invalid context parameter */ #define SNMPAPI_CONTEXT_UNKNOWN 4 /* Unknown context parameter */ #define SNMPAPI_ENTITY_INVALID 5 /* Invalid entity parameter */ #define SNMPAPI_ENTITY_UNKNOWN 6 /* Unknown entity parameter */ #define SNMPAPI_INDEX_INVALID 7 /* Invalid VBL index parameter */ #define SNMPAPI_NOOP 8 /* No operation performed */ #define SNMPAPI_OID_INVALID 9 /* Invalid OID parameter */ #define SNMPAPI_OPERATION_INVALID 10 /* Invalid/unsupported operation */ #define SNMPAPI_OUTPUT_TRUNCATED 11 /* Insufficient output buf len */ #define SNMPAPI_PDU_INVALID 12 /* Invalid PDU parameter */ #define SNMPAPI_SESSION_INVALID 13 /* Invalid session parameter */ #define SNMPAPI_SYNTAX_INVALID 14 /* Invalid syntax in smiVALUE */ #define SNMPAPI_VBL_INVALID 15 /* Invalid VBL parameter */ #define SNMPAPI_MODE_INVALID 16 /* Invalid mode parameter */ #define SNMPAPI_SIZE_INVALID 17 /* Invalid size/length parameter */ #define SNMPAPI_NOT_INITIALIZED 18 /* SnmpStartup failed/not called */ #define SNMPAPI_MESSAGE_INVALID 19 /* Invalid SNMP message format */ #define SNMPAPI_HWND_INVALID 20 /* Invalid Window handle */ #define SNMPAPI_OTHER_ERROR 99 /* For internal/undefined errors */ /* Generic Transport Layer (TL) Errors */ #define SNMPAPI_TL_NOT_INITIALIZED 100 /* TL not initialized */ #define SNMPAPI_TL_NOT_SUPPORTED 101 /* TL does not support protocol */ #define SNMPAPI_TL_NOT_AVAILABLE 102 /* Network subsystem has failed */ #define SNMPAPI_TL_RESOURCE_ERROR 103 /* TL resource error */ #define SNMPAPI_TL_UNDELIVERABLE 104 /* Destination unreachable */ #define SNMPAPI_TL_SRC_INVALID 105 /* Source endpoint invalid */ #define SNMPAPI_TL_INVALID_PARAM 106 /* Input parameter invalid */ #define SNMPAPI_TL_IN_USE 107 /* Source endpoint in use */ #define SNMPAPI_TL_TIMEOUT 108 /* No response before timeout */ #define SNMPAPI_TL_PDU_TOO_BIG 109 /* PDU too big for send/receive */ #define SNMPAPI_TL_OTHER 199 /* Undefined TL error */ /* WinSNMP API Function Prototypes */ #ifndef IN #define IN #endif #ifndef OUT #define OUT #endif #define SNMPAPI_CALL WINAPI /* FAR PASCAL calling conventions */ /* v2.0: Structure for SnmpGetVendorInfo() output */ #define MAXVENDORINFO 32 typedef struct { char vendorName[MAXVENDORINFO*2]; char vendorContact[MAXVENDORINFO*2]; char vendorVersionId[MAXVENDORINFO]; char vendorVersionDate[MAXVENDORINFO]; smiUINT32 vendorEnterprise; } smiVENDORINFO, FAR *smiLPVENDORINFO; /* v2.0: Callback format for SnmpCreateSession() fCallback parameter */ typedef SNMPAPI_STATUS (CALLBACK *SNMPAPI_CALLBACK) (IN HSNMP_SESSION hSession, IN HWND hWnd, IN UINT wMsg, IN WPARAM wParam, IN LPARAM lParam, IN LPVOID lpClientData); /* Local Database Functions */ SNMPAPI_STATUS SNMPAPI_CALL SnmpGetTranslateMode (OUT smiLPUINT32 nTranslateMode); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetTranslateMode (IN smiUINT32 nTranslateMode); SNMPAPI_STATUS SNMPAPI_CALL SnmpGetRetransmitMode (OUT smiLPUINT32 nRetransmitMode); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetRetransmitMode (IN smiUINT32 nRetransmitMode); SNMPAPI_STATUS SNMPAPI_CALL SnmpGetTimeout (IN HSNMP_ENTITY hEntity, OUT smiLPTIMETICKS nPolicyTimeout, OUT smiLPTIMETICKS nActualTimeout); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetTimeout (IN HSNMP_ENTITY hEntity, IN smiTIMETICKS nPolicyTimeout); SNMPAPI_STATUS SNMPAPI_CALL SnmpGetRetry (IN HSNMP_ENTITY hEntity, OUT smiLPUINT32 nPolicyRetry, OUT smiLPUINT32 nActualRetry); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetRetry (IN HSNMP_ENTITY hEntity, IN smiUINT32 nPolicyRetry); /* Following Local Database Functions added in v2.0 */ SNMPAPI_STATUS SNMPAPI_CALL SnmpGetVendorInfo (OUT smiLPVENDORINFO vendorInfo); /* Communications Functions */ SNMPAPI_STATUS SNMPAPI_CALL SnmpStartup (OUT smiLPUINT32 nMajorVersion, OUT smiLPUINT32 nMinorVersion, OUT smiLPUINT32 nLevel, OUT smiLPUINT32 nTranslateMode, OUT smiLPUINT32 nRetransmitMode); SNMPAPI_STATUS SNMPAPI_CALL SnmpCleanup (void); HSNMP_SESSION SNMPAPI_CALL SnmpOpen (IN HWND hWnd, IN UINT wMsg); SNMPAPI_STATUS SNMPAPI_CALL SnmpClose (IN HSNMP_SESSION session); SNMPAPI_STATUS SNMPAPI_CALL SnmpSendMsg (IN HSNMP_SESSION session, IN HSNMP_ENTITY srcEntity, IN HSNMP_ENTITY dstEntity, IN HSNMP_CONTEXT context, IN HSNMP_PDU PDU); SNMPAPI_STATUS SNMPAPI_CALL SnmpRecvMsg (IN HSNMP_SESSION session, OUT LPHSNMP_ENTITY srcEntity, OUT LPHSNMP_ENTITY dstEntity, OUT LPHSNMP_CONTEXT context, OUT LPHSNMP_PDU PDU); SNMPAPI_STATUS SNMPAPI_CALL SnmpRegister (IN HSNMP_SESSION session, IN HSNMP_ENTITY srcEntity, IN HSNMP_ENTITY dstEntity, IN HSNMP_CONTEXT context, IN smiLPCOID notification, IN smiUINT32 state); /* Following Communications Functions added in v2.0 */ HSNMP_SESSION SNMPAPI_CALL SnmpCreateSession (IN HWND hWnd, IN UINT wMsg, IN SNMPAPI_CALLBACK fCallBack, IN LPVOID lpClientData); SNMPAPI_STATUS SNMPAPI_CALL SnmpListen (IN HSNMP_ENTITY hEntity, IN SNMPAPI_STATUS lStatus); SNMPAPI_STATUS SNMPAPI_CALL SnmpCancelMsg (IN HSNMP_SESSION session, IN smiINT32 reqId); /* Entity/Context Functions */ HSNMP_ENTITY SNMPAPI_CALL SnmpStrToEntity (IN HSNMP_SESSION session, IN LPCSTR string); SNMPAPI_STATUS SNMPAPI_CALL SnmpEntityToStr (IN HSNMP_ENTITY entity, IN smiUINT32 size, OUT LPSTR string); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreeEntity (IN HSNMP_ENTITY entity); HSNMP_CONTEXT SNMPAPI_CALL SnmpStrToContext (IN HSNMP_SESSION session, IN smiLPCOCTETS string); SNMPAPI_STATUS SNMPAPI_CALL SnmpContextToStr (IN HSNMP_CONTEXT context, OUT smiLPOCTETS string); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreeContext (IN HSNMP_CONTEXT context); /* Following Entity/Context Functions added in v2.0 */ SNMPAPI_STATUS SNMPAPI_CALL SnmpSetPort (IN HSNMP_ENTITY hEntity, IN UINT nPort); /* PDU Functions */ HSNMP_PDU SNMPAPI_CALL SnmpCreatePdu (IN HSNMP_SESSION session, IN smiINT PDU_type, IN smiINT32 request_id, IN smiINT error_status, IN smiINT error_index, IN HSNMP_VBL varbindlist); SNMPAPI_STATUS SNMPAPI_CALL SnmpGetPduData (IN HSNMP_PDU PDU, OUT smiLPINT PDU_type, OUT smiLPINT32 request_id, OUT smiLPINT error_status, OUT smiLPINT error_index, OUT LPHSNMP_VBL varbindlist); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetPduData (IN HSNMP_PDU PDU, IN const smiINT FAR *PDU_type, IN const smiINT32 FAR *request_id, IN const smiINT FAR *non_repeaters, IN const smiINT FAR *max_repetitions, IN const HSNMP_VBL FAR *varbindlist); HSNMP_PDU SNMPAPI_CALL SnmpDuplicatePdu (IN HSNMP_SESSION session, IN HSNMP_PDU PDU); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreePdu (IN HSNMP_PDU PDU); /* Variable-Binding Functions */ HSNMP_VBL SNMPAPI_CALL SnmpCreateVbl (IN HSNMP_SESSION session, IN smiLPCOID name, IN smiLPCVALUE value); HSNMP_VBL SNMPAPI_CALL SnmpDuplicateVbl (IN HSNMP_SESSION session, IN HSNMP_VBL vbl); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreeVbl (IN HSNMP_VBL vbl); SNMPAPI_STATUS SNMPAPI_CALL SnmpCountVbl (IN HSNMP_VBL vbl); SNMPAPI_STATUS SNMPAPI_CALL SnmpGetVb (IN HSNMP_VBL vbl, IN smiUINT32 index, OUT smiLPOID name, OUT smiLPVALUE value); SNMPAPI_STATUS SNMPAPI_CALL SnmpSetVb (IN HSNMP_VBL vbl, IN smiUINT32 index, IN smiLPCOID name, IN smiLPCVALUE value); SNMPAPI_STATUS SNMPAPI_CALL SnmpDeleteVb (IN HSNMP_VBL vbl, IN smiUINT32 index); /* Utility Functions */ SNMPAPI_STATUS SNMPAPI_CALL SnmpGetLastError (IN HSNMP_SESSION session); SNMPAPI_STATUS SNMPAPI_CALL SnmpStrToOid (IN LPCSTR string, OUT smiLPOID dstOID); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidToStr (IN smiLPCOID srcOID, IN smiUINT32 size, OUT LPSTR string); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidCopy (IN smiLPCOID srcOID, OUT smiLPOID dstOID); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidCompare (IN smiLPCOID xOID, IN smiLPCOID yOID, IN smiUINT32 maxlen, OUT smiLPINT result); SNMPAPI_STATUS SNMPAPI_CALL SnmpEncodeMsg (IN HSNMP_SESSION session, IN HSNMP_ENTITY srcEntity, IN HSNMP_ENTITY dstEntity, IN HSNMP_CONTEXT context, IN HSNMP_PDU pdu, OUT smiLPOCTETS msgBufDesc); SNMPAPI_STATUS SNMPAPI_CALL SnmpDecodeMsg (IN HSNMP_SESSION session, OUT LPHSNMP_ENTITY srcEntity, OUT LPHSNMP_ENTITY dstEntity, OUT LPHSNMP_CONTEXT context, OUT LPHSNMP_PDU pdu, IN smiLPCOCTETS msgBufDesc); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreeDescriptor (IN smiUINT32 syntax, IN smiLPOPAQUE descriptor); #ifdef __cplusplus } #endif #endif /* _INC_WINSNMP */