1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC src/core/sys/windows/_snmp.d)
9  */
10 module core.sys.windows.snmp;
11 version (Windows):
12 @system:
13 
14 import core.sys.windows.basetsd /+: HANDLE+/;
15 import core.sys.windows.windef /+: BOOL, BYTE, DWORD, INT, LONG, UINT, ULONG+/;
16 import core.sys.windows.winnt /+: LPSTR, LPVOID, ULARGE_INTEGER, VOID+/;
17 
18 // These are not documented on MSDN
19 enum {
20     DEFAULT_SNMP_PORT_UDP     =   161,
21     DEFAULT_SNMP_PORT_IPX     = 36879,
22     DEFAULT_SNMPTRAP_PORT_UDP =   162,
23     DEFAULT_SNMPTRAP_PORT_IPX = 36880
24 }
25 
26 enum : BYTE {
27     ASN_UNIVERSAL                 = 0x00,
28     ASN_PRIMITIVE                 = 0x00,
29     ASN_CONSTRUCTOR               = 0x20,
30     ASN_APPLICATION               = 0x40,
31     ASN_CONTEXT                   = 0x80,
32     ASN_PRIVATE                   = 0xC0,
33 
34     SNMP_PDU_GET                  = ASN_CONTEXT | ASN_CONSTRUCTOR,
35     SNMP_PDU_GETNEXT,
36     SNMP_PDU_RESPONSE,
37     SNMP_PDU_SET,
38     SNMP_PDU_GETBULK,          // = ASN_CONTEXT | ASN_CONSTRUCTOR | 4
39     SNMP_PDU_V1TRAP               = ASN_CONTEXT | ASN_CONSTRUCTOR | 4,
40     SNMP_PDU_INFORM               = ASN_CONTEXT | ASN_CONSTRUCTOR | 6,
41     SNMP_PDU_TRAP,
42     SNMP_PDU_REPORT,
43     ASN_INTEGER                   = ASN_UNIVERSAL | ASN_PRIMITIVE | 2,
44     ASN_BITS,
45     ASN_OCTETSTRING,
46     ASN_NULL,
47     ASN_OBJECTIDENTIFIER,      // = ASN_UNIVERSAL | ASN_PRIMITIVE | 6
48     ASN_INTEGER32                 = ASN_INTEGER,
49     ASN_SEQUENCE                  = ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10,
50     ASN_SEQUENCEOF                = ASN_SEQUENCE,
51     ASN_IPADDRESS                 = ASN_APPLICATION | ASN_PRIMITIVE,
52     ASN_COUNTER32,
53     ASN_GAUGE32,
54     ASN_TIMETICKS,
55     ASN_OPAQUE,                // = ASN_APPLICATION | ASN_PRIMITIVE | 4
56     ASN_COUNTER64                 = ASN_APPLICATION | ASN_PRIMITIVE | 6,
57     ASN_UNSIGNED32,            // = ASN_APPLICATION | ASN_PRIMITIVE | 7
58     SNMP_EXCEPTION_NOSUCHOBJECT   = ASN_CONTEXT | ASN_PRIMITIVE,
59     SNMP_EXCEPTION_NOSUCHINSTANCE,
60     SNMP_EXCEPTION_ENDOFMIBVIEW,
61     SNMP_EXTENSION_GET            = SNMP_PDU_GET,
62     SNMP_EXTENSION_GET_NEXT       = SNMP_PDU_GETNEXT,
63     SNMP_EXTENSION_GET_BULK       = SNMP_PDU_GETBULK,
64     SNMP_EXTENSION_SET_TEST       = ASN_PRIVATE | ASN_CONSTRUCTOR,
65     SNMP_EXTENSION_SET_COMMIT     = SNMP_PDU_SET,
66     SNMP_EXTENSION_SET_UNDO       = ASN_PRIVATE | ASN_CONSTRUCTOR | 1,
67     SNMP_EXTENSION_SET_CLEANUP
68 }
69 
70 
71 enum : AsnInteger {
72     SNMP_ERRORSTATUS_NOERROR,
73     SNMP_ERRORSTATUS_TOOBIG,
74     SNMP_ERRORSTATUS_NOSUCHNAME,
75     SNMP_ERRORSTATUS_BADVALUE,
76     SNMP_ERRORSTATUS_READONLY,
77     SNMP_ERRORSTATUS_GENERR,
78     SNMP_ERRORSTATUS_NOACCESS,
79     SNMP_ERRORSTATUS_WRONGTYPE,
80     SNMP_ERRORSTATUS_WRONGLENGTH,
81     SNMP_ERRORSTATUS_WRONGENCODING,
82     SNMP_ERRORSTATUS_WRONGVALUE,
83     SNMP_ERRORSTATUS_NOCREATION,
84     SNMP_ERRORSTATUS_INCONSISTENTVALUE,
85     SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE,
86     SNMP_ERRORSTATUS_COMMITFAILED,
87     SNMP_ERRORSTATUS_UNDOFAILED,
88     SNMP_ERRORSTATUS_AUTHORIZATIONERROR,
89     SNMP_ERRORSTATUS_NOTWRITABLE,
90     SNMP_ERRORSTATUS_INCONSISTENTNAME
91 }
92 
93 enum : AsnInteger {
94     SNMP_GENERICTRAP_COLDSTART,
95     SNMP_GENERICTRAP_WARMSTART,
96     SNMP_GENERICTRAP_LINKDOWN,
97     SNMP_GENERICTRAP_LINKUP,
98     SNMP_GENERICTRAP_AUTHFAILURE,
99     SNMP_GENERICTRAP_EGPNEIGHLOSS,
100     SNMP_GENERICTRAP_ENTERSPECIFIC
101 }
102 
103 // These are not documented on MSDN
104 enum {
105     SNMP_ACCESS_NONE,
106     SNMP_ACCESS_NOTIFY,
107     SNMP_ACCESS_READ_ONLY,
108     SNMP_ACCESS_READ_WRITE,
109     SNMP_ACCESS_READ_CREATE
110 }
111 
112 enum : BOOL {
113     SNMPAPI_ERROR   = false,
114     SNMPAPI_NOERROR = true
115 }
116 
117 enum : INT {
118     SNMP_LOG_SILENT,
119     SNMP_LOG_FATAL,
120     SNMP_LOG_ERROR,
121     SNMP_LOG_WARNING,
122     SNMP_LOG_TRACE,
123     SNMP_LOG_VERBOSE
124 }
125 
126 enum INT
127     SNMP_OUTPUT_TO_CONSOLE  = 1,
128     SNMP_OUTPUT_TO_LOGFILE  = 2,
129     SNMP_OUTPUT_TO_EVENTLOG = 4,
130     SNMP_OUTPUT_TO_DEBUGGER = 8;
131 
132 enum size_t SNMP_MAX_OID_LEN = 128;
133 
134 enum : DWORD {
135     SNMP_MEM_ALLOC_ERROR          =  1,
136     SNMP_BERAPI_INVALID_LENGTH    = 10,
137     SNMP_BERAPI_INVALID_TAG,
138     SNMP_BERAPI_OVERFLOW,
139     SNMP_BERAPI_SHORT_BUFFER,
140     SNMP_BERAPI_INVALID_OBJELEM,
141     SNMP_PDUAPI_UNRECOGNIZED_PDU  = 20,
142     SNMP_PDUAPI_INVALID_ES,
143     SNMP_PDUAPI_INVALID_GT,
144     SNMP_AUTHAPI_INVALID_VERSION  = 30,
145     SNMP_AUTHAPI_INVALID_MSG_TYPE,
146     SNMP_AUTHAPI_TRIV_AUTH_FAILED,
147 }
148 
149 alias INT SNMPAPI;
150 alias LONG AsnInteger32;
151 alias ULONG AsnUnsigned32, AsnCounter32, AsnGauge32, AsnTimeticks;
152 alias ULARGE_INTEGER AsnCounter64;
153 
154 align (4):
155 
156 struct AsnOctetString {
157 align (4):
158     BYTE* stream;
159     UINT  length;
160     BOOL  dynamic;
161 }
162 alias AsnOctetString AsnBits, AsnSequence, AsnImplicitSequence,
163   AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque;
164 
165 struct AsnObjectIdentifier {
166 align (4):
167     UINT  idLength;
168     UINT* ids;
169 }
170 alias AsnObjectIdentifier AsnObjectName;
171 
172 struct AsnAny {
173 align (4):
174     BYTE      asnType;
175     union _asnValue {
176         AsnInteger32        number;
177         AsnUnsigned32       unsigned32;
178         AsnCounter64        counter64;
179         AsnOctetString      string;
180         AsnBits             bits;
181         AsnObjectIdentifier object;
182         AsnSequence         sequence;
183         AsnIPAddress        address;
184         AsnCounter32        counter;
185         AsnGauge32          gauge;
186         AsnTimeticks        ticks;
187         AsnOpaque           arbitrary;
188     }
189     _asnValue asnValue;
190 }
191 alias AsnAny AsnObjectSyntax;
192 
193 struct SnmpVarBind {
194 align (4):
195     AsnObjectName   name;
196     AsnObjectSyntax value;
197 }
198 
199 struct SnmpVarBindList {
200 align (4):
201     SnmpVarBind* list;
202     UINT         len;
203 }
204 
205 extern (Windows) {
206     VOID SnmpExtensionClose();
207     BOOL SnmpExtensionInit(DWORD, HANDLE*, AsnObjectIdentifier*);
208     BOOL SnmpExtensionInitEx(AsnObjectIdentifier*);
209     BOOL SnmpExtensionMonitor(LPVOID);
210     BOOL SnmpExtensionQuery(BYTE, SnmpVarBindList*, AsnInteger32*,
211       AsnInteger32*);
212     BOOL SnmpExtensionQueryEx(DWORD, DWORD, SnmpVarBindList*, AsnOctetString*,
213       AsnInteger32*, AsnInteger32*);
214     BOOL SnmpExtensionTrap(AsnObjectIdentifier*, AsnInteger32*, AsnInteger32*,
215       AsnTimeticks*, SnmpVarBindList*);
216     DWORD SnmpSvcGetUptime();
217     VOID SnmpSvcSetLogLevel(INT);
218     VOID SnmpSvcSetLogType(INT);
219     SNMPAPI SnmpUtilAsnAnyCpy(AsnAny*, AsnAny*);
220     VOID SnmpUtilAsnAnyFree(AsnAny*);
221     VOID SnmpUtilDbgPrint(INT, LPSTR, ...);
222     LPSTR SnmpUtilIdsToA(UINT*, UINT);
223     LPVOID SnmpUtilMemAlloc(UINT);
224     VOID SnmpUtilMemFree(LPVOID);
225     LPVOID SnmpUtilMemReAlloc(LPVOID, UINT);
226     SNMPAPI SnmpUtilOctetsCmp(AsnOctetString*, AsnOctetString*);
227     SNMPAPI SnmpUtilOctetsCpy(AsnOctetString*, AsnOctetString*);
228     VOID SnmpUtilOctetsFree(AsnOctetString*);
229     SNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*, AsnOctetString*, UINT);
230     SNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*, AsnObjectIdentifier*);
231     SNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*, AsnObjectIdentifier*);
232     SNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*, AsnObjectIdentifier*);
233     VOID SnmpUtilOidFree(AsnObjectIdentifier*);
234     SNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*, AsnObjectIdentifier*, UINT);
235     LPSTR SnmpUtilOidToA(AsnObjectIdentifier*);
236     VOID SnmpUtilPrintAsnAny(AsnAny*);
237     VOID SnmpUtilPrintOid(AsnObjectIdentifier*);
238     SNMPAPI SnmpUtilVarBindCpy(SnmpVarBind*, SnmpVarBind*);
239     SNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*, SnmpVarBindList*);
240     VOID SnmpUtilVarBindFree(SnmpVarBind*);
241     VOID SnmpUtilVarBindListFree(SnmpVarBindList*);
242 }
243 
244 alias SnmpUtilMemAlloc SNMP_malloc;
245 alias SnmpUtilMemFree SNMP_free;
246 alias SnmpUtilMemReAlloc SNMP_realloc;
247 alias SnmpUtilMemAlloc SNMP_DBG_malloc;
248 alias SnmpUtilMemFree SNMP_DBG_free;
249 alias SnmpUtilMemReAlloc SNMP_DBG_realloc;
250 alias SnmpUtilOidAppend SNMP_oidappend;
251 alias SnmpUtilOidCmp SNMP_oidcmp;
252 alias SnmpUtilOidCpy SNMP_oidcpy;
253 alias SnmpUtilOidFree SNMP_oidfree;
254 alias SnmpUtilOidNCmp SNMP_oidncmp;
255 alias SnmpUtilPrintAsnAny SNMP_printany;
256 alias SnmpUtilVarBindCpy SNMP_CopyVarBind;
257 alias SnmpUtilVarBindListCpy SNMP_CopyVarBindList;
258 alias SnmpUtilVarBindFree SNMP_FreeVarBind;
259 alias SnmpUtilVarBindListFree SNMP_FreeVarBindList;
260 alias ASN_IPADDRESS ASN_RFC1155_IPADDRESS;
261 alias ASN_COUNTER32 ASN_RFC1155_COUNTER;
262 alias ASN_GAUGE32 ASN_RFC1155_GAUGE;
263 alias ASN_TIMETICKS ASN_RFC1155_TIMETICKS;
264 alias ASN_OPAQUE ASN_RFC1155_OPAQUE;
265 alias ASN_OCTETSTRING ASN_RFC1213_DISPSTRING;
266 alias SNMP_PDU_GET ASN_RFC1157_GETREQUEST;
267 alias SNMP_PDU_GETNEXT ASN_RFC1157_GETNEXTREQUEST;
268 alias SNMP_PDU_RESPONSE ASN_RFC1157_GETRESPONSE;
269 alias SNMP_PDU_SET ASN_RFC1157_SETREQUEST;
270 alias SNMP_PDU_V1TRAP ASN_RFC1157_TRAP;
271 alias ASN_CONTEXT ASN_CONTEXTSPECIFIC;
272 alias ASN_PRIMITIVE ASN_PRIMATIVE;
273 alias SnmpVarBindList RFC1157VarBindList;
274 alias SnmpVarBind RFC1157VarBind;
275 alias AsnInteger32 AsnInteger;
276 alias AsnCounter32 AsnCounter;
277 alias AsnGauge32 AsnGauge;
278