xref: /openbsd/regress/usr.sbin/snmpd/regress.h (revision 510d2225)
1 /*
2  * Generic
3  */
4 #define OID_MAX 128
5 
6 struct oid {
7 	uint32_t subid[OID_MAX];
8 	size_t n_subid;
9 	int include;
10 };
11 
12 struct searchrange {
13 	struct oid start;
14 	struct oid end;
15 };
16 
17 enum type {
18 	TYPE_INTEGER = 2,
19 	TYPE_OCTETSTRING = 4,
20 	TYPE_NULL = 5,
21 	TYPE_OBJECTIDENTIFIER = 6,
22 	TYPE_IPADDRESS = 64,
23 	TYPE_COUNTER32 = 65,
24 	TYPE_GAUGE32 = 66,
25 	TYPE_TIMETICKS = 67,
26 	TYPE_OPAQUE = 68,
27 	TYPE_COUNTER64 = 70,
28 	TYPE_NOSUCHOBJECT = 128,
29 	TYPE_NOSUCHINSTANCE = 129,
30 	TYPE_ENDOFMIBVIEW = 130,
31 	/* Don't expect a specific value: mod 1000 */
32 	TYPE_INTEGER_UNKNOWN = 1002,
33 	TYPE_OCTETSTRING_UNKNOWN = 1004,
34 	TYPE_OBJECTIDENTIFIER_UNKNOWN = 1006,
35 	TYPE_IPADDRESS_UNKNOWN = 1064
36 };
37 
38 enum error {
39 	NOERROR = 0,
40 	NOAGENTXERROR = 0,
41 	TOOBIG = 1,
42 	NOSUCHNAME = 2,
43 	BADVALUE = 3,
44 	READONLY = 4,
45 	GENERR = 5,
46 	NOACCESS = 6,
47 	WRONGTYPE = 7,
48 	WRONGLENGTH = 8,
49 	WRONGENCODING = 9,
50 	WRONGVALUE = 10,
51 	NOCREATION = 11,
52 	INCONSISTENTVALUE = 12,
53 	RESOURCEUNAVAILABLE = 13,
54 	COMMITFAILED = 14,
55 	UNDOFAILED = 15,
56 	AUTHORIZATIONERROR = 16,
57 	NOTWRITABLE = 17,
58 	INCONSISTENTNAME = 18,
59 	OPENFAILED = 256,
60 	NOTOPEN = 257,
61 	INDEXWRONGTYPE = 258,
62 	INDEXALREADYALLOCATED = 259,
63 	INDEXNONEAVAILABLE = 260,
64 	INDEXNOTALLOCATED = 261,
65 	UNSUPPORTEDCONTEXT = 262,
66 	DUPLICATEREGISTRATION = 263,
67 	UNKNOWNREGISTRATION = 264,
68 	UNKNOWNAGENTCAPS = 265,
69 	PARSEERROR = 266,
70 	REQUESTDENIED = 267,
71 	PROCESSINGERROR = 268
72 };
73 
74 enum close_reason {
75 	REASONOTHER = 1,
76 	REASONPARSEERROR = 2,
77 	REASONPROTOCOLERROR = 3,
78 	REASONTIMEOUTS = 4,
79 	REASONSHUTDOWN = 5,
80 	REASONBYMANAGER = 6
81 };
82 
83 struct varbind {
84 	int		typeunknown;
85 	int		nameunknown;
86 	int		dataunknown;
87 	enum type	type;
88 	struct oid	name;
89 	union data {
90 		int32_t		 int32;
91 		uint32_t	 uint32;
92 		uint64_t	 uint64;
93 		struct oid	 oid;
94 		struct octetstring {
95 			char	*string;
96 			size_t	 len;
97 		}		 octetstring;
98 	}		data;
99 };
100 
101 enum snmp_request {
102 	REQUEST_GET = 0,
103 	REQUEST_GETNEXT = 1,
104 	REQUEST_RESPONSE = 2,
105 	REQUEST_SET = 3,
106 	REQUEST_TRAP = 4,
107 	REQUEST_GETBULK = 5,
108 	REQUEST_INFORM = 6,
109 	REQUEST_TRAPV2 = 7,
110 	REQUEST_REPORT = 8
111 };
112 
113 
114 extern int verbose;
115 extern char *axsocket;
116 extern char *hostname;
117 extern char *servname;
118 extern char *community;
119 
120 int oid_cmp(struct oid *, struct oid *);
121 char *oid_print(struct oid *, char *, size_t);
122 
123 #define OID_STRUCT(...) (struct oid){					\
124 	.subid = { __VA_ARGS__ },					\
125 	.n_subid = (sizeof((uint32_t []) { __VA_ARGS__ }) / sizeof(uint32_t)) \
126 }
127 
128 #define OID_ARG(...) (uint32_t []) { __VA_ARGS__ },	\
129     (sizeof((uint32_t []) { __VA_ARGS__ }) / sizeof(uint32_t))
130 
131 /*
132  * AgentX
133  */
134 #define MIB_OPENBSD_REGRESS 1, 3, 6, 1, 4, 1, 30155, 42
135 /* Subagent names */
136 #define MIB_SUBAGENTS MIB_OPENBSD_REGRESS, 1
137 #define MIB_SUBAGENT_OPEN MIB_SUBAGENTS, 1
138 #define MIB_SUBAGENT_PING MIB_SUBAGENTS, 2
139 #define MIB_SUBAGENT_CLOSE MIB_SUBAGENTS, 3
140 #define MIB_SUBAGENT_REGISTER MIB_SUBAGENTS, 4
141 #define MIB_SUBAGENT_UNREGISTER MIB_SUBAGENTS, 4
142 #define MIB_SUBAGENT_BACKEND MIB_SUBAGENTS, 5
143 #define MIB_SUBAGENT_SNMP MIB_SUBAGENTS, 6
144 #define MIB_SUBAGENT_TRANSPORT MIB_SUBAGENTS, 7
145 /* Region used for registration testing */
146 #define MIB_REGISTER MIB_OPENBSD_REGRESS, 2
147 #define MIB_UNREGISTER MIB_OPENBSD_REGRESS, 3
148 #define MIB_BACKEND MIB_OPENBSD_REGRESS, 4
149 #define MIB_SNMP MIB_OPENBSD_REGRESS, 5
150 #define MIB_TRANSPORT MIB_OPENBSD_REGRESS, 6
151 
152 #define SYSORTABLE 1, 3, 6, 1, 2, 1, 1, 9
153 
154 int agentx_connect(const char *);
155 uint32_t agentx_open(int, int, uint8_t, uint32_t[], size_t, const char *);
156 void agentx_close(int, uint32_t, enum close_reason);
157 void agentx_register(int, uint32_t, uint8_t, uint8_t, uint8_t, uint8_t,
158     uint32_t[], size_t, uint32_t);
159 void agentx_response(int, void *, enum error, uint16_t, struct varbind *,
160     size_t);
161 void agentx_get_handle(const char *, const void *, size_t, uint8_t, uint32_t,
162     struct varbind *, size_t);
163 void agentx_getnext_handle(const char *, const void *, size_t, uint8_t,
164     uint32_t, struct searchrange *, struct varbind *, size_t);
165 size_t agentx_getbulk_handle(const char *, const void *, size_t, uint8_t, int32_t,
166     struct varbind *, size_t, struct varbind *);
167 size_t agentx_read(int, void *, size_t, int);
168 void agentx_timeout(int, int);
169 
170 
171 /* Tests */
172 void agentx_open_nnbo(void);
173 void agentx_open_nbo(void);
174 void agentx_open_invalidversion(void);
175 void agentx_open_ignore_sessionid(void);
176 void agentx_open_invalid_oid(void);
177 void agentx_open_descr_too_long(void);
178 void agentx_open_descr_invalid(void);
179 void agentx_open_context(void);
180 void agentx_open_instance_registration(void);
181 void agentx_open_new_index(void);
182 void agentx_open_any_index(void);
183 void agentx_ping_notopen(void);
184 void agentx_ping_invalid_sessionid(void);
185 void agentx_ping_default(void);
186 void agentx_ping_context(void);
187 void agentx_ping_invalid_version(void);
188 void agentx_ping_instance_registration(void);
189 void agentx_ping_new_index(void);
190 void agentx_ping_any_index(void);
191 void agentx_ping_nbo_nnbo(void);
192 void agentx_ping_nnbo_nbo(void);
193 void agentx_ping_invalid_version_close(void);
194 void agentx_close_notopen(void);
195 void agentx_close_reasonother(void);
196 void agentx_close_reasonparseerror(void);
197 void agentx_close_reasonprotocolerror(void);
198 void agentx_close_reasontimouts(void);
199 void agentx_close_reasonshutdown(void);
200 void agentx_close_reasonbymanager(void);
201 void agentx_close_reasoninvalid(void);
202 void agentx_close_single(void);
203 void agentx_close_notowned(void);
204 void agentx_close_invalid_sessionid(void);
205 void agentx_close_context(void);
206 void agentx_close_invalid_version(void);
207 void agentx_close_instance_registration(void);
208 void agentx_close_new_index(void);
209 void agentx_close_any_index(void);
210 void agentx_close_nnbo_nbo(void);
211 void agentx_register_notopen(void);
212 void agentx_register_invalid_sessionid(void);
213 void agentx_register_default(void);
214 void agentx_register_context(void);
215 void agentx_register_invalid_version(void);
216 void agentx_register_instance_registration(void);
217 void agentx_register_new_index(void);
218 void agentx_register_any_index(void);
219 void agentx_register_duplicate_self(void);
220 void agentx_register_duplicate_twocon(void);
221 void agentx_register_duplicate_priority(void);
222 void agentx_register_range(void);
223 void agentx_register_range_invalidupperbound(void);
224 void agentx_register_range_single(void);
225 void agentx_register_range_overlap_single(void);
226 void agentx_register_single_overlap_range(void);
227 void agentx_register_range_overlap_range(void);
228 void agentx_register_below(void);
229 void agentx_register_above(void);
230 void agentx_register_restricted(void);
231 void agentx_unregister_notopen(void);
232 void agentx_unregister_invalid_sessionid(void);
233 void agentx_unregister_notregistered(void);
234 void agentx_unregister_single(void);
235 void agentx_unregister_single_notowned(void);
236 void agentx_unregister_range(void);
237 void agentx_unregister_range_single(void);
238 void agentx_unregister_range_subset(void);
239 void agentx_unregister_range_extra(void);
240 void agentx_unregister_range_priority(void);
241 void agentx_unregister_range_notowned(void);
242 
243 /*
244  * SNMP
245  */
246 socklen_t snmp_resolve(int, const char *, const char *, struct sockaddr *);
247 int snmp_connect(int, struct sockaddr *, socklen_t);
248 int32_t snmpv2_get(int, const char *, int32_t, struct varbind *, size_t);
249 int32_t snmpv2_getnext(int, const char *, int32_t, struct varbind *, size_t);
250 int32_t snmpv2_getbulk(int, const char *, int32_t, int32_t, int32_t,
251     struct varbind *, size_t);
252 struct ber_element *snmpv2_build(const char *, enum snmp_request, int32_t,
253     int32_t, int32_t, struct varbind *, size_t);
254 void snmpv2_response_validate(int, int, const char *, int32_t, int32_t, int32_t,
255     struct varbind *, size_t);
256 void snmp_timeout(int, int);
257 void smi_debug_elements(struct ber_element *);
258 
259 void backend_get_integer(void);
260 void backend_get_octetstring(void);
261 void backend_get_objectidentifier(void);
262 void backend_get_ipaddress(void);
263 void backend_get_counter32(void);
264 void backend_get_gauge32(void);
265 void backend_get_timeticks(void);
266 void backend_get_opaque(void);
267 void backend_get_counter64(void);
268 void backend_get_nosuchobject(void);
269 void backend_get_nosuchinstance(void);
270 void backend_get_endofmibview(void);
271 void backend_get_two_single_backend(void);
272 void backend_get_two_double_backend(void);
273 void backend_get_wrongorder(void);
274 void backend_get_toofew(void);
275 void backend_get_toomany(void);
276 void backend_get_instance(void);
277 void backend_get_instance_below(void);
278 void backend_get_timeout_default(void);
279 void backend_get_timeout_session_lower(void);
280 void backend_get_timeout_session_higher(void);
281 void backend_get_timeout_region_lower(void);
282 void backend_get_timeout_region_higher(void);
283 void backend_get_priority_lower(void);
284 void backend_get_priority_higher(void);
285 void backend_get_priority_below_lower(void);
286 void backend_get_priority_below_higher(void);
287 void backend_get_close(void);
288 void backend_get_close_overlap(void);
289 void backend_get_disappear(void);
290 void backend_get_disappear_overlap(void);
291 void backend_get_disappear_doublesession(void);
292 void backend_getnext_selfbound(void);
293 void backend_getnext_lowerbound(void);
294 void backend_getnext_lowerbound_self(void);
295 void backend_getnext_lowerbound_highprio(void);
296 void backend_getnext_lowerbound_lowprio(void);
297 void backend_getnext_sibling(void);
298 void backend_getnext_child_gap(void);
299 void backend_getnext_nosuchobject(void);
300 void backend_getnext_nosuchinstance(void);
301 void backend_getnext_endofmibview(void);
302 void backend_getnext_inclusive(void);
303 void backend_getnext_jumpnext(void);
304 void backend_getnext_jumpnext_endofmibview(void);
305 void backend_getnext_jump_up(void);
306 void backend_getnext_jump_up(void);
307 void backend_getnext_two_single_backend(void);
308 void backend_getnext_two_double_backend(void);
309 void backend_getnext_instance_below(void);
310 void backend_getnext_instance(void);
311 void backend_getnext_instance_exact(void);
312 void backend_getnext_instance_ignore(void);
313 void backend_getnext_instance_ignore(void);
314 void backend_getnext_backwards(void);
315 void backend_getnext_stale(void);
316 void backend_getnext_inclusive_backwards(void);
317 void backend_getnext_toofew(void);
318 void backend_getnext_toomany(void);
319 void backend_getnext_response_equal_end(void);
320 void backend_getnext_instance_below_region_before_instance(void);
321 void backend_getnext_instance_below_region_on_instance(void);
322 void backend_getnext_instance_below_region_below_instance(void);
323 void backend_getbulk_nonrep_zero_maxrep_one(void);
324 void backend_getbulk_nonrep_zero_maxrep_two(void);
325 void backend_getbulk_nonrep_one_maxrep_one(void);
326 void backend_getbulk_nonrep_one_maxrep_two(void);
327 void backend_getbulk_nonrep_two_maxrep_two(void);
328 void backend_getbulk_nonrep_negative(void);
329 void backend_getbulk_endofmibview(void);
330 void backend_getbulk_endofmibview_second_rep(void);
331 void backend_getbulk_endofmibview_two_varbinds(void);
332 void backend_error_get_toobig(void);
333 void backend_error_get_nosuchname(void);
334 void backend_error_get_badvalue(void);
335 void backend_error_get_readonly(void);
336 void backend_error_get_generr(void);
337 void backend_error_get_wrongtype(void);
338 void backend_error_get_wronglength(void);
339 void backend_error_get_wrongencoding(void);
340 void backend_error_get_wrongvalue(void);
341 void backend_error_get_nocreation(void);
342 void backend_error_get_inconsistentvalue(void);
343 void backend_error_get_commitfailed(void);
344 void backend_error_get_undofailed(void);
345 void backend_error_get_authorizationerror(void);
346 void backend_error_get_notwritable(void);
347 void backend_error_get_inconsistentname(void);
348 void backend_error_get_openfailed(void);
349 void backend_error_get_notopen(void);
350 void backend_error_get_indexwrongtype(void);
351 void backend_error_get_indexalreadyallocated(void);
352 void backend_error_get_indexnonavailable(void);
353 void backend_error_get_indexnotallocated(void);
354 void backend_error_get_duplicateregistration(void);
355 void backend_error_get_requestdenied(void);
356 void backend_error_get_processingerror(void);
357 void backend_error_get_nonstandard(void);
358 void backend_error_getnext_toobig(void);
359 void backend_error_getnext_nosuchname(void);
360 void backend_error_getnext_badvalue(void);
361 void backend_error_getnext_readonly(void);
362 void backend_error_getnext_generr(void);
363 void backend_error_getnext_noaccess(void);
364 void backend_error_getnext_wrongtype(void);
365 void backend_error_getnext_wronglength(void);
366 void backend_error_getnext_wrongencoding(void);
367 void backend_error_getnext_wrongvalue(void);
368 void backend_error_getnext_nocreation(void);
369 void backend_error_getnext_inconsistentvalue(void);
370 void backend_error_getnext_resourceunavailable(void);
371 void backend_error_getnext_commitfailed(void);
372 void backend_error_getnext_undofailed(void);
373 void backend_error_getnext_notwritable(void);
374 void backend_error_getnext_inconsistentname(void);
375 void backend_error_getnext_openfailed(void);
376 void backend_error_getnext_notopen(void);
377 void backend_error_getnext_indexwrongtype(void);
378 void backend_error_getnext_indexalreadyallocated(void);
379 void backend_error_getnext_indexnonavailable(void);
380 void backend_error_getnext_indexnotallocated(void);
381 void backend_error_getnext_unsupportedcontext(void);
382 void backend_error_getnext_duplicateregistration(void);
383 void backend_error_getnext_unknownregistration(void);
384 void backend_error_getnext_parseerror(void);
385 void backend_error_getnext_requestdenied(void);
386 void backend_error_getnext_processingerror(void);
387 void backend_error_getnext_nonstandard(void);
388 void backend_error_getbulk_firstrepetition(void);
389 void backend_error_getbulk_secondrepetition(void);
390 void snmp_v3_usm_noauthpriv(void);
391 void transport_tcp_get(void);
392 void transport_tcp_disconnect(void);
393 void transport_tcp_double_get_disconnect(void);
394