184417368Smartijn #include <sys/socket.h>
284417368Smartijn
384417368Smartijn #include <err.h>
484417368Smartijn #include <inttypes.h>
584417368Smartijn #include <stdio.h>
684417368Smartijn #include <stdlib.h>
784417368Smartijn #include <string.h>
884417368Smartijn #include <unistd.h>
984417368Smartijn
1084417368Smartijn #include "regress.h"
1184417368Smartijn
1284417368Smartijn __dead void usage(void);
1384417368Smartijn
1484417368Smartijn const struct {
1584417368Smartijn char *target;
1684417368Smartijn void (*function)(void);
1784417368Smartijn } targets[] = {
1884417368Smartijn { "agentx_open_nnbo", agentx_open_nnbo },
1984417368Smartijn { "agentx_open_nbo", agentx_open_nbo },
2084417368Smartijn { "agentx_open_invalidversion", agentx_open_invalidversion },
2184417368Smartijn { "agentx_open_ignore_sessionid", agentx_open_ignore_sessionid },
2284417368Smartijn { "agentx_open_invalid_oid", agentx_open_invalid_oid },
2384417368Smartijn { "agentx_open_descr_too_long", agentx_open_descr_too_long },
2484417368Smartijn { "agentx_open_descr_invalid", agentx_open_descr_invalid },
2584417368Smartijn { "agentx_open_context", agentx_open_context },
2684417368Smartijn { "agentx_open_instance_registration", agentx_open_instance_registration },
2784417368Smartijn { "agentx_open_new_index", agentx_open_new_index },
2884417368Smartijn { "agentx_open_any_index", agentx_open_any_index },
2984417368Smartijn { "agentx_ping_notopen", agentx_ping_notopen },
3084417368Smartijn { "agentx_ping_invalid_sessionid", agentx_ping_invalid_sessionid },
3184417368Smartijn { "agentx_ping_default", agentx_ping_default },
3284417368Smartijn { "agentx_ping_context", agentx_ping_context },
3384417368Smartijn { "agentx_ping_invalid_version", agentx_ping_invalid_version },
3484417368Smartijn { "agentx_ping_instance_registration", agentx_ping_instance_registration },
3584417368Smartijn { "agentx_ping_new_index", agentx_ping_new_index },
3684417368Smartijn { "agentx_ping_any_index", agentx_ping_any_index },
3784417368Smartijn { "agentx_ping_nbo_nnbo", agentx_ping_nbo_nnbo },
3884417368Smartijn { "agentx_ping_nnbo_nbo", agentx_ping_nnbo_nbo },
39e024f79dSmartijn { "agentx_ping_invalid_version_close", agentx_ping_invalid_version_close },
4084417368Smartijn { "agentx_close_notopen", agentx_close_notopen },
4184417368Smartijn { "agentx_close_reasonother", agentx_close_reasonother },
4284417368Smartijn { "agentx_close_reasonparseerror", agentx_close_reasonparseerror },
4384417368Smartijn { "agentx_close_reasonprotocolerror", agentx_close_reasonprotocolerror },
4484417368Smartijn { "agentx_close_reasontimouts", agentx_close_reasontimouts },
4584417368Smartijn { "agentx_close_reasonshutdown", agentx_close_reasonshutdown },
4684417368Smartijn { "agentx_close_reasonbymanager", agentx_close_reasonbymanager },
4784417368Smartijn { "agentx_close_reasoninvalid", agentx_close_reasoninvalid },
4884417368Smartijn { "agentx_close_single", agentx_close_single },
4984417368Smartijn { "agentx_close_notowned", agentx_close_notowned },
5084417368Smartijn { "agentx_close_invalid_sessionid", agentx_close_invalid_sessionid },
5184417368Smartijn { "agentx_close_context", agentx_close_context },
5284417368Smartijn { "agentx_close_invalid_version", agentx_close_invalid_version },
5384417368Smartijn { "agentx_close_instance_registration", agentx_close_instance_registration },
5484417368Smartijn { "agentx_close_new_index", agentx_close_new_index },
5584417368Smartijn { "agentx_close_any_index", agentx_close_any_index },
5684417368Smartijn { "agentx_close_nnbo_nbo", agentx_close_nnbo_nbo },
5784417368Smartijn { "agentx_register_notopen", agentx_register_notopen },
5884417368Smartijn { "agentx_register_invalid_sessionid", agentx_register_invalid_sessionid },
5984417368Smartijn { "agentx_register_default", agentx_register_default },
6084417368Smartijn { "agentx_register_context", agentx_register_context },
6184417368Smartijn { "agentx_register_invalid_version", agentx_register_invalid_version },
6284417368Smartijn { "agentx_register_instance_registration", agentx_register_instance_registration },
6384417368Smartijn { "agentx_register_new_index", agentx_register_new_index },
6484417368Smartijn { "agentx_register_any_index", agentx_register_any_index },
6584417368Smartijn { "agentx_register_duplicate_self", agentx_register_duplicate_self },
6684417368Smartijn { "agentx_register_duplicate_twocon", agentx_register_duplicate_twocon },
6784417368Smartijn { "agentx_register_duplicate_priority", agentx_register_duplicate_priority },
6884417368Smartijn { "agentx_register_range", agentx_register_range },
6984417368Smartijn { "agentx_register_range_invalidupperbound", agentx_register_range_invalidupperbound },
7084417368Smartijn { "agentx_register_range_single", agentx_register_range_single },
7184417368Smartijn { "agentx_register_range_overlap_single", agentx_register_range_overlap_single },
7284417368Smartijn { "agentx_register_single_overlap_range", agentx_register_single_overlap_range },
7384417368Smartijn { "agentx_register_range_overlap_range", agentx_register_range_overlap_range },
7484417368Smartijn { "agentx_register_below", agentx_register_below },
7584417368Smartijn { "agentx_register_above", agentx_register_above },
7684417368Smartijn { "agentx_register_restricted", agentx_register_restricted },
7784417368Smartijn { "agentx_unregister_notopen", agentx_unregister_notopen },
7884417368Smartijn { "agentx_unregister_invalid_sessionid", agentx_unregister_invalid_sessionid },
7984417368Smartijn { "agentx_unregister_notregistered", agentx_unregister_notregistered },
8084417368Smartijn { "agentx_unregister_single", agentx_unregister_single },
8184417368Smartijn { "agentx_unregister_single_notowned", agentx_unregister_single_notowned },
8284417368Smartijn { "agentx_unregister_range", agentx_unregister_range },
8384417368Smartijn { "agentx_unregister_range_single", agentx_unregister_range_single },
8484417368Smartijn { "agentx_unregister_range_subset", agentx_unregister_range_subset },
8584417368Smartijn { "agentx_unregister_range_extra", agentx_unregister_range_extra },
8684417368Smartijn { "agentx_unregister_range_priority", agentx_unregister_range_priority },
8784417368Smartijn { "agentx_unregister_range_notowned", agentx_unregister_range_notowned },
8884417368Smartijn { "backend_get_integer", backend_get_integer },
8984417368Smartijn { "backend_get_octetstring", backend_get_octetstring },
9084417368Smartijn { "backend_get_objectidentifier", backend_get_objectidentifier },
9184417368Smartijn { "backend_get_ipaddress", backend_get_ipaddress },
9284417368Smartijn { "backend_get_counter32", backend_get_counter32 },
9384417368Smartijn { "backend_get_gauge32", backend_get_gauge32 },
9484417368Smartijn { "backend_get_timeticks", backend_get_timeticks },
9584417368Smartijn { "backend_get_opaque", backend_get_opaque },
9684417368Smartijn { "backend_get_counter64", backend_get_counter64 },
9784417368Smartijn { "backend_get_nosuchobject", backend_get_nosuchobject },
9884417368Smartijn { "backend_get_nosuchinstance", backend_get_nosuchinstance },
9984417368Smartijn { "backend_get_endofmibview", backend_get_endofmibview },
10084417368Smartijn { "backend_get_two_single_backend", backend_get_two_single_backend },
10184417368Smartijn { "backend_get_two_double_backend", backend_get_two_double_backend },
10284417368Smartijn { "backend_get_wrongorder", backend_get_wrongorder },
10384417368Smartijn { "backend_get_toofew", backend_get_toofew },
10484417368Smartijn { "backend_get_toomany", backend_get_toomany },
10584417368Smartijn { "backend_get_instance", backend_get_instance },
10684417368Smartijn { "backend_get_instance_below", backend_get_instance_below },
10784417368Smartijn { "backend_get_timeout_default", backend_get_timeout_default },
10884417368Smartijn { "backend_get_timeout_session_lower", backend_get_timeout_session_lower },
10984417368Smartijn { "backend_get_timeout_session_higher", backend_get_timeout_session_higher },
11084417368Smartijn { "backend_get_timeout_region_lower", backend_get_timeout_region_lower },
11184417368Smartijn { "backend_get_timeout_region_higher", backend_get_timeout_region_higher },
11284417368Smartijn { "backend_get_priority_lower", backend_get_priority_lower },
11384417368Smartijn { "backend_get_priority_higher", backend_get_priority_higher },
11484417368Smartijn { "backend_get_priority_below_lower", backend_get_priority_below_lower },
11584417368Smartijn { "backend_get_priority_below_higher", backend_get_priority_below_higher },
11684417368Smartijn { "backend_get_close", backend_get_close },
11784417368Smartijn { "backend_get_close_overlap", backend_get_close_overlap },
11884417368Smartijn { "backend_get_disappear", backend_get_disappear },
11984417368Smartijn { "backend_get_disappear_overlap", backend_get_disappear_overlap },
12084417368Smartijn { "backend_get_disappear_doublesession", backend_get_disappear_doublesession },
121*1434a006Smartijn { "backend_get_octetstring_max", backend_get_octetstring_max },
122*1434a006Smartijn { "backend_get_octetstring_too_long", backend_get_octetstring_too_long },
123*1434a006Smartijn { "backend_get_ipaddress_too_short", backend_get_ipaddress_too_short },
124*1434a006Smartijn { "backend_get_ipaddress_too_long", backend_get_ipaddress_too_long },
125*1434a006Smartijn { "backend_get_opaque_non_ber", backend_get_opaque_non_ber },
126*1434a006Smartijn { "backend_get_opaque_double_value", backend_get_opaque_double_value },
12784417368Smartijn { "backend_getnext_selfbound", backend_getnext_selfbound },
12884417368Smartijn { "backend_getnext_lowerbound", backend_getnext_lowerbound },
12984417368Smartijn { "backend_getnext_lowerbound_self", backend_getnext_lowerbound_self },
13084417368Smartijn { "backend_getnext_lowerbound_highprio", backend_getnext_lowerbound_highprio },
13184417368Smartijn { "backend_getnext_lowerbound_lowprio", backend_getnext_lowerbound_lowprio },
13284417368Smartijn { "backend_getnext_sibling", backend_getnext_sibling },
13384417368Smartijn { "backend_getnext_child_gap", backend_getnext_child_gap },
13484417368Smartijn { "backend_getnext_nosuchobject", backend_getnext_nosuchobject },
13584417368Smartijn { "backend_getnext_nosuchinstance", backend_getnext_nosuchinstance },
13684417368Smartijn { "backend_getnext_endofmibview", backend_getnext_endofmibview },
13784417368Smartijn { "backend_getnext_inclusive", backend_getnext_inclusive },
13884417368Smartijn { "backend_getnext_jumpnext", backend_getnext_jumpnext },
13984417368Smartijn { "backend_getnext_jumpnext_endofmibview", backend_getnext_jumpnext_endofmibview },
14084417368Smartijn { "backend_getnext_jump_up", backend_getnext_jump_up },
14184417368Smartijn { "backend_getnext_two_single_backend", backend_getnext_two_single_backend },
14284417368Smartijn { "backend_getnext_two_double_backend", backend_getnext_two_double_backend },
14384417368Smartijn { "backend_getnext_instance_below", backend_getnext_instance_below },
14484417368Smartijn { "backend_getnext_instance", backend_getnext_instance },
14584417368Smartijn { "backend_getnext_instance_exact", backend_getnext_instance_exact },
14684417368Smartijn { "backend_getnext_instance_ignore", backend_getnext_instance_ignore },
14784417368Smartijn { "backend_getnext_backwards", backend_getnext_backwards },
14884417368Smartijn { "backend_getnext_stale", backend_getnext_stale },
14984417368Smartijn { "backend_getnext_inclusive_backwards", backend_getnext_inclusive_backwards },
15084417368Smartijn { "backend_getnext_toofew", backend_getnext_toofew },
15184417368Smartijn { "backend_getnext_toomany", backend_getnext_toomany },
152dae64e9eSmartijn { "backend_getnext_response_equal_end", backend_getnext_response_equal_end },
153096a942aSmartijn { "backend_getnext_instance_below_region_before_instance", backend_getnext_instance_below_region_before_instance },
154096a942aSmartijn { "backend_getnext_instance_below_region_on_instance", backend_getnext_instance_below_region_on_instance },
155096a942aSmartijn { "backend_getnext_instance_below_region_below_instance", backend_getnext_instance_below_region_below_instance },
15684417368Smartijn { "backend_getbulk_nonrep_zero_maxrep_one", backend_getbulk_nonrep_zero_maxrep_one },
15784417368Smartijn { "backend_getbulk_nonrep_zero_maxrep_two", backend_getbulk_nonrep_zero_maxrep_two },
15884417368Smartijn { "backend_getbulk_nonrep_one_maxrep_one", backend_getbulk_nonrep_one_maxrep_one },
15984417368Smartijn { "backend_getbulk_nonrep_one_maxrep_two", backend_getbulk_nonrep_one_maxrep_two },
16084417368Smartijn { "backend_getbulk_nonrep_two_maxrep_two", backend_getbulk_nonrep_two_maxrep_two },
16184417368Smartijn { "backend_getbulk_nonrep_negative", backend_getbulk_nonrep_negative },
1622ccef039Smartijn { "backend_getbulk_endofmibview", backend_getbulk_endofmibview },
1632ccef039Smartijn { "backend_getbulk_endofmibview_second_rep", backend_getbulk_endofmibview_second_rep },
1642ccef039Smartijn { "backend_getbulk_endofmibview_two_varbinds", backend_getbulk_endofmibview_two_varbinds },
16584417368Smartijn { "backend_error_get_toobig", backend_error_get_toobig },
16684417368Smartijn { "backend_error_get_nosuchname", backend_error_get_nosuchname },
16784417368Smartijn { "backend_error_get_badvalue", backend_error_get_badvalue },
16884417368Smartijn { "backend_error_get_readonly", backend_error_get_readonly },
16984417368Smartijn { "backend_error_get_generr", backend_error_get_generr },
17084417368Smartijn { "backend_error_get_wrongtype", backend_error_get_wrongtype },
17184417368Smartijn { "backend_error_get_wronglength", backend_error_get_wronglength },
17284417368Smartijn { "backend_error_get_wrongvalue", backend_error_get_wrongvalue },
17384417368Smartijn { "backend_error_get_nocreation", backend_error_get_nocreation },
17484417368Smartijn { "backend_error_get_inconsistentvalue", backend_error_get_inconsistentvalue },
17584417368Smartijn { "backend_error_get_commitfailed", backend_error_get_commitfailed },
17684417368Smartijn { "backend_error_get_undofailed", backend_error_get_undofailed },
17784417368Smartijn { "backend_error_get_authorizationerror", backend_error_get_authorizationerror },
17884417368Smartijn { "backend_error_get_notwritable", backend_error_get_notwritable },
17984417368Smartijn { "backend_error_get_inconsistentname", backend_error_get_inconsistentname },
18084417368Smartijn { "backend_error_get_openfailed", backend_error_get_openfailed },
18184417368Smartijn { "backend_error_get_notopen", backend_error_get_notopen },
18284417368Smartijn { "backend_error_get_indexwrongtype", backend_error_get_indexwrongtype },
18384417368Smartijn { "backend_error_get_indexalreadyallocated", backend_error_get_indexalreadyallocated },
18484417368Smartijn { "backend_error_get_indexnonavailable", backend_error_get_indexnonavailable },
18584417368Smartijn { "backend_error_get_indexnotallocated", backend_error_get_indexnotallocated },
18684417368Smartijn { "backend_error_get_duplicateregistration", backend_error_get_duplicateregistration },
18784417368Smartijn { "backend_error_get_requestdenied", backend_error_get_requestdenied },
18884417368Smartijn { "backend_error_get_processingerror", backend_error_get_processingerror },
18984417368Smartijn { "backend_error_get_nonstandard", backend_error_get_nonstandard },
19084417368Smartijn { "backend_error_getnext_toobig", backend_error_getnext_toobig },
19184417368Smartijn { "backend_error_getnext_nosuchname", backend_error_getnext_nosuchname },
19284417368Smartijn { "backend_error_getnext_badvalue", backend_error_getnext_badvalue },
19384417368Smartijn { "backend_error_getnext_readonly", backend_error_getnext_readonly },
19484417368Smartijn { "backend_error_getnext_generr", backend_error_getnext_generr },
19584417368Smartijn { "backend_error_getnext_noaccess", backend_error_getnext_noaccess },
19684417368Smartijn { "backend_error_getnext_wrongtype", backend_error_getnext_wrongtype },
19784417368Smartijn { "backend_error_getnext_wronglength", backend_error_getnext_wronglength },
19884417368Smartijn { "backend_error_getnext_wrongencoding", backend_error_getnext_wrongencoding },
19984417368Smartijn { "backend_error_getnext_wrongvalue", backend_error_getnext_wrongvalue },
20084417368Smartijn { "backend_error_getnext_nocreation", backend_error_getnext_nocreation },
20184417368Smartijn { "backend_error_getnext_inconsistentvalue", backend_error_getnext_inconsistentvalue },
20284417368Smartijn { "backend_error_getnext_resourceunavailable", backend_error_getnext_resourceunavailable },
20384417368Smartijn { "backend_error_getnext_commitfailed", backend_error_getnext_commitfailed },
20484417368Smartijn { "backend_error_getnext_undofailed", backend_error_getnext_undofailed },
20584417368Smartijn { "backend_error_getnext_notwritable", backend_error_getnext_notwritable },
20684417368Smartijn { "backend_error_getnext_inconsistentname", backend_error_getnext_inconsistentname },
20784417368Smartijn { "backend_error_getnext_openfailed", backend_error_getnext_openfailed },
20884417368Smartijn { "backend_error_getnext_notopen", backend_error_getnext_notopen },
20984417368Smartijn { "backend_error_getnext_indexwrongtype", backend_error_getnext_indexwrongtype },
21084417368Smartijn { "backend_error_getnext_indexalreadyallocated", backend_error_getnext_indexalreadyallocated },
21184417368Smartijn { "backend_error_getnext_indexnonavailable", backend_error_getnext_indexnonavailable },
21284417368Smartijn { "backend_error_getnext_indexnotallocated", backend_error_getnext_indexnotallocated },
21384417368Smartijn { "backend_error_getnext_unsupportedcontext", backend_error_getnext_unsupportedcontext },
21484417368Smartijn { "backend_error_getnext_duplicateregistration", backend_error_getnext_duplicateregistration },
21584417368Smartijn { "backend_error_getnext_unknownregistration", backend_error_getnext_unknownregistration },
21684417368Smartijn { "backend_error_getnext_parseerror", backend_error_getnext_parseerror },
21784417368Smartijn { "backend_error_getnext_requestdenied", backend_error_getnext_requestdenied },
21884417368Smartijn { "backend_error_getnext_processingerror", backend_error_getnext_processingerror },
21984417368Smartijn { "backend_error_getnext_nonstandard", backend_error_getnext_nonstandard },
220b38eec6cSmartijn { "backend_error_getbulk_firstrepetition", backend_error_getbulk_firstrepetition },
221b38eec6cSmartijn { "backend_error_getbulk_secondrepetition", backend_error_getbulk_secondrepetition },
222da328aa4Smartijn { "snmp_v3_usm_noauthpriv", snmp_v3_usm_noauthpriv },
2234e63e8f9Smartijn { "transport_tcp_get", transport_tcp_get },
2244e63e8f9Smartijn { "transport_tcp_disconnect", transport_tcp_disconnect },
2254e63e8f9Smartijn { "transport_tcp_double_get_disconnect", transport_tcp_double_get_disconnect },
22684417368Smartijn { NULL, NULL }
22784417368Smartijn };
22884417368Smartijn
22984417368Smartijn int verbose = 0;
23084417368Smartijn char *axsocket = NULL;
23184417368Smartijn
23284417368Smartijn char *hostname = NULL;
23384417368Smartijn char *servname = NULL;
23484417368Smartijn
23584417368Smartijn char *community = NULL;
23684417368Smartijn
23784417368Smartijn int
main(int argc,char * argv[])23884417368Smartijn main(int argc, char *argv[])
23984417368Smartijn {
24084417368Smartijn size_t i, j;
24184417368Smartijn int c;
24284417368Smartijn
24384417368Smartijn while ((c = getopt(argc, argv, "a:h:p:v")) != -1) {
24484417368Smartijn switch (c) {
24584417368Smartijn case 'a':
24684417368Smartijn axsocket = optarg;
24784417368Smartijn break;
24884417368Smartijn case 'c':
24984417368Smartijn community = optarg;
25084417368Smartijn break;
25184417368Smartijn case 'h':
25284417368Smartijn hostname = optarg;
25384417368Smartijn break;
25484417368Smartijn case 'p':
25584417368Smartijn servname = optarg;
25684417368Smartijn break;
25784417368Smartijn case 'v':
25884417368Smartijn verbose = 1;
25984417368Smartijn break;
26084417368Smartijn default:
26184417368Smartijn usage();
26284417368Smartijn }
26384417368Smartijn }
26484417368Smartijn argc -= optind;
26584417368Smartijn argv += optind;
26684417368Smartijn
26784417368Smartijn if (argc != 1)
26884417368Smartijn usage();
26984417368Smartijn
27084417368Smartijn for (i = 0; i < argc; i++) {
27184417368Smartijn for (j = 0; targets[j].target != NULL; j++) {
27284417368Smartijn if (strcmp(argv[i], targets[j].target) == 0) {
27384417368Smartijn targets[j].function();
27484417368Smartijn return 0;
27584417368Smartijn }
27684417368Smartijn }
27784417368Smartijn }
27884417368Smartijn
27984417368Smartijn errx(1, "Unknown target: %s", argv[1]);
28084417368Smartijn }
28184417368Smartijn
28284417368Smartijn __dead void
usage(void)28384417368Smartijn usage(void)
28484417368Smartijn {
28584417368Smartijn fprintf(stderr, "%s: [-v] [-a axsocket] test\n", getprogname());
28684417368Smartijn exit(1);
28784417368Smartijn }
28884417368Smartijn
28984417368Smartijn int
oid_cmp(struct oid * a,struct oid * b)29084417368Smartijn oid_cmp(struct oid *a, struct oid *b)
29184417368Smartijn {
29284417368Smartijn size_t i, min;
29384417368Smartijn
29484417368Smartijn min = a->n_subid < b->n_subid ? a->n_subid : b->n_subid;
29584417368Smartijn for (i = 0; i < min; i++) {
29684417368Smartijn if (a->subid[i] < b->subid[i])
29784417368Smartijn return (-1);
29884417368Smartijn if (a->subid[i] > b->subid[i])
29984417368Smartijn return (1);
30084417368Smartijn }
30184417368Smartijn /* a is parent of b */
30284417368Smartijn if (a->n_subid < b->n_subid)
30384417368Smartijn return (-2);
30484417368Smartijn /* a is child of b */
30584417368Smartijn if (a->n_subid > b->n_subid)
30684417368Smartijn return 2;
30784417368Smartijn return (0);
30884417368Smartijn }
30984417368Smartijn
31084417368Smartijn char *
oid_print(struct oid * oid,char * buf,size_t len)31184417368Smartijn oid_print(struct oid *oid, char *buf, size_t len)
31284417368Smartijn {
31384417368Smartijn char digit[11];
31484417368Smartijn size_t i;
31584417368Smartijn
31684417368Smartijn buf[0] = '\0';
31784417368Smartijn for (i = 0; i < oid->n_subid; i++) {
31884417368Smartijn snprintf(digit, sizeof(digit), "%"PRIu32, oid->subid[i]);
31984417368Smartijn if (i > 0)
32084417368Smartijn strlcat(buf, ".", len);
32184417368Smartijn strlcat(buf, digit, len);
32284417368Smartijn }
32384417368Smartijn if (oid->include) {
32484417368Smartijn strlcat(buf, "incl", len);
32584417368Smartijn snprintf(digit, sizeof(digit), "(%d)", oid->include);
32684417368Smartijn strlcat(buf, digit, len);
32784417368Smartijn }
32884417368Smartijn return buf;
32984417368Smartijn }
330