/* WinSNMP.h */ /* WinSNMP API v1.0g, 9/13/93 */ /* Author's Contact Information: Bob Natale Director, Network Management Products American Computer & Electronics Corp 209 Perry Parkway Gaithersburg MD 20877 301-258-9850 (tel) 301-921-0434 (fax) natale@acec.com (e-mail) */ #ifndef _INC_WINSNMP #define _INC_WINSNMP /* Make sure we only do this once! */ #include /* Include Windows Declarations */ /* Windows-related types */ 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; /* The smiBYTE types are included to define smiOCTETS correctly */ typedef unsigned char smiBYTE, FAR *smiLPBYTE; /* SNMP-related types from RFC1442 (SMI) */ typedef signed long smiINT, FAR *smiLPINT; typedef smiINT smiINT32, FAR *smiLPINT32; typedef unsigned long smiUINT32, FAR *smiLPUINT32; typedef struct { smiUINT32 len; smiLPBYTE ptr;} smiOCTETS, FAR *smiLPOCTETS; typedef smiOCTETS smiBITS, FAR *smiLPBITS; typedef struct { smiUINT32 len; smiLPUINT32 ptr;} smiOID, FAR *smiLPOID; 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 */ /* (used in the "syntax" member of the smiVALUE structure below) */ #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_NOSUCHOBJECT SNMP_SYNTAX_NULL #define SNMP_SYNTAX_NOSUCHINSTANCE SNMP_SYNTAX_NULL #define SNMP_SYNTAX_ENDOFMIBVIEW SNMP_SYNTAX_NULL typedef struct { /* smiVALUE portion of VarBind */ short type; /* 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; } smiVALUE, FAR *smiLPVALUE; /* SNMP Limits */ #define MAXOBJIDSIZE 128 /* Max # of components in an OID */ #define MAXOBJIDSTRSIZE 1408 /* Max # of bytes in decoded 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) /* This one is obsolete: (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) /* SNMP Trap Values */ #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 /* Exception Values for Response Varbinds */ #define SNMP_VALUE_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x0) #define SNMP_VALUE_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x1) #define SNMP_VALUE_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x2) /* SNMP error codes returned in error_status field of PDU */ /* These are NOT WinSNMP API error codes for SnmpGetLastError */ /* 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_NORMAL 0 /* Local Database look-up */ #define SNMPAPI_UNTRANSLATED_V1 1 /* Raw v1 addressing */ #define SNMPAPI_UNTRANSLATED_V2 2 /* Raw v2 addressing */ /* Values used to indicate SNMP "communications level" */ #define SNMPAPI_NO_SUPPORT 0 /* Encode/Decode msg */ #define SNMPAPI_V1_SUPPORT 1 /* v1 agents too */ #define SNMPAPI_V2_SUPPORT 2 /* v2 agents too */ #define SNMPAPI_M2M_SUPPORT 3 /* Manager-to-Manager too */ /* Values used to indicate retransmit mode */ #define SNMPAPI_OFF 0 /* Refuse support */ #define SNMPAPI_ON 1 /* Request support */ /*WinSNMP API Function Return Codes */ typedef smiUINT32 SNMPAPI_STATUS; /* Function return values */ #define SNMPAPI_FAILURE 0 /* Generic error code */ #define SNMPAPI_SUCCESS 1 /* Generic success code */ /*WinSNMP API Error Codes (for SnmpGetLastError) */ /* Error conditions reported by the API, other than 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 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 size */ #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 missing/failed */ #define SNMPAPI_MESSAGE_INVALID 19 /* Invalid SNMP message format */ #define SNMPAPI_OTHER_ERROR 99 /* Internal/undefined error */ /* Others will be added as needed */ /* WinSNMP API Function Prototypes */ #define IN /* Documentation only */ #define OUT /* Documentation only */ #define SNMPAPI_CALL WINAPI /* FAR PASCAL calling conventions */ /* 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); /* 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); HSNMP_PDU SNMPAPI_CALL SnmpRecvMsg (IN HSNMP_SESSION session, OUT LPHSNMP_ENTITY srcEntity, OUT LPHSNMP_CONTEXT context); SNMPAPI_STATUS SNMPAPI_CALL SnmpRegister (IN HSNMP_SESSION session, IN HSNMP_ENTITY srcEntity, IN HSNMP_ENTITY dstEntity, IN HSNMP_CONTEXT context, IN smiLPOID notification, IN BOOL enabled); /* Entity/Context Functions */ HSNMP_ENTITY SNMPAPI_CALL SnmpStrToEntity (IN HSNMP_SESSION session, IN LPSTR entity); 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 HSNMP_ENTITY entity, IN LPSTR context); SNMPAPI_STATUS SNMPAPI_CALL SnmpContextToStr (IN HSNMP_CONTEXT context, IN smiUINT32 size, OUT LPSTR string); SNMPAPI_STATUS SNMPAPI_CALL SnmpFreeContext (IN HSNMP_CONTEXT context); /* PDU Functions */ /* Note that in the SnmpCreatePdu, SnmpGetPduData, and SnmpSetPduData functions the error_status and error_index parameters can also be used as non_repeaters and max_repetitions parameters when appropriate, and vice versa. */ 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 smiLPINT PDU_type, IN smiLPINT32 request_id, IN smiLPINT non_repeaters, IN smiLPINT max_repetitions, IN LPHSNMP_VBL 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 smiLPOID name, IN smiLPVALUE 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 smiLPOID name, IN smiLPVALUE value); SNMPAPI_STATUS SNMPAPI_CALL SnmpDeleteVb (IN HSNMP_VBL vbl, IN smiLPOID name); /* Utility Functions */ SNMPAPI_STATUS SNMPAPI_CALL SnmpGetLastError (IN HSNMP_SESSION session); SNMPAPI_STATUS SNMPAPI_CALL SnmpStrToOid (IN LPSTR string, IN OUT smiLPOID dstOID); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidToStr (IN smiLPOID srcOID, IN smiUINT32 size, OUT LPSTR string); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidCopy (IN smiLPOID srcOID, IN OUT smiLPOID dstOID); SNMPAPI_STATUS SNMPAPI_CALL SnmpOidCompare (IN smiLPOID xOID, IN smiLPOID 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, IN 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 smiLPOCTETS msgBufDesc); #endif /* _INC_WINSNMP */