Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _INC_SNMP
      7 #define _INC_SNMP
      8 
      9 #include <windows.h>
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15 #include <pshpack4.h>
     16 
     17   typedef struct {
     18     BYTE *stream;
     19     UINT length;
     20     WINBOOL dynamic;
     21   } AsnOctetString;
     22 
     23   typedef struct {
     24     UINT idLength;
     25     UINT *ids;
     26   } AsnObjectIdentifier;
     27 
     28   typedef LONG AsnInteger32;
     29   typedef ULONG AsnUnsigned32;
     30   typedef ULARGE_INTEGER AsnCounter64;
     31   typedef AsnUnsigned32 AsnCounter32;
     32   typedef AsnUnsigned32 AsnGauge32;
     33   typedef AsnUnsigned32 AsnTimeticks;
     34   typedef AsnOctetString AsnBits;
     35   typedef AsnOctetString AsnSequence;
     36   typedef AsnOctetString AsnImplicitSequence;
     37   typedef AsnOctetString AsnIPAddress;
     38   typedef AsnOctetString AsnNetworkAddress;
     39   typedef AsnOctetString AsnDisplayString;
     40   typedef AsnOctetString AsnOpaque;
     41 
     42   typedef struct {
     43     BYTE asnType;
     44     union {
     45       AsnInteger32 number;
     46 
     47       AsnUnsigned32 unsigned32;
     48       AsnCounter64 counter64;
     49       AsnOctetString string;
     50       AsnBits bits;
     51       AsnObjectIdentifier object;
     52       AsnSequence sequence;
     53       AsnIPAddress address;
     54       AsnCounter32 counter;
     55       AsnGauge32 gauge;
     56       AsnTimeticks ticks;
     57       AsnOpaque arbitrary;
     58     } asnValue;
     59   } AsnAny;
     60 
     61   typedef AsnObjectIdentifier AsnObjectName;
     62   typedef AsnAny AsnObjectSyntax;
     63 
     64   typedef struct {
     65     AsnObjectName name;
     66     AsnObjectSyntax value;
     67   } SnmpVarBind;
     68 
     69   typedef struct {
     70     SnmpVarBind *list;
     71     UINT len;
     72   } SnmpVarBindList;
     73 
     74 #include <poppack.h>
     75 
     76 #ifndef _INC_WINSNMP
     77 #define ASN_UNIVERSAL 0x00
     78 #define ASN_APPLICATION 0x40
     79 #define ASN_CONTEXT 0x80
     80 #define ASN_PRIVATE 0xC0
     81 #define ASN_PRIMITIVE 0x00
     82 #define ASN_CONSTRUCTOR 0x20
     83 
     84 #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0)
     85 #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1)
     86 #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2)
     87 #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3)
     88 #define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4)
     89 #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5)
     90 #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6)
     91 #define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7)
     92 #endif
     93 
     94 #define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02)
     95 #define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
     96 #define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04)
     97 #define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05)
     98 #define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06)
     99 #define ASN_INTEGER32 ASN_INTEGER
    100 
    101 #define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
    102 #define ASN_SEQUENCEOF ASN_SEQUENCE
    103 
    104 #define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00)
    105 #define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01)
    106 #define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02)
    107 #define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03)
    108 #define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04)
    109 #define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06)
    110 #define ASN_UINTEGER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07)
    111 #define ASN_RFC2578_UNSIGNED32 ASN_GAUGE32
    112 
    113 #define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)
    114 #define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)
    115 #define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)
    116 
    117 #define SNMP_EXTENSION_GET SNMP_PDU_GET
    118 #define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT
    119 #define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK
    120 #define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0)
    121 #define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET
    122 #define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1)
    123 #define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2)
    124 
    125 #define SNMP_ERRORSTATUS_NOERROR 0
    126 #define SNMP_ERRORSTATUS_TOOBIG 1
    127 #define SNMP_ERRORSTATUS_NOSUCHNAME 2
    128 #define SNMP_ERRORSTATUS_BADVALUE 3
    129 #define SNMP_ERRORSTATUS_READONLY 4
    130 #define SNMP_ERRORSTATUS_GENERR 5
    131 #define SNMP_ERRORSTATUS_NOACCESS 6
    132 #define SNMP_ERRORSTATUS_WRONGTYPE 7
    133 #define SNMP_ERRORSTATUS_WRONGLENGTH 8
    134 #define SNMP_ERRORSTATUS_WRONGENCODING 9
    135 #define SNMP_ERRORSTATUS_WRONGVALUE 10
    136 #define SNMP_ERRORSTATUS_NOCREATION 11
    137 #define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12
    138 #define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13
    139 #define SNMP_ERRORSTATUS_COMMITFAILED 14
    140 #define SNMP_ERRORSTATUS_UNDOFAILED 15
    141 #define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16
    142 #define SNMP_ERRORSTATUS_NOTWRITABLE 17
    143 #define SNMP_ERRORSTATUS_INCONSISTENTNAME 18
    144 
    145 #define SNMP_GENERICTRAP_COLDSTART 0
    146 #define SNMP_GENERICTRAP_WARMSTART 1
    147 #define SNMP_GENERICTRAP_LINKDOWN 2
    148 #define SNMP_GENERICTRAP_LINKUP 3
    149 #define SNMP_GENERICTRAP_AUTHFAILURE 4
    150 #define SNMP_GENERICTRAP_EGPNEIGHLOSS 5
    151 #define SNMP_GENERICTRAP_ENTERSPECIFIC 6
    152 
    153 #define SNMP_ACCESS_NONE 0
    154 #define SNMP_ACCESS_NOTIFY 1
    155 #define SNMP_ACCESS_READ_ONLY 2
    156 #define SNMP_ACCESS_READ_WRITE 3
    157 #define SNMP_ACCESS_READ_CREATE 4
    158 
    159 #define SNMPAPI INT
    160 #define SNMP_FUNC_TYPE WINAPI
    161 
    162 #define SNMPAPI_NOERROR TRUE
    163 #define SNMPAPI_ERROR FALSE
    164 
    165   WINBOOL SNMP_FUNC_TYPE SnmpExtensionInit(DWORD dwUptimeReference,HANDLE *phSubagentTrapEvent,AsnObjectIdentifier *pFirstSupportedRegion);
    166   WINBOOL SNMP_FUNC_TYPE SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion);
    167   WINBOOL SNMP_FUNC_TYPE SnmpExtensionMonitor(LPVOID pAgentMgmtData);
    168   WINBOOL SNMP_FUNC_TYPE SnmpExtensionQuery(BYTE bPduType,SnmpVarBindList *pVarBindList,AsnInteger32 *pErrorStatus,AsnInteger32 *pErrorIndex);
    169   WINBOOL SNMP_FUNC_TYPE SnmpExtensionQueryEx(UINT nRequestType,UINT nTransactionId,SnmpVarBindList *pVarBindList,AsnOctetString *pContextInfo,AsnInteger32 *pErrorStatus,AsnInteger32 *pErrorIndex);
    170   WINBOOL SNMP_FUNC_TYPE SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid,AsnInteger32 *pGenericTrapId,AsnInteger32 *pSpecificTrapId,AsnTimeticks *pTimeStamp,SnmpVarBindList *pVarBindList);
    171   VOID SNMP_FUNC_TYPE SnmpExtensionClose();
    172 
    173   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONINIT)(DWORD dwUpTimeReference,HANDLE *phSubagentTrapEvent,AsnObjectIdentifier *pFirstSupportedRegion);
    174   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONINITEX)(AsnObjectIdentifier *pNextSupportedRegion);
    175   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData);
    176   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONQUERY)(BYTE bPduType,SnmpVarBindList *pVarBindList,AsnInteger32 *pErrorStatus,AsnInteger32 *pErrorIndex);
    177   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType,UINT nTransactionId,SnmpVarBindList *pVarBindList,AsnOctetString *pContextInfo,AsnInteger32 *pErrorStatus,AsnInteger32 *pErrorIndex);
    178   typedef WINBOOL (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid,AsnInteger32 *pGenericTrapId,AsnInteger32 *pSpecificTrapId,AsnTimeticks *pTimeStamp,SnmpVarBindList *pVarBindList);
    179   typedef VOID (SNMP_FUNC_TYPE *PFNSNMPEXTENSIONCLOSE)();
    180 
    181   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst,AsnObjectIdentifier *pOidSrc);
    182   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst,AsnObjectIdentifier *pOidSrc);
    183   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1,AsnObjectIdentifier *pOid2,UINT nSubIds);
    184   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidCmp(AsnObjectIdentifier *pOid1,AsnObjectIdentifier *pOid2);
    185   VOID SNMP_FUNC_TYPE SnmpUtilOidFree(AsnObjectIdentifier *pOid);
    186   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsCmp(AsnOctetString *pOctets1,AsnOctetString *pOctets2);
    187   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsNCmp(AsnOctetString *pOctets1,AsnOctetString *pOctets2,UINT nChars);
    188   SNMPAPI SNMP_FUNC_TYPE SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst,AsnOctetString *pOctetsSrc);
    189   VOID SNMP_FUNC_TYPE SnmpUtilOctetsFree(AsnOctetString *pOctets);
    190   SNMPAPI SNMP_FUNC_TYPE SnmpUtilAsnAnyCpy(AsnAny *pAnyDst,AsnAny *pAnySrc);
    191   VOID SNMP_FUNC_TYPE SnmpUtilAsnAnyFree(AsnAny *pAny);
    192   SNMPAPI SNMP_FUNC_TYPE SnmpUtilVarBindCpy(SnmpVarBind *pVbDst,SnmpVarBind *pVbSrc);
    193   VOID SNMP_FUNC_TYPE SnmpUtilVarBindFree(SnmpVarBind *pVb);
    194   SNMPAPI SNMP_FUNC_TYPE SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst,SnmpVarBindList *pVblSrc);
    195   VOID SNMP_FUNC_TYPE SnmpUtilVarBindListFree(SnmpVarBindList *pVbl);
    196   VOID SNMP_FUNC_TYPE SnmpUtilMemFree(LPVOID pMem);
    197   LPVOID SNMP_FUNC_TYPE SnmpUtilMemAlloc(UINT nBytes);
    198   LPVOID SNMP_FUNC_TYPE SnmpUtilMemReAlloc(LPVOID pMem,UINT nBytes);
    199   LPSTR SNMP_FUNC_TYPE SnmpUtilOidToA(AsnObjectIdentifier *Oid);
    200   LPSTR SNMP_FUNC_TYPE SnmpUtilIdsToA(UINT *Ids,UINT IdLength);
    201   VOID SNMP_FUNC_TYPE SnmpUtilPrintOid(AsnObjectIdentifier *Oid);
    202   VOID SNMP_FUNC_TYPE SnmpUtilPrintAsnAny(AsnAny *pAny);
    203   DWORD SNMP_FUNC_TYPE SnmpSvcGetUptime();
    204   VOID SNMP_FUNC_TYPE SnmpSvcSetLogLevel(INT nLogLevel);
    205   VOID SNMP_FUNC_TYPE SnmpSvcSetLogType(INT nLogType);
    206 
    207 #define SNMP_LOG_SILENT 0x0
    208 #define SNMP_LOG_FATAL 0x1
    209 #define SNMP_LOG_ERROR 0x2
    210 #define SNMP_LOG_WARNING 0x3
    211 #define SNMP_LOG_TRACE 0x4
    212 #define SNMP_LOG_VERBOSE 0x5
    213 
    214 #define SNMP_OUTPUT_TO_CONSOLE 0x1
    215 #define SNMP_OUTPUT_TO_LOGFILE 0x2
    216 #define SNMP_OUTPUT_TO_EVENTLOG 0x4
    217 #define SNMP_OUTPUT_TO_DEBUGGER 0x8
    218 
    219   VOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel,LPSTR szFormat,...);
    220 
    221 #define SNMPDBG(_x_)
    222 
    223 #define DEFINE_SIZEOF(Array) (sizeof(Array)/sizeof((Array)[0]))
    224 #define DEFINE_OID(SubIdArray) {DEFINE_SIZEOF(SubIdArray),(SubIdArray)}
    225 #define DEFINE_NULLOID() {0,NULL}
    226 #define DEFINE_NULLOCTETS() {NULL,0,FALSE}
    227 
    228 #define DEFAULT_SNMP_PORT_UDP 161
    229 #define DEFAULT_SNMP_PORT_IPX 36879
    230 #define DEFAULT_SNMPTRAP_PORT_UDP 162
    231 #define DEFAULT_SNMPTRAP_PORT_IPX 36880
    232 
    233 #define SNMP_MAX_OID_LEN 128
    234 
    235 #define SNMP_MEM_ALLOC_ERROR 1
    236 #define SNMP_BERAPI_INVALID_LENGTH 10
    237 #define SNMP_BERAPI_INVALID_TAG 11
    238 #define SNMP_BERAPI_OVERFLOW 12
    239 #define SNMP_BERAPI_SHORT_BUFFER 13
    240 #define SNMP_BERAPI_INVALID_OBJELEM 14
    241 #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20
    242 #define SNMP_PDUAPI_INVALID_ES 21
    243 #define SNMP_PDUAPI_INVALID_GT 22
    244 #define SNMP_AUTHAPI_INVALID_VERSION 30
    245 #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
    246 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
    247 
    248 #ifndef SNMPSTRICT
    249 
    250 #define SNMP_oidcpy SnmpUtilOidCpy
    251 #define SNMP_oidappend SnmpUtilOidAppend
    252 #define SNMP_oidncmp SnmpUtilOidNCmp
    253 #define SNMP_oidcmp SnmpUtilOidCmp
    254 #define SNMP_oidfree SnmpUtilOidFree
    255 
    256 #define SNMP_CopyVarBindList SnmpUtilVarBindListCpy
    257 #define SNMP_FreeVarBindList SnmpUtilVarBindListFree
    258 #define SNMP_CopyVarBind SnmpUtilVarBindCpy
    259 #define SNMP_FreeVarBind SnmpUtilVarBindFree
    260 
    261 #define SNMP_printany SnmpUtilPrintAsnAny
    262 
    263 #define SNMP_free SnmpUtilMemFree
    264 #define SNMP_malloc SnmpUtilMemAlloc
    265 #define SNMP_realloc SnmpUtilMemReAlloc
    266 
    267 #define SNMP_DBG_free SnmpUtilMemFree
    268 #define SNMP_DBG_malloc SnmpUtilMemAlloc
    269 #define SNMP_DBG_realloc SnmpUtilMemReAlloc
    270 
    271 #define ASN_RFC1155_IPADDRESS ASN_IPADDRESS
    272 #define ASN_RFC1155_COUNTER ASN_COUNTER32
    273 #define ASN_RFC1155_GAUGE ASN_GAUGE32
    274 #define ASN_RFC1155_TIMETICKS ASN_TIMETICKS
    275 #define ASN_RFC1155_OPAQUE ASN_OPAQUE
    276 #define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING
    277 
    278 #define ASN_RFC1157_GETREQUEST SNMP_PDU_GET
    279 #define ASN_RFC1157_GETNEXTREQUEST SNMP_PDU_GETNEXT
    280 #define ASN_RFC1157_GETRESPONSE SNMP_PDU_RESPONSE
    281 #define ASN_RFC1157_SETREQUEST SNMP_PDU_SET
    282 #define ASN_RFC1157_TRAP SNMP_PDU_V1TRAP
    283 
    284 #define ASN_CONTEXTSPECIFIC ASN_CONTEXT
    285 #define ASN_PRIMATIVE ASN_PRIMITIVE
    286 
    287 #define RFC1157VarBindList SnmpVarBindList
    288 #define RFC1157VarBind SnmpVarBind
    289 #define AsnInteger AsnInteger32
    290 #define AsnCounter AsnCounter32
    291 #define AsnGauge AsnGauge32
    292 #define ASN_UNSIGNED32 ASN_UINTEGER32
    293 #endif
    294 
    295 #ifdef __cplusplus
    296 }
    297 #endif
    298 
    299 #endif /* _INC_SNMP */
    300 
    301