|
|
1.1 root 1: /*++ BUILD Version: 0001 // Increment this if a change has global effects
2:
3: Copyright (c) 1992, Microsoft Corporation
4:
5: Module Name:
6:
7: snmp.h
8:
9: Abstract:
10:
11: Type definitions for SNMP Extension Agent Development.
12:
13:
14: This PRE-RELEASE header file contains definitions that may change
15: prior to the official release of Windows NT. Microsoft makes no
16: warranty of any kind as to the suitability or correctness of this
17: code.
18:
19:
20: --*/
21:
22: #ifndef snmp_h
23: #define snmp_h
24:
25: static char *snmp__h = "@(#) $Logfile: N:/agent/common/vcs/snmp.h_v $ $Revision: 1.7 $";
26:
27:
28:
29: #include <windows.h>
30:
31:
32:
33: //
34: // SNMP API Constant Definitions
35: //
36:
37: // Purely for code readability
38: #define IN
39: #define OUT
40:
41:
42: // API return type
43:
44: #define SNMPAPI int
45:
46: #if (_MSC_VER >= 800)
47: #define SNMP_FUNC_TYPE __stdcall
48: #else
49: #define SNMP_FUNC_TYPE
50: #endif
51:
52:
53: // API return codes
54: #define SNMPAPI_NOERROR TRUE
55: #define SNMPAPI_ERROR FALSE
56:
57:
58: // class field of BER tag
59: #define ASN_UNIVERSAL 0x00
60: #define ASN_APPLICATION 0x40
61: #define ASN_CONTEXTSPECIFIC 0x80
62: #define ASN_PRIVATE 0xC0
63:
64: // primative/constructed field of BER tag
65: #define ASN_PRIMATIVE 0x00
66: #define ASN_CONSTRUCTOR 0x20
67:
68:
69: // ASN.1 simple types
70: #define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x02)
71: #define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x04)
72: #define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x05)
73: #define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMATIVE | 0x06)
74:
75: // ASN.1 constructor types
76: #define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
77: #define ASN_SEQUENCEOF ASN_SEQUENCE
78:
79: // ASN.1 application specific primatives
80: #define ASN_RFC1155_IPADDRESS (ASN_APPLICATION | ASN_PRIMATIVE | 0x00)
81: #define ASN_RFC1155_COUNTER (ASN_APPLICATION | ASN_PRIMATIVE | 0x01)
82: #define ASN_RFC1155_GAUGE (ASN_APPLICATION | ASN_PRIMATIVE | 0x02)
83: #define ASN_RFC1155_TIMETICKS (ASN_APPLICATION | ASN_PRIMATIVE | 0x03)
84: #define ASN_RFC1155_OPAQUE (ASN_APPLICATION | ASN_PRIMATIVE | 0x04)
85: #define ASN_RFC1213_DISPSTRING ASN_OCTETSTRING
86:
87: // ASN.1 application specific constructors
88: #define ASN_RFC1157_GETREQUEST \
89: (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x00)
90: #define ASN_RFC1157_GETNEXTREQUEST \
91: (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x01)
92: #define ASN_RFC1157_GETRESPONSE \
93: (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x02)
94: #define ASN_RFC1157_SETREQUEST \
95: (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x03)
96: #define ASN_RFC1157_TRAP \
97: (ASN_CONTEXTSPECIFIC | ASN_CONSTRUCTOR | 0x04)
98:
99:
100: // PDU error status
101: #define SNMP_ERRORSTATUS_NOERROR 0
102: #define SNMP_ERRORSTATUS_TOOBIG 1
103: #define SNMP_ERRORSTATUS_NOSUCHNAME 2
104: #define SNMP_ERRORSTATUS_BADVALUE 3
105: #define SNMP_ERRORSTATUS_READONLY 4
106: #define SNMP_ERRORSTATUS_GENERR 5
107:
108:
109: // PDU generic traps
110: #define SNMP_GENERICTRAP_COLDSTART 0
111: #define SNMP_GENERICTRAP_WARMSTART 1
112: #define SNMP_GENERICTRAP_LINKDOWN 2
113: #define SNMP_GENERICTRAP_LINKUP 3
114: #define SNMP_GENERICTRAP_AUTHFAILURE 4
115: #define SNMP_GENERICTRAP_EGPNEIGHLOSS 5
116: #define SNMP_GENERICTRAP_ENTERSPECIFIC 6
117:
118:
119:
120: //
121: // SNMP Error codes
122: //
123:
124: // General error codes
125: #define SNMP_MEM_ALLOC_ERROR 1
126:
127: // BER API error codes (using Get/Set LastError)
128: #define SNMP_BERAPI_INVALID_LENGTH 10
129: #define SNMP_BERAPI_INVALID_TAG 11
130: #define SNMP_BERAPI_OVERFLOW 12
131: #define SNMP_BERAPI_SHORT_BUFFER 13
132: #define SNMP_BERAPI_INVALID_OBJELEM 14
133:
134: // PDU API Error Codes
135: #define SNMP_PDUAPI_UNRECOGNIZED_PDU 20
136: #define SNMP_PDUAPI_INVALID_ES 21
137: #define SNMP_PDUAPI_INVALID_GT 22
138:
139: // AUTHENTICATION API Error Codes
140: #define SNMP_AUTHAPI_INVALID_VERSION 30
141: #define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
142: #define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
143:
144:
145:
146: //
147: // SNMP API Type Definitions
148: //
149:
150: typedef long AsnInteger;
151: typedef struct {
152: BYTE *stream;
153: UINT length;
154: BOOL dynamic;
155: } AsnOctetString;
156: typedef struct {
157: UINT idLength;
158: UINT *ids;
159: } AsnObjectIdentifier;
160:
161: typedef AsnOctetString AsnSequence;
162: typedef AsnSequence AsnImplicitSequence;
163:
164: typedef AsnOctetString AsnIPAddress;
165: typedef AsnOctetString AsnDisplayString;
166: typedef DWORD AsnCounter;
167: typedef DWORD AsnGauge;
168: typedef DWORD AsnTimeticks;
169: typedef AsnOctetString AsnOpaque;
170:
171: typedef struct {
172: BYTE asnType;
173: union {
174: // RFC 1155 SimpleSyntax (subset of ISO ASN.1)
175: AsnInteger number;
176: AsnOctetString string;
177: AsnObjectIdentifier object;
178:
179: // ISO ASN.1
180: AsnSequence sequence;
181:
182: // RFC 1155 ApplicationSyntax
183: AsnIPAddress address;
184: AsnCounter counter;
185: AsnGauge gauge;
186: AsnTimeticks ticks;
187: AsnOpaque arbitrary;
188: } asnValue;
189: } AsnAny;
190:
191: typedef AsnObjectIdentifier AsnObjectName;
192: typedef AsnAny AsnObjectSyntax;
193: typedef AsnIPAddress AsnNetworkAddress;
194:
195: typedef struct vb {
196: AsnObjectName name;
197: AsnObjectSyntax value;
198: } RFC1157VarBind;
199:
200: typedef struct {
201: RFC1157VarBind *list;
202: UINT len;
203: } RFC1157VarBindList;
204:
205: typedef struct {
206: RFC1157VarBindList varBinds;
207: AsnInteger requestType;
208: AsnInteger requestId;
209: AsnInteger errorStatus;
210: AsnInteger errorIndex;
211: } RFC1157Pdu;
212:
213: typedef struct {
214: RFC1157VarBindList varBinds;
215: AsnObjectIdentifier enterprise;
216: AsnNetworkAddress agentAddr;
217: AsnInteger genericTrap;
218: AsnInteger specificTrap;
219: AsnTimeticks timeStamp;
220: } RFC1157TrapPdu;
221:
222: typedef struct {
223: BYTE pduType;
224: union {
225: RFC1157Pdu pdu;
226: RFC1157TrapPdu trap;
227: } pduValue;
228: } RFC1157Pdus;
229:
230: typedef struct {
231: AsnObjectIdentifier dstParty;
232: AsnObjectIdentifier srcParty;
233: RFC1157Pdus pdu;
234: AsnOctetString community; // This is temporary
235: } SnmpMgmtCom;
236:
237:
238:
239: //
240: // SNMP Utility Prototypes
241: //
242:
243:
244: // Preferred names for the APIs, prototypes following may change in future.
245:
246: #define SnmpUtilOidCpy(a,b) SNMP_oidcpy(a,b)
247: #define SnmpUtilOidAppend(a,b) SNMP_oidappend(a,b)
248: #define SnmpUtilOidNCmp(a,b,c) SNMP_oidncmp(a,b,c)
249: #define SnmpUtilOidCmp(a,b) SNMP_oidcmp(a,b)
250: #define SnmpUtilOidFree(a) SNMP_oidfree(a)
251:
252: #define SnmpUtilVarBindListCpy(a,b) SNMP_CopyVarBindList(a,b)
253: #define SnmpUtilVarBindCpy(a,b) SNMP_CopyVarBind(a,b)
254: #define SnmpUtilVarBindListFree(a) SNMP_FreeVarBindList(a)
255: #define SnmpUtilVarBindFree(a) SNMP_FreeVarBind(a)
256:
257: #define SnmpUtilPrintAsnAny(a) SNMP_printany(a)
258:
259: #ifdef SNMPDBG
260: #define SNMP_free(x) SNMP_DBG_free(x, __LINE__, __FILE__)
261: #define SNMP_malloc(x) SNMP_DBG_malloc(x, __LINE__, __FILE__)
262: #define SNMP_realloc(x, y) SNMP_DBG_realloc(x, y, __LINE__, __FILE__)
263: #else
264: #define SNMP_free(x) free(x)
265: #define SNMP_malloc(x) malloc(x)
266: #define SNMP_realloc(x, y) realloc(x, y)
267: #endif
268:
269: void
270: SNMP_FUNC_TYPE SNMP_DBG_free(
271: IN void *x,
272: IN int line,
273: IN char *file
274: );
275:
276: void *
277: SNMP_FUNC_TYPE SNMP_DBG_malloc(
278: IN unsigned int x,
279: IN int line,
280: IN char *file
281: );
282:
283: void *
284: SNMP_FUNC_TYPE SNMP_DBG_realloc(
285: IN void *x,
286: IN unsigned int y,
287: IN int line,
288: IN char *file
289: );
290:
291: SNMPAPI
292: SNMP_FUNC_TYPE SNMP_oidcpy(
293: OUT AsnObjectIdentifier *DestObjId, // Destination OID
294: IN AsnObjectIdentifier *SrcObjId // Source OID
295: );
296:
297: SNMPAPI
298: SNMP_FUNC_TYPE SNMP_oidappend(
299: IN OUT AsnObjectIdentifier *DestObjId, // Destination OID
300: IN AsnObjectIdentifier *SrcObjId // Source OID
301: );
302:
303: SNMPAPI
304: SNMP_FUNC_TYPE SNMP_oidncmp(
305: IN AsnObjectIdentifier *A, // First OID
306: IN AsnObjectIdentifier *B, // Second OID
307: IN UINT Len // Max len to compare
308: );
309:
310: #define SNMP_oidcmp(A,B) SNMP_oidncmp(A,B,max((A)->idLength,(B)->idLength))
311:
312: void
313: SNMP_FUNC_TYPE SNMP_oidfree(
314: IN OUT AsnObjectIdentifier *Obj // OID to free
315: );
316:
317: SNMPAPI
318: SNMP_FUNC_TYPE SNMP_CopyVarBindList(
319: RFC1157VarBindList *dst, // Destination var bind list
320: RFC1157VarBindList *src // Source var bind list
321: );
322:
323: SNMPAPI
324: SNMP_FUNC_TYPE SNMP_CopyVarBind(
325: RFC1157VarBind *dst, // Destination var bind
326: RFC1157VarBind *src // Source var bind
327: );
328:
329:
330: void
331: SNMP_FUNC_TYPE SNMP_FreeVarBindList(
332: RFC1157VarBindList *VarBindList // Variable bindings list to free
333: );
334:
335: void
336: SNMP_FUNC_TYPE SNMP_FreeVarBind(
337: RFC1157VarBind *VarBind // Variable binding to free
338: );
339:
340:
341: void
342: SNMP_FUNC_TYPE SNMP_printany(
343: IN AsnAny *Any
344: );
345:
346:
347: #endif /* snmp_h */
348:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.