1 /** 2 * @file snmp.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 /* Written by Filip Navara <xnavara@volny.cz> */ 25 #ifndef _SNMP_H 26 #define _SNMP_H 27 #pragma GCC system_header 28 #include <_mingw.h> 29 30 #include <windows.h> 31 #include <pshpack4.h> 32 33 #ifndef WINSNMPAPI 34 #define WINSNMPAPI WINAPI 35 #endif 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #define DEFAULT_SNMP_PORT_UDP 161 42 #define DEFAULT_SNMP_PORT_IPX 36879 43 #define DEFAULT_SNMPTRAP_PORT_UDP 162 44 #define DEFAULT_SNMPTRAP_PORT_IPX 36880 45 46 #ifndef _SNMP_ASN_DEFINED 47 #define _SNMP_ASN_DEFINED 48 #define ASN_UNIVERSAL 0x00 49 #define ASN_PRIMITIVE 0x00 50 #define ASN_CONSTRUCTOR 0x20 51 #define ASN_APPLICATION 0x40 52 #define ASN_CONTEXT 0x80 53 #define ASN_PRIVATE 0xC0 54 #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0) 55 #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 1) 56 #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 2) 57 #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 3) 58 #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 4) 59 #define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 4) 60 #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 6) 61 #define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 7) 62 #define SNMP_PDU_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | 8) 63 #endif /* _SNMP_ASN_DEFINED */ 64 65 #define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 2) 66 #define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 3) 67 #define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 4) 68 #define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 5) 69 #define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 6) 70 #define ASN_INTEGER32 ASN_INTEGER 71 #define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10) 72 #define ASN_SEQUENCEOF ASN_SEQUENCE 73 #define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00) 74 #define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01) 75 #define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02) 76 #define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03) 77 #define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04) 78 #define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06) 79 #define ASN_UNSIGNED32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07) 80 #define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00) 81 #define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01) 82 #define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02) 83 #define SNMP_EXTENSION_GET SNMP_PDU_GET 84 #define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT 85 #define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK 86 #define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0) 87 #define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET 88 #define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1) 89 #define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2) 90 #define SNMP_ERRORSTATUS_NOERROR 0 91 #define SNMP_ERRORSTATUS_TOOBIG 1 92 #define SNMP_ERRORSTATUS_NOSUCHNAME 2 93 #define SNMP_ERRORSTATUS_BADVALUE 3 94 #define SNMP_ERRORSTATUS_READONLY 4 95 #define SNMP_ERRORSTATUS_GENERR 5 96 #define SNMP_ERRORSTATUS_NOACCESS 6 97 #define SNMP_ERRORSTATUS_WRONGTYPE 7 98 #define SNMP_ERRORSTATUS_WRONGLENGTH 8 99 #define SNMP_ERRORSTATUS_WRONGENCODING 9 100 #define SNMP_ERRORSTATUS_WRONGVALUE 10 101 #define SNMP_ERRORSTATUS_NOCREATION 11 102 #define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12 103 #define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13 104 #define SNMP_ERRORSTATUS_COMMITFAILED 14 105 #define SNMP_ERRORSTATUS_UNDOFAILED 15 106 #define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16 107 #define SNMP_ERRORSTATUS_NOTWRITABLE 17 108 #define SNMP_ERRORSTATUS_INCONSISTENTNAME 18 109 #define SNMP_GENERICTRAP_COLDSTART 0 110 #define SNMP_GENERICTRAP_WARMSTART 1 111 #define SNMP_GENERICTRAP_LINKDOWN 2 112 #define SNMP_GENERICTRAP_LINKUP 3 113 #define SNMP_GENERICTRAP_AUTHFAILURE 4 114 #define SNMP_GENERICTRAP_EGPNEIGHLOSS 5 115 #define SNMP_GENERICTRAP_ENTERSPECIFIC 6 116 #define SNMP_ACCESS_NONE 0 117 #define SNMP_ACCESS_NOTIFY 1 118 #define SNMP_ACCESS_READ_ONLY 2 119 #define SNMP_ACCESS_READ_WRITE 3 120 #define SNMP_ACCESS_READ_CREATE 4 121 #define SNMPAPI_ERROR FALSE 122 #define SNMPAPI_NOERROR TRUE 123 #define SNMP_LOG_SILENT 0 124 #define SNMP_LOG_FATAL 1 125 #define SNMP_LOG_ERROR 2 126 #define SNMP_LOG_WARNING 3 127 #define SNMP_LOG_TRACE 4 128 #define SNMP_LOG_VERBOSE 5 129 #define SNMP_OUTPUT_TO_CONSOLE 1 130 #define SNMP_OUTPUT_TO_LOGFILE 2 131 #define SNMP_OUTPUT_TO_EVENTLOG 4 132 #define SNMP_OUTPUT_TO_DEBUGGER 8 133 #define SNMP_MAX_OID_LEN 128 134 #define SNMP_MEM_ALLOC_ERROR 1 135 #define SNMP_BERAPI_INVALID_LENGTH 10 136 #define SNMP_BERAPI_INVALID_TAG 11 137 #define SNMP_BERAPI_OVERFLOW 12 138 #define SNMP_BERAPI_SHORT_BUFFER 13 139 #define SNMP_BERAPI_INVALID_OBJELEM 14 140 #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20 141 #define SNMP_PDUAPI_INVALID_ES 21 142 #define SNMP_PDUAPI_INVALID_GT 22 143 #define SNMP_AUTHAPI_INVALID_VERSION 30 144 #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31 145 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32 146 147 #ifndef RC_INVOKED 148 149 typedef INT SNMPAPI; 150 typedef LONG AsnInteger32; 151 typedef ULONG AsnUnsigned32; 152 typedef ULARGE_INTEGER AsnCounter64; 153 typedef AsnUnsigned32 AsnCounter32; 154 typedef AsnUnsigned32 AsnGauge32; 155 typedef AsnUnsigned32 AsnTimeticks; 156 typedef struct { 157 BYTE *stream; 158 UINT length; 159 BOOL dynamic; 160 } AsnOctetString, AsnBits, AsnSequence, AsnImplicitSequence, AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque; 161 typedef struct { 162 UINT idLength; 163 UINT *ids; 164 } AsnObjectIdentifier, AsnObjectName; 165 typedef struct { 166 BYTE asnType; 167 union { 168 AsnInteger32 number; 169 AsnUnsigned32 unsigned32; 170 AsnCounter64 counter64; 171 AsnOctetString string; 172 AsnBits bits; 173 AsnObjectIdentifier object; 174 AsnSequence sequence; 175 AsnIPAddress address; 176 AsnCounter32 counter; 177 AsnGauge32 gauge; 178 AsnTimeticks ticks; 179 AsnOpaque arbitrary; 180 } asnValue; 181 } AsnAny, AsnObjectSyntax; 182 typedef struct { 183 AsnObjectName name; 184 AsnObjectSyntax value; 185 } SnmpVarBind; 186 typedef struct { 187 SnmpVarBind *list; 188 UINT len; 189 } SnmpVarBindList; 190 191 VOID WINSNMPAPI SnmpExtensionClose(void); 192 BOOL WINSNMPAPI SnmpExtensionInit(DWORD,HANDLE*,AsnObjectIdentifier*); 193 BOOL WINSNMPAPI SnmpExtensionInitEx(AsnObjectIdentifier*); 194 BOOL WINSNMPAPI SnmpExtensionMonitor(LPVOID); 195 BOOL WINSNMPAPI SnmpExtensionQuery(BYTE,SnmpVarBindList*,AsnInteger32*,AsnInteger32*); 196 BOOL WINSNMPAPI SnmpExtensionQueryEx(DWORD,DWORD,SnmpVarBindList*,AsnOctetString*,AsnInteger32*,AsnInteger32*); 197 BOOL WINSNMPAPI SnmpExtensionTrap(AsnObjectIdentifier*,AsnInteger32*,AsnInteger32*,AsnTimeticks*,SnmpVarBindList*); 198 DWORD WINSNMPAPI SnmpSvcGetUptime(void); 199 VOID WINSNMPAPI SnmpSvcSetLogLevel(INT); 200 VOID WINSNMPAPI SnmpSvcSetLogType(INT); 201 SNMPAPI WINSNMPAPI SnmpUtilAsnAnyCpy(AsnAny*,AsnAny*); 202 VOID WINSNMPAPI SnmpUtilAsnAnyFree(AsnAny*); 203 VOID WINSNMPAPI SnmpUtilDbgPrint(INT,LPSTR,...); 204 LPSTR WINSNMPAPI SnmpUtilIdsToA(UINT*,UINT); 205 LPVOID WINSNMPAPI SnmpUtilMemAlloc(UINT); 206 VOID WINSNMPAPI SnmpUtilMemFree(LPVOID); 207 LPVOID WINSNMPAPI SnmpUtilMemReAlloc(LPVOID,UINT); 208 SNMPAPI WINSNMPAPI SnmpUtilOctetsCmp(AsnOctetString*,AsnOctetString*); 209 SNMPAPI WINSNMPAPI SnmpUtilOctetsCpy(AsnOctetString*,AsnOctetString*); 210 VOID WINSNMPAPI SnmpUtilOctetsFree(AsnOctetString*); 211 SNMPAPI WINSNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*,AsnOctetString*,UINT); 212 SNMPAPI WINSNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*,AsnObjectIdentifier*); 213 SNMPAPI WINSNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*,AsnObjectIdentifier*); 214 SNMPAPI WINSNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*,AsnObjectIdentifier*); 215 VOID WINSNMPAPI SnmpUtilOidFree(AsnObjectIdentifier*); 216 SNMPAPI WINSNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*,AsnObjectIdentifier*,UINT); 217 LPSTR WINSNMPAPI SnmpUtilOidToA(AsnObjectIdentifier*); 218 VOID WINSNMPAPI SnmpUtilPrintAsnAny(AsnAny*); 219 VOID WINSNMPAPI SnmpUtilPrintOid(AsnObjectIdentifier*); 220 SNMPAPI WINSNMPAPI SnmpUtilVarBindCpy( SnmpVarBind*,SnmpVarBind*); 221 SNMPAPI WINSNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*,SnmpVarBindList*); 222 VOID WINSNMPAPI SnmpUtilVarBindFree(SnmpVarBind*); 223 VOID WINSNMPAPI SnmpUtilVarBindListFree(SnmpVarBindList*); 224 225 #ifndef SNMPSTRICT 226 #define SNMP_malloc SnmpUtilMemAlloc 227 #define SNMP_free SnmpUtilMemFree 228 #define SNMP_realloc SnmpUtilMemReAlloc 229 #define SNMP_DBG_malloc SnmpUtilMemAlloc 230 #define SNMP_DBG_free SnmpUtilMemFree 231 #define SNMP_DBG_realloc SnmpUtilMemReAlloc 232 #define SNMP_oidappend SnmpUtilOidAppend 233 #define SNMP_oidcmp SnmpUtilOidCmp 234 #define SNMP_oidcpy SnmpUtilOidCpy 235 #define SNMP_oidfree SnmpUtilOidFree 236 #define SNMP_oidncmp SnmpUtilOidNCmp 237 #define SNMP_printany SnmpUtilPrintAsnAny 238 #define SNMP_CopyVarBind SnmpUtilVarBindCpy 239 #define SNMP_CopyVarBindList SnmpUtilVarBindListCpy 240 #define SNMP_FreeVarBind SnmpUtilVarBindFree 241 #define SNMP_FreeVarBindList SnmpUtilVarBindListFree 242 #define ASN_RFC1155_IPADDRESS ASN_IPADDRESS 243 #define ASN_RFC1155_COUNTER ASN_COUNTER32 244 #define ASN_RFC1155_GAUGE ASN_GAUGE32 245 #define ASN_RFC1155_TIMETICKS ASN_TIMETICKS 246 #define ASN_RFC1155_OPAQUE ASN_OPAQUE 247 #define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING 248 #define ASN_RFC1157_GETREQUEST SNMP_PDU_GET 249 #define ASN_RFC1157_GETNEXTREQUEST SNMP_PDU_GETNEXT 250 #define ASN_RFC1157_GETRESPONSE SNMP_PDU_RESPONSE 251 #define ASN_RFC1157_SETREQUEST SNMP_PDU_SET 252 #define ASN_RFC1157_TRAP SNMP_PDU_V1TRAP 253 #define ASN_CONTEXTSPECIFIC ASN_CONTEXT 254 #define ASN_PRIMATIVE ASN_PRIMITIVE 255 #define RFC1157VarBindList SnmpVarBindList 256 #define RFC1157VarBind SnmpVarBind 257 #define AsnInteger AsnInteger32 258 #define AsnCounter AsnCounter32 259 #define AsnGauge AsnGauge32 260 #endif /* SNMPSTRICT */ 261 262 #endif /* RC_INVOKED */ 263 264 #ifdef __cplusplus 265 } 266 #endif 267 #include <poppack.h> 268 #endif 269