1 /*
2  * This file is a copy of the header file <snmp.h> from the MinGW project.
3  * The licensing for the Win32 API is defined in the
4  * MinGW file README.w32api, which states:
5 
6    "Unless otherwise stated in individual source files,
7 
8     THIS SOFTWARE IS NOT COPYRIGHTED
9 
10     This source code is offered for use in the public domain.  You may use,
11     modify or distribute it freely.
12 
13     This source code is distributed in the hope that it will be useful but
14     WITHOUT ANY WARRANTY.  ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
15     DISCLAIMED.  This includes but is not limited to warranties of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
17 
18  */
19 
20 /*
21   snmp.h - Header file for the Windows SNMP API
22 
23   Written by Filip Navara <xnavara@volny.cz>
24 
25   References (2003-08-25):
26     http://msdn.microsoft.com/library/en-us/snmp/snmp/snmp_reference.asp
27 
28   This library is distributed in the hope that it will be useful,
29   but WITHOUT ANY WARRANTY; without even the implied warranty of
30   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
31 */
32 
33 #ifndef _SNMP_H
34 #define _SNMP_H
35 #if __GNUC__ >= 3
36 #pragma GCC system_header
37 #endif
38 
39 #ifndef _WINDOWS_H
40 #include <windows.h>
41 #endif
42 
43 #include <pshpack4.h>
44 
45 #ifndef WINSNMPAPI
46 #define WINSNMPAPI WINAPI
47 #endif
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
53 #define DEFAULT_SNMP_PORT_UDP	161
54 #define DEFAULT_SNMP_PORT_IPX	36879
55 #define DEFAULT_SNMPTRAP_PORT_UDP	162
56 #define DEFAULT_SNMPTRAP_PORT_IPX	36880
57 #ifndef _SNMP_ASN_DEFINED
58 #define _SNMP_ASN_DEFINED
59 #define MS_ASN_UNIVERSAL	0x00
60 #define MS_ASN_PRIMITIVE	0x00
61 #define MS_ASN_CONSTRUCTOR	0x20
62 #define MS_ASN_APPLICATION	0x40
63 #define MS_ASN_CONTEXT	0x80
64 #define MS_ASN_PRIVATE	0xC0
65 #define SNMP_PDU_GET	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 0)
66 #define SNMP_PDU_GETNEXT	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 1)
67 #define SNMP_PDU_RESPONSE	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 2)
68 #define SNMP_PDU_SET	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 3)
69 #define SNMP_PDU_GETBULK	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 4)
70 #define SNMP_PDU_V1TRAP	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 4)
71 #define SNMP_PDU_INFORM	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 6)
72 #define SNMP_PDU_TRAP	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 7)
73 #define SNMP_PDU_REPORT	(ASN_CONTEXT | MS_ASN_CONSTRUCTOR | 8)
74 #endif /* _SNMP_ASN_DEFINED */
75 #define MS_ASN_INTEGER	(ASN_UNIVERSAL | MS_ASN_PRIMITIVE | 2)
76 #define MS_ASN_BITS	(ASN_UNIVERSAL | MS_ASN_PRIMITIVE | 3)
77 #define MS_ASN_OCTETSTRING	(ASN_UNIVERSAL | MS_ASN_PRIMITIVE | 4)
78 #define MS_ASN_NULL	(ASN_UNIVERSAL | MS_ASN_PRIMITIVE | 5)
79 #define MS_ASN_OBJECTIDENTIFIER	(ASN_UNIVERSAL | MS_ASN_PRIMITIVE | 6)
80 #define MS_ASN_INTEGER32	ASN_INTEGER
81 #define MS_ASN_SEQUENCE	(ASN_UNIVERSAL | MS_ASN_CONSTRUCTOR | 0x10)
82 #define MS_ASN_SEQUENCEOF	ASN_SEQUENCE
83 #define MS_ASN_IPADDRESS	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x00)
84 #define MS_ASN_COUNTER32	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x01)
85 #define MS_ASN_GAUGE32	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x02)
86 #define MS_ASN_TIMETICKS	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x03)
87 #define MS_ASN_OPAQUE	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x04)
88 #define MS_ASN_COUNTER64	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x06)
89 #define MS_ASN_UNSIGNED32	(ASN_APPLICATION | MS_ASN_PRIMITIVE | 0x07)
90 #define SNMP_EXCEPTION_NOSUCHOBJECT	(ASN_CONTEXT | MS_ASN_PRIMITIVE | 0x00)
91 #define SNMP_EXCEPTION_NOSUCHINSTANCE	(ASN_CONTEXT | MS_ASN_PRIMITIVE | 0x01)
92 #define SNMP_EXCEPTION_ENDOFMIBVIEW	(ASN_CONTEXT | MS_ASN_PRIMITIVE | 0x02)
93 #define SNMP_EXTENSION_GET	SNMP_PDU_GET
94 #define SNMP_EXTENSION_GET_NEXT	SNMP_PDU_GETNEXT
95 #define SNMP_EXTENSION_GET_BULK	SNMP_PDU_GETBULK
96 #define SNMP_EXTENSION_SET_TEST	(ASN_PRIVATE | MS_ASN_CONSTRUCTOR | 0x0)
97 #define SNMP_EXTENSION_SET_COMMIT	SNMP_PDU_SET
98 #define SNMP_EXTENSION_SET_UNDO	(ASN_PRIVATE | MS_ASN_CONSTRUCTOR | 0x1)
99 #define SNMP_EXTENSION_SET_CLEANUP	(ASN_PRIVATE | MS_ASN_CONSTRUCTOR | 0x2)
100 #define SNMP_ERRORSTATUS_NOERROR	0
101 #define SNMP_ERRORSTATUS_TOOBIG	1
102 #define SNMP_ERRORSTATUS_NOSUCHNAME	2
103 #define SNMP_ERRORSTATUS_BADVALUE	3
104 #define SNMP_ERRORSTATUS_READONLY	4
105 #define SNMP_ERRORSTATUS_GENERR	5
106 #define SNMP_ERRORSTATUS_NOACCESS	6
107 #define SNMP_ERRORSTATUS_WRONGTYPE	7
108 #define SNMP_ERRORSTATUS_WRONGLENGTH	8
109 #define SNMP_ERRORSTATUS_WRONGENCODING	9
110 #define SNMP_ERRORSTATUS_WRONGVALUE	10
111 #define SNMP_ERRORSTATUS_NOCREATION	11
112 #define SNMP_ERRORSTATUS_INCONSISTENTVALUE	12
113 #define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE	13
114 #define SNMP_ERRORSTATUS_COMMITFAILED	14
115 #define SNMP_ERRORSTATUS_UNDOFAILED	15
116 #define SNMP_ERRORSTATUS_AUTHORIZATIONERROR	16
117 #define SNMP_ERRORSTATUS_NOTWRITABLE	17
118 #define SNMP_ERRORSTATUS_INCONSISTENTNAME	18
119 #define SNMP_GENERICTRAP_COLDSTART	0
120 #define SNMP_GENERICTRAP_WARMSTART	1
121 #define SNMP_GENERICTRAP_LINKDOWN	2
122 #define SNMP_GENERICTRAP_LINKUP	3
123 #define SNMP_GENERICTRAP_AUTHFAILURE	4
124 #define SNMP_GENERICTRAP_EGPNEIGHLOSS	5
125 #define SNMP_GENERICTRAP_ENTERSPECIFIC	6
126 #define SNMP_ACCESS_NONE	0
127 #define SNMP_ACCESS_NOTIFY	1
128 #define SNMP_ACCESS_READ_ONLY	2
129 #define SNMP_ACCESS_READ_WRITE	3
130 #define SNMP_ACCESS_READ_CREATE	4
131 #define SNMPAPI_ERROR	FALSE
132 #define SNMPAPI_NOERROR	TRUE
133 #define SNMP_LOG_SILENT	0
134 #define SNMP_LOG_FATAL	1
135 #define SNMP_LOG_ERROR	2
136 #define SNMP_LOG_WARNING	3
137 #define SNMP_LOG_TRACE	4
138 #define SNMP_LOG_VERBOSE	5
139 #define SNMP_OUTPUT_TO_CONSOLE	1
140 #define SNMP_OUTPUT_TO_LOGFILE	2
141 #define SNMP_OUTPUT_TO_EVENTLOG	4
142 #define SNMP_OUTPUT_TO_DEBUGGER	8
143 #define SNMP_MAX_OID_LEN	128
144 #define SNMP_MEM_ALLOC_ERROR	1
145 #define SNMP_BERAPI_INVALID_LENGTH	10
146 #define SNMP_BERAPI_INVALID_TAG	11
147 #define SNMP_BERAPI_OVERFLOW	12
148 #define SNMP_BERAPI_SHORT_BUFFER	13
149 #define SNMP_BERAPI_INVALID_OBJELEM	14
150 #define SNMP_PDUAPI_UNRECOGNIZED_PDU	20
151 #define SNMP_PDUAPI_INVALID_ES	21
152 #define SNMP_PDUAPI_INVALID_GT	22
153 #define SNMP_AUTHAPI_INVALID_VERSION	30
154 #define SNMP_AUTHAPI_INVALID_MSG_TYPE	31
155 #define SNMP_AUTHAPI_TRIV_AUTH_FAILED	32
156 
157 #ifndef RC_INVOKED
158 
159 typedef INT SNMPAPI;
160 typedef LONG AsnInteger32;
161 typedef ULONG AsnUnsigned32;
162 typedef ULARGE_INTEGER AsnCounter64;
163 typedef AsnUnsigned32 AsnCounter32;
164 typedef AsnUnsigned32 AsnGauge32;
165 typedef AsnUnsigned32 AsnTimeticks;
166 typedef struct {
167 	BYTE *stream;
168 	UINT length;
169 	BOOL dynamic;
170 } AsnOctetString, AsnBits, AsnSequence, AsnImplicitSequence, AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque;
171 typedef struct {
172 	UINT idLength;
173 	UINT *ids;
174 } AsnObjectIdentifier, AsnObjectName;
175 typedef struct {
176 	BYTE asnType;
177 	union {
178 		AsnInteger32 number;
179 		AsnUnsigned32 unsigned32;
180 		AsnCounter64 counter64;
181 		AsnOctetString string;
182 		AsnBits bits;
183 		AsnObjectIdentifier object;
184 		AsnSequence sequence;
185 		AsnIPAddress address;
186 		AsnCounter32 counter;
187 		AsnGauge32 gauge;
188 		AsnTimeticks ticks;
189 		AsnOpaque arbitrary;
190 	} asnValue;
191 } AsnAny, AsnObjectSyntax;
192 typedef struct {
193 	AsnObjectName name;
194 	AsnObjectSyntax value;
195 } SnmpVarBind;
196 typedef struct {
197 	SnmpVarBind *list;
198 	UINT len;
199 } SnmpVarBindList;
200 
201 VOID WINSNMPAPI SnmpExtensionClose(void);
202 BOOL WINSNMPAPI SnmpExtensionInit(DWORD,HANDLE*,AsnObjectIdentifier*);
203 BOOL WINSNMPAPI SnmpExtensionInitEx(AsnObjectIdentifier*);
204 BOOL WINSNMPAPI SnmpExtensionMonitor(LPVOID);
205 BOOL WINSNMPAPI SnmpExtensionQuery(BYTE,SnmpVarBindList*,AsnInteger32*,AsnInteger32*);
206 BOOL WINSNMPAPI SnmpExtensionQueryEx(DWORD,DWORD,SnmpVarBindList*,AsnOctetString*,AsnInteger32*,AsnInteger32*);
207 BOOL WINSNMPAPI SnmpExtensionTrap(AsnObjectIdentifier*,AsnInteger32*,AsnInteger32*,AsnTimeticks*,SnmpVarBindList*);
208 DWORD WINSNMPAPI SnmpSvcGetUptime(void);
209 VOID WINSNMPAPI SnmpSvcSetLogLevel(INT);
210 VOID WINSNMPAPI SnmpSvcSetLogType(INT);
211 SNMPAPI WINSNMPAPI SnmpUtilAsnAnyCpy(AsnAny*,AsnAny*);
212 VOID WINSNMPAPI SnmpUtilAsnAnyFree(AsnAny*);
213 VOID WINSNMPAPI SnmpUtilDbgPrint(INT,LPSTR,...);
214 LPSTR WINSNMPAPI SnmpUtilIdsToA(UINT*,UINT);
215 LPVOID WINSNMPAPI SnmpUtilMemAlloc(UINT);
216 VOID WINSNMPAPI SnmpUtilMemFree(LPVOID);
217 LPVOID WINSNMPAPI SnmpUtilMemReAlloc(LPVOID,UINT);
218 SNMPAPI WINSNMPAPI SnmpUtilOctetsCmp(AsnOctetString*,AsnOctetString*);
219 SNMPAPI WINSNMPAPI SnmpUtilOctetsCpy(AsnOctetString*,AsnOctetString*);
220 VOID WINSNMPAPI SnmpUtilOctetsFree(AsnOctetString*);
221 SNMPAPI WINSNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*,AsnOctetString*,UINT);
222 SNMPAPI WINSNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*,AsnObjectIdentifier*);
223 SNMPAPI WINSNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*,AsnObjectIdentifier*);
224 SNMPAPI WINSNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*,AsnObjectIdentifier*);
225 VOID WINSNMPAPI SnmpUtilOidFree(AsnObjectIdentifier*);
226 SNMPAPI WINSNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*,AsnObjectIdentifier*,UINT);
227 LPSTR WINSNMPAPI SnmpUtilOidToA(AsnObjectIdentifier*);
228 VOID WINSNMPAPI SnmpUtilPrintAsnAny(AsnAny*);
229 VOID WINSNMPAPI SnmpUtilPrintOid(AsnObjectIdentifier*);
230 SNMPAPI WINSNMPAPI SnmpUtilVarBindCpy(  SnmpVarBind*,SnmpVarBind*);
231 SNMPAPI WINSNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*,SnmpVarBindList*);
232 VOID WINSNMPAPI SnmpUtilVarBindFree(SnmpVarBind*);
233 VOID WINSNMPAPI SnmpUtilVarBindListFree(SnmpVarBindList*);
234 
235 #ifndef SNMPSTRICT
236 #define SNMP_malloc SnmpUtilMemAlloc
237 #define SNMP_free SnmpUtilMemFree
238 #define SNMP_realloc SnmpUtilMemReAlloc
239 #define SNMP_DBG_malloc SnmpUtilMemAlloc
240 #define SNMP_DBG_free SnmpUtilMemFree
241 #define SNMP_DBG_realloc SnmpUtilMemReAlloc
242 #define SNMP_oidappend SnmpUtilOidAppend
243 #define SNMP_oidcmp SnmpUtilOidCmp
244 #define SNMP_oidcpy SnmpUtilOidCpy
245 #define SNMP_oidfree SnmpUtilOidFree
246 #define SNMP_oidncmp SnmpUtilOidNCmp
247 #define SNMP_printany SnmpUtilPrintAsnAny
248 #define SNMP_CopyVarBind SnmpUtilVarBindCpy
249 #define SNMP_CopyVarBindList SnmpUtilVarBindListCpy
250 #define SNMP_FreeVarBind SnmpUtilVarBindFree
251 #define SNMP_FreeVarBindList SnmpUtilVarBindListFree
252 #define MS_ASN_RFC1155_IPADDRESS MS_ASN_IPADDRESS
253 #define MS_ASN_RFC1155_COUNTER MS_ASN_COUNTER32
254 #define MS_ASN_RFC1155_GAUGE MS_ASN_GAUGE32
255 #define MS_ASN_RFC1155_TIMETICKS MS_ASN_TIMETICKS
256 #define MS_ASN_RFC1155_OPAQUE MS_ASN_OPAQUE
257 #define MS_ASN_RFC1213_DISPSTRING MS_ASN_OCTETSTRING
258 #define MS_ASN_RFC1157_GETREQUEST SNMP_PDU_GET
259 #define MS_ASN_RFC1157_GETNEXTREQUEST SNMP_PDU_GETNEXT
260 #define MS_ASN_RFC1157_GETRESPONSE SNMP_PDU_RESPONSE
261 #define MS_ASN_RFC1157_SETREQUEST SNMP_PDU_SET
262 #define MS_ASN_RFC1157_TRAP SNMP_PDU_V1TRAP
263 #define MS_ASN_CONTEXTSPECIFIC MS_ASN_CONTEXT
264 #define MS_ASN_PRIMATIVE MS_ASN_PRIMITIVE
265 #define RFC1157VarBindList SnmpVarBindList
266 #define RFC1157VarBind SnmpVarBind
267 #define AsnInteger AsnInteger32
268 #define AsnCounter AsnCounter32
269 #define AsnGauge AsnGauge32
270 #endif /* SNMPSTRICT */
271 
272 #endif /* RC_INVOKED */
273 
274 #ifdef __cplusplus
275 }
276 #endif
277 #include <poppack.h>
278 #endif
279