1 /* 2 * Copyright (C) 2005 Juan Lang 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 #ifndef _WINE_SNMP_H 19 #define _WINE_SNMP_H 20 21 #ifndef __WINESRC__ 22 # include <windows.h> 23 #else 24 # include <windef.h> 25 #endif 26 27 #include <pshpack4.h> 28 29 typedef struct { 30 BYTE *stream; 31 UINT length; 32 BOOL dynamic; 33 } AsnOctetString; 34 35 typedef struct { 36 UINT idLength; 37 UINT *ids; 38 } AsnObjectIdentifier; 39 40 typedef LONG AsnInteger32; 41 typedef ULONG AsnUnsigned32; 42 typedef ULARGE_INTEGER AsnCounter64; 43 typedef AsnUnsigned32 AsnCounter32; 44 typedef AsnUnsigned32 AsnGauge32; 45 typedef AsnUnsigned32 AsnTimeticks; 46 typedef AsnOctetString AsnBits; 47 typedef AsnOctetString AsnSequence; 48 typedef AsnOctetString AsnImplicitSequence; 49 typedef AsnOctetString AsnIPAddress; 50 typedef AsnOctetString AsnNetworkAddress; 51 typedef AsnOctetString AsnDisplayString; 52 typedef AsnOctetString AsnOpaque; 53 54 typedef struct { 55 BYTE asnType; 56 union { 57 AsnInteger32 number; 58 AsnUnsigned32 unsigned32; 59 AsnCounter64 counter64; 60 AsnOctetString string; 61 AsnBits bits; 62 AsnObjectIdentifier object; 63 AsnSequence sequence; 64 AsnIPAddress address; 65 AsnCounter32 counter; 66 AsnGauge32 gauge; 67 AsnTimeticks ticks; 68 AsnOpaque arbitrary; 69 } asnValue; 70 } AsnAny; 71 72 typedef AsnObjectIdentifier AsnObjectName; 73 typedef AsnAny AsnObjectSyntax; 74 75 typedef struct { 76 AsnObjectName name; 77 AsnObjectSyntax value; 78 } SnmpVarBind; 79 80 typedef struct { 81 SnmpVarBind *list; 82 UINT len; 83 } SnmpVarBindList; 84 85 #include <poppack.h> 86 87 #define ASN_UNIVERSAL 0x00 88 #define ASN_APPLICATION 0x40 89 #define ASN_CONTEXT 0x80 90 #define ASN_PRIVATE 0xc0 91 #define ASN_PRIMITIVE 0x00 92 #define ASN_CONSTRUCTOR 0x20 93 94 #define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x00) 95 #define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x01) 96 #define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x02) 97 #define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x03) 98 #define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x04) 99 #define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x05) 100 #define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x06) 101 #define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x07) 102 103 #define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02) 104 #define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03) 105 #define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04) 106 #define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05) 107 #define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06) 108 #define ASN_INTEGER32 ASN_INTEGER 109 110 #define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10) 111 #define ASN_SEQUENCEOF ASN_SEQUENCE 112 113 #define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00) 114 #define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01) 115 #define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02) 116 #define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03) 117 #define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04) 118 #define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06) 119 #define ASN_UNSIGNED32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07) 120 121 #define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00) 122 #define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01) 123 #define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02) 124 125 #define SNMP_EXTENSION_GET SNMP_PDU_GET 126 #define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT 127 #define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK 128 #define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0) 129 #define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET 130 #define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1) 131 #define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2) 132 133 #define SNMP_ERRORSTATUS_NOERROR 0 134 #define SNMP_ERRORSTATUS_TOOBIG 1 135 #define SNMP_ERRORSTATUS_NOSUCHNAME 2 136 #define SNMP_ERRORSTATUS_BADVALUE 3 137 #define SNMP_ERRORSTATUS_READONLY 4 138 #define SNMP_ERRORSTATUS_GENERR 5 139 #define SNMP_ERRORSTATUS_NOACCESS 6 140 #define SNMP_ERRORSTATUS_WRONGTYPE 7 141 #define SNMP_ERRORSTATUS_WRONGLENGTH 8 142 #define SNMP_ERRORSTATUS_WRONGENCODING 9 143 #define SNMP_ERRORSTATUS_WRONGVALUE 10 144 #define SNMP_ERRORSTATUS_NOCREATION 11 145 #define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12 146 #define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13 147 #define SNMP_ERRORSTATUS_COMMITFAILED 14 148 #define SNMP_ERRORSTATUS_UNDOFAILED 15 149 #define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16 150 #define SNMP_ERRORSTATUS_NOTWRITABLE 17 151 #define SNMP_ERRORSTATUS_INCONSISTENTNAME 18 152 153 #define SNMP_GENERICTRAP_COLDSTART 0 154 #define SNMP_GENERICTRAP_WARMSTART 1 155 #define SNMP_GENERICTRAP_LINKDOWN 2 156 #define SNMP_GENERICTRAP_LINKUP 3 157 #define SNMP_GENERICTRAP_AUTHFAILURE 4 158 #define SNMP_GENERICTRAP_EGPNEIGHLOSS 5 159 #define SNMP_GENERICTRAP_ENTERSPECIFIC 6 160 161 #define SNMP_ACCESS_NONE 0 162 #define SNMP_ACCESS_NOTIFY 1 163 #define SNMP_ACCESS_READ_ONLY 2 164 #define SNMP_ACCESS_READ_WRITE 3 165 #define SNMP_ACCESS_READ_CREATE 4 166 167 #define SNMP_LOG_SILENT 0 168 #define SNMP_LOG_FATAL 1 169 #define SNMP_LOG_ERROR 2 170 #define SNMP_LOG_WARNING 3 171 #define SNMP_LOG_TRACE 4 172 #define SNMP_LOG_VERBOSE 5 173 174 #define SNMP_OUTPUT_TO_CONSOLE 1 175 #define SNMP_OUTPUT_TO_LOGFILE 2 176 #define SNMP_OUTPUT_TO_EVENTLOG 4 177 #define SNMP_OUTPUT_TO_DEBUGGER 8 178 179 #define DEFINE_SIZEOF(x) (sizeof(x)/sizeof((x)[0])) 180 #define DEFINE_OID(x) { DEFINE_SIZEOF(x),(x) } 181 #define DEFINE_NULLOID() { 0, NULL } 182 #define DEFINE_NULLOCTENTS() { NULL, 0, FALSE } 183 184 #define DEFAULT_SNMP_PORT_UDP 161 185 #define DEFAULT_SNMP_PORT_IPX 36879 186 #define DEFAULT_SNMPTRAP_PORT_UDP 162 187 #define DEFAULT_SNMPTRAP_PORT_IPX 36880 188 189 #define SNMP_MAX_OID_LEN 128 190 191 #define SNMP_MEM_ALLOC_ERROR 0 192 #define SNMP_BERAPI_INVALID_LENGTH 10 193 #define SNMP_BERAPI_INVALID_TAG 11 194 #define SNMP_BERAPI_OVERFLOW 12 195 #define SNMP_BERAPI_SHORT_BUFFER 13 196 #define SNMP_BERAPI_INVALID_OBJELEM 14 197 #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20 198 #define SNMP_PDUAPI_INVALID_ES 21 199 #define SNMP_PDUAPI_INVALID_GT 22 200 #define SNMP_AUTHAPI_INVALID_VERSION 30 201 #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31 202 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32 203 204 #define SNMPAPI_NOERROR TRUE 205 #define SNMPAPI_ERROR FALSE 206 207 #ifdef __cplusplus 208 extern "C" { 209 #endif 210 211 BOOL WINAPI SnmpExtensionInit(DWORD dwUptimeReference, 212 HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion); 213 BOOL WINAPI SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion); 214 215 BOOL WINAPI SnmpExtensionMonitor(LPVOID pAgentMgmtData); 216 217 BOOL WINAPI SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList, 218 AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); 219 BOOL WINAPI SnmpExtensionQueryEx(UINT nRequestType, UINT nTransactionId, 220 SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo, 221 AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex); 222 223 BOOL WINAPI SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid, 224 AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId, 225 AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList); 226 227 VOID WINAPI SnmpExtensionClose(VOID); 228 229 typedef BOOL (WINAPI *PFNSNMPEXTENSIONINIT)(DWORD dwUptimeReference, 230 HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion); 231 typedef BOOL (WINAPI *PFNSNMPEXTENSIONINITEX)( 232 AsnObjectIdentifier *pNextSupportedRegion); 233 234 typedef BOOL (WINAPI *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData); 235 236 typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERY)(BYTE bPduType, 237 SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus, 238 AsnInteger32 *pErrorIndex); 239 typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType, 240 UINT nTransactionId, SnmpVarBindList *pVarBindList, 241 AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus, 242 AsnInteger32 *pErrorIndex); 243 244 typedef BOOL (WINAPI *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid, 245 AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId, 246 AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList); 247 248 typedef VOID (WINAPI *PFNSNMPEXTENSIONCLOSE)(VOID); 249 250 INT WINAPI SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst, 251 AsnObjectIdentifier *pOidSrc); 252 INT WINAPI SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst, 253 AsnObjectIdentifier *pOidSrc); 254 INT WINAPI SnmpUtilOidCmp(AsnObjectIdentifier *pOid1, 255 AsnObjectIdentifier *pOid2); 256 INT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1, 257 AsnObjectIdentifier *pOid2, UINT nSubIds); 258 VOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *pOid); 259 260 INT WINAPI SnmpUtilOctetsCmp(AsnOctetString *pOctets1, 261 AsnOctetString *pOctets2); 262 INT WINAPI SnmpUtilOctetsNCmp(AsnOctetString *pOctets1, 263 AsnOctetString *pOctets2, UINT nChars); 264 INT WINAPI SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst, 265 AsnOctetString *pOctetsSrc); 266 VOID WINAPI SnmpUtilOctetsFree(AsnOctetString *pOctets); 267 268 INT WINAPI SnmpUtilAsnAnyCpy(AsnAny *pAnyDst, AsnAny *pAnySrc); 269 VOID WINAPI SnmpUtilAsnAnyFree(AsnAny *pAny); 270 271 INT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *pVbDst, SnmpVarBind *pVbSrc); 272 VOID WINAPI SnmpUtilVarBindFree(SnmpVarBind *pVb); 273 274 INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst, 275 SnmpVarBindList *pVblSrc); 276 VOID WINAPI SnmpUtilVarBindListFree(SnmpVarBindList *pVbl); 277 278 LPVOID WINAPI SnmpUtilMemAlloc(UINT nBytes) __WINE_ALLOC_SIZE(1); 279 LPVOID WINAPI SnmpUtilMemReAlloc(LPVOID pMem, UINT nBytes) __WINE_ALLOC_SIZE(2); 280 VOID WINAPI SnmpUtilMemFree(LPVOID pMem); 281 282 LPSTR WINAPI SnmpUtilOidToA(AsnObjectIdentifier *Oid); 283 LPSTR WINAPI SnmpUtilIdsToA(UINT *Ids, UINT IdLength); 284 285 VOID WINAPI SnmpUtilPrintOid(AsnObjectIdentifier *Oid); 286 VOID WINAPI SnmpUtilPrintAsnAny(AsnAny *pAny); 287 288 DWORD WINAPI SnmpSvcGetUptime(VOID); 289 VOID WINAPI SnmpSvcSetLogLevel(INT nLogLevel); 290 VOID WINAPI SnmpSvcSetLogType(INT nLogType); 291 292 VOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel, LPSTR szFormat, ...); 293 294 #ifdef __cplusplus 295 } 296 #endif 297 298 #endif /* _WINE_SNMP_H */ 299