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