xref: /openbsd/regress/lib/libagentx/main.c (revision c29afb18)
1*c29afb18Smartijn /*	$OpenBSD: main.c,v 1.7 2021/05/01 16:55:14 martijn Exp $	*/
2ee5801c9Sbluhm 
38ee14b28Srob /*
48ee14b28Srob  * Copyright (c) 2019 Martijn van Duren <martijn@openbsd.org>
58ee14b28Srob  *
68ee14b28Srob  * Permission to use, copy, modify, and distribute this software for any
78ee14b28Srob  * purpose with or without fee is hereby granted, provided that the above
88ee14b28Srob  * copyright notice and this permission notice appear in all copies.
98ee14b28Srob  *
108ee14b28Srob  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
118ee14b28Srob  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
128ee14b28Srob  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
138ee14b28Srob  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
148ee14b28Srob  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
158ee14b28Srob  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
168ee14b28Srob  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
178ee14b28Srob  */
188ee14b28Srob 
198ee14b28Srob #include <sys/socket.h>
208ee14b28Srob #include <sys/types.h>
218ee14b28Srob #include <sys/un.h>
228ee14b28Srob 
238ee14b28Srob #include <arpa/inet.h>
248ee14b28Srob 
258ee14b28Srob #include <event.h>
268ee14b28Srob #include <signal.h>
278ee14b28Srob #include <stdio.h>
28f358f99bSmartijn #include <stdlib.h>
298ee14b28Srob #include <string.h>
308ee14b28Srob #include <unistd.h>
318ee14b28Srob 
328ee14b28Srob #include "log.h"
338ee14b28Srob #include <agentx.h>
348ee14b28Srob 
358ee14b28Srob #define LINKDOWN 1, 3, 6, 1, 6, 3, 1, 1, 5, 3
368ee14b28Srob #define IFINDEX 1, 3, 6, 1, 2, 1, 2, 2, 1, 1
378ee14b28Srob #define IFADMINSTATUS 1, 3, 6, 1, 2, 1, 2, 2, 1, 7
388ee14b28Srob #define IFOPERSTATUS 1, 3, 6, 1, 2, 1, 2, 2, 1, 8
398ee14b28Srob 
408ee14b28Srob void regress_fd(struct agentx *, void *, int);
418ee14b28Srob void regress_tryconnect(int, short, void *);
428ee14b28Srob void regress_read(int, short, void *);
438ee14b28Srob void regress_usr1(int, short, void *);
448ee14b28Srob void regress_usr2(int, short, void *);
458ee14b28Srob void regress_scalarinteger(struct agentx_varbind *);
468ee14b28Srob void regress_scalarstring(struct agentx_varbind *);
478ee14b28Srob void regress_scalarnull(struct agentx_varbind *);
488ee14b28Srob void regress_scalaroid(struct agentx_varbind *);
498ee14b28Srob void regress_scalaripaddress(struct agentx_varbind *);
508ee14b28Srob void regress_scalarcounter32(struct agentx_varbind *);
518ee14b28Srob void regress_scalargauge32(struct agentx_varbind *);
528ee14b28Srob void regress_scalartimeticks(struct agentx_varbind *);
538ee14b28Srob void regress_scalaropaque(struct agentx_varbind *);
548ee14b28Srob void regress_scalarcounter64(struct agentx_varbind *);
558ee14b28Srob void regress_scalarerror(struct agentx_varbind *);
568ee14b28Srob 
578ee14b28Srob void regress_intindex(struct agentx_varbind *);
588ee14b28Srob void regress_intindex2(struct agentx_varbind *);
598ee14b28Srob 
608ee14b28Srob void regress_strindex(struct agentx_varbind *);
618ee14b28Srob void regress_implstrindex(struct agentx_varbind *);
628ee14b28Srob void regress_strindex2(struct agentx_varbind *);
638ee14b28Srob 
648ee14b28Srob void regress_oidimplindex(struct agentx_varbind *);
658ee14b28Srob 
668ee14b28Srob void regress_ipaddressindex(struct agentx_varbind *);
678ee14b28Srob 
688ee14b28Srob void regress_intindexstaticvalueint(struct agentx_varbind *);
698ee14b28Srob void regress_intindexstaticvaluestring(struct agentx_varbind *);
708ee14b28Srob void regress_intindexstaticanyint(struct agentx_varbind *);
718ee14b28Srob void regress_intindexstaticanystring(struct agentx_varbind *);
728ee14b28Srob void regress_intindexstaticnewint(struct agentx_varbind *);
738ee14b28Srob void regress_intindexstaticnewstring(struct agentx_varbind *);
748ee14b28Srob 
758ee14b28Srob struct agentx *sa;
768ee14b28Srob struct agentx_session *sas;
778ee14b28Srob struct agentx_context *sac;
788ee14b28Srob struct agentx_agentcaps *saa;
798ee14b28Srob struct agentx_region *regress;
808ee14b28Srob 
818ee14b28Srob struct agentx_index *regressidx_int;
828ee14b28Srob struct agentx_index *regressidx_int2;
838ee14b28Srob 
848ee14b28Srob struct agentx_index *regressidx_str;
858ee14b28Srob struct agentx_index *regressidx_str2;
868ee14b28Srob 
878ee14b28Srob struct agentx_index *regressidx_oid;
888ee14b28Srob 
898ee14b28Srob struct agentx_index *regressidx_ipaddress;
908ee14b28Srob 
918ee14b28Srob struct agentx_index *regressidx_new;
928ee14b28Srob struct agentx_index *regressidx_any;
938ee14b28Srob struct agentx_index *regressidx_value;
948ee14b28Srob 
958ee14b28Srob struct agentx_object *regressobj_scalarinteger;
968ee14b28Srob struct agentx_object *regressobj_scalarstring;
978ee14b28Srob struct agentx_object *regressobj_scalarnull;
988ee14b28Srob struct agentx_object *regressobj_scalaroid;
998ee14b28Srob struct agentx_object *regressobj_scalaripaddress;
1008ee14b28Srob struct agentx_object *regressobj_scalarcounter32;
1018ee14b28Srob struct agentx_object *regressobj_scalargauge32;
1028ee14b28Srob struct agentx_object *regressobj_scalartimeticks;
1038ee14b28Srob struct agentx_object *regressobj_scalaropaque;
1048ee14b28Srob struct agentx_object *regressobj_scalarcounter64;
1058ee14b28Srob 
1068ee14b28Srob struct agentx_object *regressobj_intindexint;
1078ee14b28Srob struct agentx_object *regressobj_intindexint2;
1088ee14b28Srob 
1098ee14b28Srob struct agentx_object *regressobj_strindexstr;
1108ee14b28Srob struct agentx_object *regressobj_implstrindexstr;
1118ee14b28Srob struct agentx_object *regressobj_strindexstr2;
1128ee14b28Srob 
1138ee14b28Srob struct agentx_object *regressobj_oidimplindexoid;
1148ee14b28Srob 
1158ee14b28Srob struct agentx_object *regressobj_ipaddressindexipaddress;
1168ee14b28Srob 
1178ee14b28Srob struct agentx_object *regressobj_intindexstaticvalueint;
1188ee14b28Srob struct agentx_object *regressobj_intindexstaticvaluestring;
1198ee14b28Srob struct agentx_object *regressobj_intindexstaticanyint;
1208ee14b28Srob struct agentx_object *regressobj_intindexstaticanystring;
1218ee14b28Srob struct agentx_object *regressobj_intindexstaticnewint;
1228ee14b28Srob struct agentx_object *regressobj_intindexstaticnewstring;
1238ee14b28Srob 
1248ee14b28Srob struct agentx_object *regressobj_scalarerror;
1258ee14b28Srob 
126f358f99bSmartijn char *path = AGENTX_MASTER_PATH;
127f358f99bSmartijn int fd = -1;
1288ee14b28Srob struct event rev;
129f358f99bSmartijn struct event intev, usr1ev, usr2ev, connev;
1308ee14b28Srob 
1318ee14b28Srob int
main(int argc,char * argv[])1328ee14b28Srob main(int argc, char *argv[])
1338ee14b28Srob {
1348ee14b28Srob 	struct agentx_index *idx[AGENTX_OID_INDEX_MAX_LEN];
135f358f99bSmartijn 	int ch;
136f358f99bSmartijn 	int dflag = 0;
1378ee14b28Srob 
1388ee14b28Srob 	log_init(2, 1);
1398ee14b28Srob 
140f358f99bSmartijn 	while ((ch = getopt(argc, argv, "d")) != -1) {
141f358f99bSmartijn 		switch (ch) {
142f358f99bSmartijn 		case 'd':
143f358f99bSmartijn 			dflag = 1;
144f358f99bSmartijn 			break;
145f358f99bSmartijn 		default:
146f358f99bSmartijn 			exit(1);
147f358f99bSmartijn 		}
148f358f99bSmartijn 	}
1498ee14b28Srob 
150f358f99bSmartijn 	argc -= optind;
151f358f99bSmartijn 	argv += optind;
152f358f99bSmartijn 
153f358f99bSmartijn 	if (argc >= 1)
154f358f99bSmartijn 		path = argv[0];
155f358f99bSmartijn 
1568ee14b28Srob 	bzero(&rev, sizeof(rev));
1578ee14b28Srob 
1588ee14b28Srob 	agentx_log_fatal = fatalx;
1598ee14b28Srob 	agentx_log_warn = log_warnx;
1608ee14b28Srob 	agentx_log_info = log_info;
1618ee14b28Srob 	agentx_log_debug = log_debug;
1628ee14b28Srob 
1638ee14b28Srob 	if ((sa = agentx(regress_fd, (void *)path)) == NULL)
1648ee14b28Srob 		fatal("agentx");
1658ee14b28Srob 	sas = agentx_session(sa, NULL, 0, "OpenAgentX regress", 0);
1668ee14b28Srob 	if (sas == NULL)
1678ee14b28Srob 		fatal("agentx_session");
1688ee14b28Srob 	if ((sac = agentx_context(sas, NULL)) == NULL)
1698ee14b28Srob 		fatal("agentx_context");
1708ee14b28Srob 	if ((saa = agentx_agentcaps(sac,
1718ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 50, 1),
1728ee14b28Srob 	    "OpenBSD AgentX regress")) == NULL)
1738ee14b28Srob 		fatal("agentx_agentcaps");
1748ee14b28Srob 	if ((regress = agentx_region(sac,
1758ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100), 0)) == NULL)
1768ee14b28Srob 		fatal("agentx_region application");
1778ee14b28Srob 	if ((regressobj_scalarinteger = agentx_object(regress,
1788ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 1), NULL, 0,
1798ee14b28Srob 	    0, regress_scalarinteger)) == NULL)
1808ee14b28Srob 		fatal("agentx_object");
1818ee14b28Srob 	if ((regressobj_scalarstring = agentx_object(regress,
1828ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 2), NULL, 0,
1838ee14b28Srob 	    0, regress_scalarstring)) == NULL)
1848ee14b28Srob 		fatal("agentx_object");
1858ee14b28Srob /* netsnmp doesn't return NULL-objects */
1868ee14b28Srob /*
1878ee14b28Srob 	if ((regressobj_scalarnull = agentx_object(regress,
1888ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 3), NULL, 0,
1898ee14b28Srob 	    0, regress_scalarnull)) == NULL)
1908ee14b28Srob 		fatal("agentx_object");
1918ee14b28Srob */
1928ee14b28Srob 	if ((regressobj_scalaroid = agentx_object(regress,
1938ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 4), NULL, 0,
1948ee14b28Srob 	    0, regress_scalaroid)) == NULL)
1958ee14b28Srob 		fatal("agentx_object");
1968ee14b28Srob 	if ((regressobj_scalaripaddress = agentx_object(regress,
1978ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 5), NULL, 0,
1988ee14b28Srob 	    0, regress_scalaripaddress)) == NULL)
1998ee14b28Srob 		fatal("agentx_object");
2008ee14b28Srob 	if ((regressobj_scalarcounter32 = agentx_object(regress,
2018ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 6), NULL, 0,
2028ee14b28Srob 	    0, regress_scalarcounter32)) == NULL)
2038ee14b28Srob 		fatal("agentx_object");
2048ee14b28Srob 	if ((regressobj_scalargauge32 = agentx_object(regress,
2058ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 7), NULL, 0,
2068ee14b28Srob 	    0, regress_scalargauge32)) == NULL)
2078ee14b28Srob 		fatal("agentx_object");
2088ee14b28Srob 	if ((regressobj_scalartimeticks = agentx_object(regress,
2098ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 8), NULL, 0,
2108ee14b28Srob 	    0, regress_scalartimeticks)) == NULL)
2118ee14b28Srob 		fatal("agentx_object");
2128ee14b28Srob 	if ((regressobj_scalaropaque = agentx_object(regress,
2138ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 9), NULL, 0,
2148ee14b28Srob 	    0, regress_scalaropaque)) == NULL)
2158ee14b28Srob 		fatal("agentx_object");
2168ee14b28Srob 	if ((regressobj_scalarcounter64 = agentx_object(regress,
2178ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 10), NULL, 0,
2188ee14b28Srob 	    0, regress_scalarcounter64)) == NULL)
2198ee14b28Srob 		fatal("agentx_object");
2208ee14b28Srob 
2218ee14b28Srob 	if ((regressidx_int = agentx_index_integer_dynamic(regress,
2228ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 11, 1, 1))) == NULL)
2238ee14b28Srob 		fatal("agentx_index_integer_dynamic");
2248ee14b28Srob 	if ((regressobj_intindexint = agentx_object(regress,
2258ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 11, 1, 1),
2268ee14b28Srob 	    &regressidx_int, 1, 0, regress_intindex)) == NULL)
2278ee14b28Srob 		fatal("agentx_object");
2288ee14b28Srob 
2298ee14b28Srob 	if ((regressidx_int2 = agentx_index_integer_dynamic(regress,
2308ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 12, 1, 1))) == NULL)
2318ee14b28Srob 		fatal("agentx_index_integer_dynamic");
2328ee14b28Srob 	idx[0] = regressidx_int;
2338ee14b28Srob 	idx[1] = regressidx_int2;
2348ee14b28Srob 	if ((regressobj_intindexint2 = agentx_object(regress,
2358ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 12, 1, 1),
2368ee14b28Srob 	    idx, 2, 0, regress_intindex2)) == NULL)
2378ee14b28Srob 		fatal("agentx_object");
2388ee14b28Srob 
2398ee14b28Srob 	if ((regressidx_str = agentx_index_string_dynamic(regress,
2408ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 13, 1, 1))) == NULL)
2418ee14b28Srob 		fatal("agentx_index_string_dynamic");
2428ee14b28Srob 	if ((regressobj_strindexstr = agentx_object(regress,
2438ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 13, 1, 1),
2448ee14b28Srob 	    &regressidx_str, 1, 0, regress_strindex)) == NULL)
2458ee14b28Srob 		fatal("agentx_object");
2468ee14b28Srob 	if ((regressobj_implstrindexstr = agentx_object(regress,
2478ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 14, 1, 1),
2488ee14b28Srob 	    &regressidx_str, 1, 1, regress_implstrindex)) == NULL)
2498ee14b28Srob 		fatal("agentx_object");
2508ee14b28Srob 	if ((regressidx_str2 = agentx_index_string_dynamic(regress,
2518ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 15, 1, 1))) == NULL)
2528ee14b28Srob 		fatal("agentx_index_string_dynamic");
2538ee14b28Srob 	idx[0] = regressidx_str;
2548ee14b28Srob 	idx[1] = regressidx_str2;
2558ee14b28Srob 	if ((regressobj_strindexstr = agentx_object(regress,
2568ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 15, 1, 1),
2578ee14b28Srob 	    idx, 2, 0, regress_strindex2)) == NULL)
2588ee14b28Srob 		fatal("agentx_object");
2598ee14b28Srob 
2608ee14b28Srob 	if ((regressidx_oid = agentx_index_oid_dynamic(regress,
2618ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 16, 1, 1))) == NULL)
2628ee14b28Srob 		fatal("agentx_index_oid_dynamic");
2638ee14b28Srob 	if ((regressobj_oidimplindexoid = agentx_object(regress,
2648ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 16, 1, 1),
2658ee14b28Srob 	    &regressidx_oid, 1, 1, regress_oidimplindex)) == NULL)
2668ee14b28Srob 		fatal("agentx_object");
2678ee14b28Srob 
2688ee14b28Srob 	if ((regressidx_ipaddress = agentx_index_ipaddress_dynamic(regress,
2698ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 17, 1, 1))) == NULL)
2708ee14b28Srob 		fatal("agentx_index_oid_dynamic");
2718ee14b28Srob 	if ((regressobj_oidimplindexoid = agentx_object(regress,
2728ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 17, 1, 1),
2738ee14b28Srob 	    &regressidx_ipaddress, 1, 0, regress_ipaddressindex)) == NULL)
2748ee14b28Srob 		fatal("agentx_object");
2758ee14b28Srob 
2768ee14b28Srob 	if ((regressidx_value = agentx_index_integer_value(regress,
2778ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 18, 1, 1), 5)) == NULL)
2788ee14b28Srob 		fatal("agentx_index_oid_dynamic");
2798ee14b28Srob 	if ((regressobj_intindexstaticvalueint = agentx_object(regress,
2808ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 18, 1, 1),
2818ee14b28Srob 	    &regressidx_value, 1, 0, regress_intindexstaticvalueint)) == NULL)
2828ee14b28Srob 		fatal("agentx_object");
2838ee14b28Srob 	if ((regressobj_intindexstaticvaluestring = agentx_object(regress,
2848ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 18, 1, 2),
2858ee14b28Srob 	    &regressidx_value, 1, 0, regress_intindexstaticvaluestring)) == NULL)
2868ee14b28Srob 		fatal("agentx_object");
2878ee14b28Srob 
2888ee14b28Srob 	if ((regressidx_any = agentx_index_integer_any(regress,
2898ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 19, 1, 1))) == NULL)
290*c29afb18Smartijn 		fatal("agentx_index_integer_any");
2918ee14b28Srob 	if ((regressobj_intindexstaticanyint = agentx_object(regress,
2928ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 19, 1, 1),
2938ee14b28Srob 	    &regressidx_any, 1, 0, regress_intindexstaticanyint)) == NULL)
2948ee14b28Srob 		fatal("agentx_object");
2958ee14b28Srob 	if ((regressobj_intindexstaticanystring = agentx_object(regress,
2968ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 19, 1, 2),
2978ee14b28Srob 	    &regressidx_any, 1, 0, regress_intindexstaticanystring)) == NULL)
2988ee14b28Srob 		fatal("agentx_object");
2998ee14b28Srob 
3008ee14b28Srob 	if ((regressidx_new = agentx_index_integer_new(regress,
3018ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 20, 1, 1))) == NULL)
302*c29afb18Smartijn 		fatal("agentx_index_integer_new");
3038ee14b28Srob 	if ((regressobj_intindexstaticnewint = agentx_object(regress,
3048ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 20, 1, 1),
3058ee14b28Srob 	    &regressidx_new, 1, 0, regress_intindexstaticnewint)) == NULL)
3068ee14b28Srob 		fatal("agentx_object");
3078ee14b28Srob 	if ((regressobj_intindexstaticnewstring = agentx_object(regress,
3088ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, 20, 1, 2),
3098ee14b28Srob 	    &regressidx_new, 1, 0, regress_intindexstaticnewstring)) == NULL)
3108ee14b28Srob 		fatal("agentx_object");
3118ee14b28Srob 
3128ee14b28Srob 	if ((regressobj_scalarerror = agentx_object(regress,
3138ee14b28Srob 	    AGENTX_OID(AGENTX_ENTERPRISES, 30155, 100, UINT32_MAX), NULL,
3148ee14b28Srob 	    0, 0, regress_scalarerror)) == NULL)
3158ee14b28Srob 		fatal("agentx_object");
3168ee14b28Srob 
317f358f99bSmartijn 	if (!dflag) {
318569e8303Smartijn 		if (daemon(0, 1) == -1)
319f358f99bSmartijn 			fatalx("daemon");
320f358f99bSmartijn 	}
3218ee14b28Srob 
322f358f99bSmartijn 	event_init();
3238ee14b28Srob 
324f358f99bSmartijn 	event_set(&rev, fd, EV_READ|EV_PERSIST, regress_read, NULL);
325f358f99bSmartijn 	if (event_add(&rev, NULL) == -1)
326f358f99bSmartijn 		fatal("event_add");
327e9fcc3a8Srob 
328f358f99bSmartijn 	event_dispatch();
329e9fcc3a8Srob 	return 0;
3308ee14b28Srob }
3318ee14b28Srob 
3328ee14b28Srob void
regress_fd(struct agentx * sa2,void * cookie,int close)3338ee14b28Srob regress_fd(struct agentx *sa2, void *cookie, int close)
3348ee14b28Srob {
335f358f99bSmartijn 	static int init = 0;
3368ee14b28Srob 	struct sockaddr_un sun;
3378ee14b28Srob 
338f358f99bSmartijn 	/* For ease of cleanup we take the single run approach */
339569e8303Smartijn 	if (init) {
340569e8303Smartijn 		if (!close)
341569e8303Smartijn 			agentx_free(sa);
342569e8303Smartijn 		else
343569e8303Smartijn 			evtimer_del(&rev);
344569e8303Smartijn 	} else {
3458ee14b28Srob 		sun.sun_family = AF_UNIX;
3468ee14b28Srob 		strlcpy(sun.sun_path, path, sizeof(sun.sun_path));
3478ee14b28Srob 
3488ee14b28Srob 		if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1 ||
3498ee14b28Srob 		    connect(fd, (struct sockaddr *)&sun, sizeof(sun)) == -1) {
350f358f99bSmartijn 			fatal("connect");
3518ee14b28Srob 		}
3528ee14b28Srob 		agentx_connect(sa2, fd);
353f358f99bSmartijn 		init = 1;
354f358f99bSmartijn 	}
3558ee14b28Srob }
3568ee14b28Srob 
3578ee14b28Srob void
regress_read(int fd,short event,void * cookie)3588ee14b28Srob regress_read(int fd, short event, void *cookie)
3598ee14b28Srob {
3608ee14b28Srob 	agentx_read(sa);
3618ee14b28Srob }
3628ee14b28Srob 
363e9fcc3a8Srob #ifdef notyet
364e9fcc3a8Srob 
3658ee14b28Srob void
regress_usr1(int fd,short event,void * cookie)3668ee14b28Srob regress_usr1(int fd, short event, void *cookie)
3678ee14b28Srob {
3688ee14b28Srob 	struct agentx_notify *san;
3698ee14b28Srob 
3708ee14b28Srob 	if ((san = agentx_notify(sac, AGENTX_OID(LINKDOWN))) == NULL)
3718ee14b28Srob 		fatal("agentx_notify");
3728ee14b28Srob 
3738ee14b28Srob 	agentx_notify_integer(san, AGENTX_OID(IFINDEX), 1);
3748ee14b28Srob 	agentx_notify_integer(san, AGENTX_OID(IFADMINSTATUS), 3);
3758ee14b28Srob 	agentx_notify_integer(san, AGENTX_OID(IFOPERSTATUS), 6);
3768ee14b28Srob 	agentx_notify_send(san);
3778ee14b28Srob }
3788ee14b28Srob 
379e9fcc3a8Srob #endif
380e9fcc3a8Srob 
3818ee14b28Srob void
regress_usr2(int fd,short event,void * cookie)3828ee14b28Srob regress_usr2(int fd, short event, void *cookie)
3838ee14b28Srob {
3848ee14b28Srob }
3858ee14b28Srob 
3868ee14b28Srob void
regress_scalarstring(struct agentx_varbind * vb)3878ee14b28Srob regress_scalarstring(struct agentx_varbind *vb)
3888ee14b28Srob {
3898ee14b28Srob 	agentx_varbind_string(vb, "scalar-string");
3908ee14b28Srob }
3918ee14b28Srob 
3928ee14b28Srob void
regress_scalarinteger(struct agentx_varbind * vb)3938ee14b28Srob regress_scalarinteger(struct agentx_varbind *vb)
3948ee14b28Srob {
3958ee14b28Srob 	agentx_varbind_integer(vb, 1);
3968ee14b28Srob }
3978ee14b28Srob 
3988ee14b28Srob void
regress_scalarnull(struct agentx_varbind * vb)3998ee14b28Srob regress_scalarnull(struct agentx_varbind *vb)
4008ee14b28Srob {
4018ee14b28Srob 	agentx_varbind_null(vb);
4028ee14b28Srob }
4038ee14b28Srob 
4048ee14b28Srob void
regress_scalaroid(struct agentx_varbind * vb)4058ee14b28Srob regress_scalaroid(struct agentx_varbind *vb)
4068ee14b28Srob {
4078ee14b28Srob 	agentx_varbind_oid(vb, AGENTX_OID(AGENTX_ENTERPRISES, 30155));
4088ee14b28Srob }
4098ee14b28Srob 
4108ee14b28Srob void
regress_scalaripaddress(struct agentx_varbind * vb)4118ee14b28Srob regress_scalaripaddress(struct agentx_varbind *vb)
4128ee14b28Srob {
4138ee14b28Srob 	struct in_addr addr;
4148ee14b28Srob 
4158ee14b28Srob 	inet_aton("127.0.0.1", &addr);
4168ee14b28Srob 
4178ee14b28Srob 	agentx_varbind_ipaddress(vb, &addr);
4188ee14b28Srob }
4198ee14b28Srob 
4208ee14b28Srob void
regress_scalarcounter32(struct agentx_varbind * vb)4218ee14b28Srob regress_scalarcounter32(struct agentx_varbind *vb)
4228ee14b28Srob {
4238ee14b28Srob 	agentx_varbind_counter32(vb, 1);
4248ee14b28Srob }
4258ee14b28Srob 
4268ee14b28Srob void
regress_scalargauge32(struct agentx_varbind * vb)4278ee14b28Srob regress_scalargauge32(struct agentx_varbind *vb)
4288ee14b28Srob {
4298ee14b28Srob 	agentx_varbind_gauge32(vb, 1);
4308ee14b28Srob }
4318ee14b28Srob 
4328ee14b28Srob void
regress_scalartimeticks(struct agentx_varbind * vb)4338ee14b28Srob regress_scalartimeticks(struct agentx_varbind *vb)
4348ee14b28Srob {
4358ee14b28Srob 	agentx_varbind_timeticks(vb, 1);
4368ee14b28Srob }
4378ee14b28Srob 
4388ee14b28Srob void
regress_scalaropaque(struct agentx_varbind * vb)4398ee14b28Srob regress_scalaropaque(struct agentx_varbind *vb)
4408ee14b28Srob {
4418ee14b28Srob 	agentx_varbind_opaque(vb, "abc", 3);
4428ee14b28Srob }
4438ee14b28Srob 
4448ee14b28Srob void
regress_scalarcounter64(struct agentx_varbind * vb)4458ee14b28Srob regress_scalarcounter64(struct agentx_varbind *vb)
4468ee14b28Srob {
4478ee14b28Srob 	agentx_varbind_counter64(vb, 1);
4488ee14b28Srob }
4498ee14b28Srob 
4508ee14b28Srob void
regress_intindex(struct agentx_varbind * vb)4518ee14b28Srob regress_intindex(struct agentx_varbind *vb)
4528ee14b28Srob {
4538ee14b28Srob 	uint32_t idx;
4548ee14b28Srob 
4558ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_int);
456*c29afb18Smartijn 	switch (agentx_varbind_request(vb)) {
457*c29afb18Smartijn 	case AGENTX_REQUEST_TYPE_GET:
458*c29afb18Smartijn 		if (idx == 0) {
459*c29afb18Smartijn 			agentx_varbind_notfound(vb);
460*c29afb18Smartijn 			return;
461*c29afb18Smartijn 		}
462*c29afb18Smartijn 		break;
463*c29afb18Smartijn 	case AGENTX_REQUEST_TYPE_GETNEXTINCLUSIVE:
464*c29afb18Smartijn 		if (idx == 0)
4658ee14b28Srob 			idx++;
466*c29afb18Smartijn 		break;
467*c29afb18Smartijn 	case AGENTX_REQUEST_TYPE_GETNEXT:
468*c29afb18Smartijn 		idx++;
469*c29afb18Smartijn 		break;
470*c29afb18Smartijn 	}
4718ee14b28Srob 	if (idx > 0xf)
4728ee14b28Srob 		agentx_varbind_notfound(vb);
4738ee14b28Srob 	else {
4748ee14b28Srob 		agentx_varbind_set_index_integer(vb, regressidx_int, idx);
4758ee14b28Srob 		agentx_varbind_integer(vb, idx);
4768ee14b28Srob 	}
4778ee14b28Srob }
4788ee14b28Srob 
4798ee14b28Srob void
regress_intindex2(struct agentx_varbind * vb)4808ee14b28Srob regress_intindex2(struct agentx_varbind *vb)
4818ee14b28Srob {
4828ee14b28Srob 	uint32_t idx1, idx2;
483*c29afb18Smartijn 	enum agentx_request_type type;
4848ee14b28Srob 
4858ee14b28Srob 	idx1 = agentx_varbind_get_index_integer(vb, regressidx_int);
4868ee14b28Srob 	idx2 = agentx_varbind_get_index_integer(vb, regressidx_int2);
487*c29afb18Smartijn 	type = agentx_varbind_request(vb);
488*c29afb18Smartijn 	if (type == AGENTX_REQUEST_TYPE_GETNEXT)
489*c29afb18Smartijn 		idx2++;
490*c29afb18Smartijn 	if (type == AGENTX_REQUEST_TYPE_GETNEXT ||
491*c29afb18Smartijn 	    type == AGENTX_REQUEST_TYPE_GETNEXTINCLUSIVE) {
492*c29afb18Smartijn 		if (idx2 > 1) {
4938ee14b28Srob 			idx1++;
4948ee14b28Srob 			idx2 = 0;
4958ee14b28Srob 		}
4968ee14b28Srob 	}
497*c29afb18Smartijn 	if (idx2 > 1 || idx1 > 8)
4988ee14b28Srob 		agentx_varbind_notfound(vb);
4998ee14b28Srob 	else {
5008ee14b28Srob 		agentx_varbind_set_index_integer(vb, regressidx_int, idx1);
5018ee14b28Srob 		agentx_varbind_set_index_integer(vb, regressidx_int2, idx2);
5028ee14b28Srob 		agentx_varbind_integer(vb, (idx1 << 1) + idx2);
5038ee14b28Srob 	}
5048ee14b28Srob }
5058ee14b28Srob 
5068ee14b28Srob void
regress_strindex(struct agentx_varbind * vb)5078ee14b28Srob regress_strindex(struct agentx_varbind *vb)
5088ee14b28Srob {
5098ee14b28Srob 	const unsigned char *idx;
5108ee14b28Srob 	size_t slen;
5118ee14b28Srob 	int implied;
5128ee14b28Srob 	enum agentx_request_type request = agentx_varbind_request(vb);
5138ee14b28Srob 
5148ee14b28Srob 	idx = agentx_varbind_get_index_string(vb, regressidx_str, &slen,
5158ee14b28Srob 	    &implied);
5168ee14b28Srob 
5178ee14b28Srob 	if (implied)
5188ee14b28Srob 		fatalx("%s: string length should not be implied", __func__);
5198ee14b28Srob 
5208ee14b28Srob 	if (slen == 0) {
521*c29afb18Smartijn 		if (request == AGENTX_REQUEST_TYPE_GET) {
522*c29afb18Smartijn 			log_warnx("%s: 0 index should be handled in agentx.c",
5238ee14b28Srob 			    __func__);
524*c29afb18Smartijn 			agentx_varbind_error(vb);
525*c29afb18Smartijn 			return;
526*c29afb18Smartijn 		}
5278ee14b28Srob 	}
5288ee14b28Srob 	/* !implied first needs a length check before content check */
5298ee14b28Srob 	if (slen > 1) {
5308ee14b28Srob 		agentx_varbind_notfound(vb);
5318ee14b28Srob 		return;
5328ee14b28Srob 	}
5338ee14b28Srob 	if (request == AGENTX_REQUEST_TYPE_GETNEXT) {
5348ee14b28Srob 		if (idx[0] == 'a')
5358ee14b28Srob 			idx = (unsigned char *)"b";
5368ee14b28Srob 		else if (idx[0] == 'b')
5378ee14b28Srob 			idx = (unsigned char *)"c";
5388ee14b28Srob 		else if (idx[0] >= 'c') {
5398ee14b28Srob 			agentx_varbind_notfound(vb);
5408ee14b28Srob 			return;
5418ee14b28Srob 		}
5428ee14b28Srob 	}
543*c29afb18Smartijn 	if (idx == NULL || idx[0] < 'a') {
544*c29afb18Smartijn 		if (request == AGENTX_REQUEST_TYPE_GET) {
545*c29afb18Smartijn 			agentx_varbind_notfound(vb);
546*c29afb18Smartijn 			return;
547*c29afb18Smartijn 		}
5488ee14b28Srob 		idx = (unsigned char *)"a";
549*c29afb18Smartijn 	}
5508ee14b28Srob 
5518ee14b28Srob 	agentx_varbind_set_index_string(vb, regressidx_str,
5528ee14b28Srob 	    (const char *)idx);
5538ee14b28Srob 	agentx_varbind_string(vb, (const char *)idx);
5548ee14b28Srob }
5558ee14b28Srob 
5568ee14b28Srob void
regress_implstrindex(struct agentx_varbind * vb)5578ee14b28Srob regress_implstrindex(struct agentx_varbind *vb)
5588ee14b28Srob {
5598ee14b28Srob 	const unsigned char *idx;
5608ee14b28Srob 	size_t slen;
5618ee14b28Srob 	int implied;
5628ee14b28Srob 	enum agentx_request_type request = agentx_varbind_request(vb);
5638ee14b28Srob 
5648ee14b28Srob 	idx = agentx_varbind_get_index_string(vb, regressidx_str, &slen,
5658ee14b28Srob 	    &implied);
5668ee14b28Srob 
5678ee14b28Srob 	if (!implied)
5688ee14b28Srob 		fatalx("%s: string length should be implied", __func__);
5698ee14b28Srob 
5708ee14b28Srob 	if (slen == 0) {
5718ee14b28Srob 		if (request == AGENTX_REQUEST_TYPE_GET)
5728ee14b28Srob 			fatalx("%s: 0 index should be handled in agentx.c",
5738ee14b28Srob 			    __func__);
5748ee14b28Srob 	}
5758ee14b28Srob 	if (request == AGENTX_REQUEST_TYPE_GET && (slen != 1 ||
5768ee14b28Srob 	    (idx[0] != 'a' && idx[0] != 'b' && idx[0] != 'c'))) {
5778ee14b28Srob 		agentx_varbind_notfound(vb);
5788ee14b28Srob 		return;
5798ee14b28Srob 	}
5808ee14b28Srob 	/* implied doesn't needs a length check before content check */
5818ee14b28Srob 	if (request == AGENTX_REQUEST_TYPE_GETNEXT) {
5828ee14b28Srob 		if (idx[0] == 'a')
5838ee14b28Srob 			idx = (const unsigned char *)"b";
5848ee14b28Srob 		else if (idx[0] == 'b')
5858ee14b28Srob 			idx = (const unsigned char *)"c";
5868ee14b28Srob 		else if (idx[0] >= 'c') {
5878ee14b28Srob 			agentx_varbind_notfound(vb);
5888ee14b28Srob 			return;
5898ee14b28Srob 		}
5908ee14b28Srob 	}
5918ee14b28Srob 	if (idx == NULL || idx[0] < 'a')
5928ee14b28Srob 		idx = (const unsigned char *)"a";
5938ee14b28Srob 
5948ee14b28Srob 	agentx_varbind_set_index_string(vb, regressidx_str,
5958ee14b28Srob 	    (const char *)idx);
5968ee14b28Srob 	agentx_varbind_string(vb, (const char *)idx);
5978ee14b28Srob }
5988ee14b28Srob 
5998ee14b28Srob void
regress_strindex2(struct agentx_varbind * vb)6008ee14b28Srob regress_strindex2(struct agentx_varbind *vb)
6018ee14b28Srob {
6028ee14b28Srob 	/* Opt is !implied sorted */
6038ee14b28Srob 	const char *opt1[] = {"a", "b", "c"};
6048ee14b28Srob 	const char *opt2[] = {"b", "aa", "bb"};
6058ee14b28Srob 	size_t opt1len, opt2len;
6068ee14b28Srob 	size_t opt1i, opt2i;
6078ee14b28Srob 	const unsigned char *idx1, *idx2;
6088ee14b28Srob 	size_t slen1, slen2;
6098ee14b28Srob 	int implied1, implied2;
6108ee14b28Srob 	enum agentx_request_type request = agentx_varbind_request(vb);
6118ee14b28Srob 	int match;
6128ee14b28Srob 
6138ee14b28Srob 	idx1 = agentx_varbind_get_index_string(vb, regressidx_str, &slen1,
6148ee14b28Srob 	    &implied1);
6158ee14b28Srob 	idx2 = agentx_varbind_get_index_string(vb, regressidx_str2, &slen2,
6168ee14b28Srob 	    &implied2);
6178ee14b28Srob 
6188ee14b28Srob 	/* agentx.c debugging checks */
6198ee14b28Srob 	if (implied1 || implied2)
6208ee14b28Srob 		fatalx("%s: string length should not be implied", __func__);
6218ee14b28Srob 	if (slen1 == 0 || slen2 == 0) {
6228ee14b28Srob 		if (request == AGENTX_REQUEST_TYPE_GET)
6238ee14b28Srob 			fatalx("%s: 0 index should be handled in agentx.c",
6248ee14b28Srob 			    __func__);
6258ee14b28Srob 	}
6268ee14b28Srob 
6278ee14b28Srob 	opt1len = sizeof(opt1) / sizeof(*opt1);
6288ee14b28Srob 	match = 0;
6298ee14b28Srob 	for (opt1i = 0; opt1i < opt1len; opt1i++) {
6308ee14b28Srob 		if (strlen(opt1[opt1i]) < slen1 ||
6318ee14b28Srob 		    (strlen(opt1[opt1i]) == slen1 &&
6328ee14b28Srob 		    memcmp(opt1[opt1i], idx1, slen1) < 0)) {
6338ee14b28Srob 			continue;
6348ee14b28Srob 		}
6358ee14b28Srob 		if (strlen(opt1[opt1i]) == slen1 &&
6368ee14b28Srob 		    memcmp(opt1[opt1i], idx1, slen1) == 0)
6378ee14b28Srob 			match = 1;
6388ee14b28Srob 		break;
6398ee14b28Srob 	}
6408ee14b28Srob 	if (opt1i == opt1len) {
6418ee14b28Srob 		agentx_varbind_notfound(vb);
6428ee14b28Srob 		return;
6438ee14b28Srob 	}
6448ee14b28Srob 	opt2len = sizeof(opt2) / sizeof(*opt2);
6458ee14b28Srob 	for (opt2i = 0; opt2i < opt2len; opt2i++) {
6468ee14b28Srob 		if (!match)
6478ee14b28Srob 			break;
6488ee14b28Srob 		if (strlen(opt2[opt2i]) < slen2 ||
6498ee14b28Srob 		    (strlen(opt2[opt2i]) == slen2 &&
6508ee14b28Srob 		    memcmp(opt2[opt2i], idx2, slen2) < 0)) {
6518ee14b28Srob 			continue;
6528ee14b28Srob 		}
6538ee14b28Srob 		if (strlen(opt2[opt2i]) != slen2 ||
6548ee14b28Srob 		    memcmp(opt2[opt2i], idx2, slen2) > 0)
6558ee14b28Srob 			match = 0;
6568ee14b28Srob 		break;
6578ee14b28Srob 	}
658*c29afb18Smartijn 	if (opt2i == opt2len)
659*c29afb18Smartijn 		match = 0;
6608ee14b28Srob 	if (request == AGENTX_REQUEST_TYPE_GET) {
6618ee14b28Srob 		if (!match) {
6628ee14b28Srob 			agentx_varbind_notfound(vb);
6638ee14b28Srob 			return;
6648ee14b28Srob 		}
6658ee14b28Srob 	} else {
6668ee14b28Srob 		if (AGENTX_REQUEST_TYPE_GETNEXT && match)
6678ee14b28Srob 			opt2i++;
6688ee14b28Srob 		if (opt2i >= opt2len) {
6698ee14b28Srob 			if (++opt1i == opt1len) {
6708ee14b28Srob 				agentx_varbind_notfound(vb);
6718ee14b28Srob 				return;
6728ee14b28Srob 			}
6738ee14b28Srob 			opt2i = 0;
6748ee14b28Srob 		}
6758ee14b28Srob 	}
6768ee14b28Srob 
6778ee14b28Srob 	agentx_varbind_set_index_string(vb, regressidx_str, opt1[opt1i]);
6788ee14b28Srob 	agentx_varbind_set_index_string(vb, regressidx_str2, opt2[opt2i]);
6798ee14b28Srob 	agentx_varbind_printf(vb, "%s - %s", opt1[opt1i], opt2[opt2i]);
6808ee14b28Srob }
6818ee14b28Srob 
6828ee14b28Srob void
regress_oidimplindex(struct agentx_varbind * vb)6838ee14b28Srob regress_oidimplindex(struct agentx_varbind *vb)
6848ee14b28Srob {
6858ee14b28Srob 	struct agentx_object *obj;
6868ee14b28Srob 	const uint32_t *idx;
6878ee14b28Srob 	size_t oidlen;
6888ee14b28Srob 	int implied;
6898ee14b28Srob 	enum agentx_request_type request = agentx_varbind_request(vb);
6908ee14b28Srob 
6918ee14b28Srob 	idx = agentx_varbind_get_index_oid(vb, regressidx_oid, &oidlen,
6928ee14b28Srob 	    &implied);
6938ee14b28Srob 
6948ee14b28Srob 	if (!implied)
6958ee14b28Srob 		fatalx("%s: string length should be implied", __func__);
6968ee14b28Srob 
6978ee14b28Srob 	if (request == AGENTX_REQUEST_TYPE_GET)
698*c29afb18Smartijn 		obj = agentx_context_object_find(sac, idx, oidlen, 1, 1);
6998ee14b28Srob 	else
7008ee14b28Srob 		obj = agentx_context_object_nfind(sac, idx, oidlen, 1,
7018ee14b28Srob 		    request == AGENTX_REQUEST_TYPE_GETNEXTINCLUSIVE);
7028ee14b28Srob 
7038ee14b28Srob 	if (obj == NULL) {
7048ee14b28Srob 		agentx_varbind_notfound(vb);
7058ee14b28Srob 		return;
7068ee14b28Srob 	}
7078ee14b28Srob 
7088ee14b28Srob 	agentx_varbind_set_index_object(vb, regressidx_oid, obj);
7098ee14b28Srob 	agentx_varbind_object(vb, obj);
7108ee14b28Srob }
7118ee14b28Srob 
7128ee14b28Srob void
regress_ipaddressindex(struct agentx_varbind * vb)7138ee14b28Srob regress_ipaddressindex(struct agentx_varbind *vb)
7148ee14b28Srob {
7158ee14b28Srob 	const struct in_addr *addr;
7168ee14b28Srob 	struct in_addr addrlist[4];
7178ee14b28Srob 	enum agentx_request_type request = agentx_varbind_request(vb);
7188ee14b28Srob 	size_t i;
7198ee14b28Srob 	int cmp;
7208ee14b28Srob 
7218ee14b28Srob 	inet_pton(AF_INET, "10.0.0.0", &(addrlist[0]));
7228ee14b28Srob 	inet_pton(AF_INET, "127.0.0.1", &(addrlist[1]));
7238ee14b28Srob 	inet_pton(AF_INET, "172.16.0.0", &(addrlist[2]));
7248ee14b28Srob 	inet_pton(AF_INET, "192.168.0.0", &(addrlist[3]));
7258ee14b28Srob 
7268ee14b28Srob 	addr = agentx_varbind_get_index_ipaddress(vb, regressidx_ipaddress);
7278ee14b28Srob 
7288ee14b28Srob 	for (i = 0; i < 4; i++) {
7298ee14b28Srob 		if ((cmp = memcmp(&(addrlist[i]), addr, sizeof(*addr))) == 0) {
7308ee14b28Srob 			if (request == AGENTX_REQUEST_TYPE_GET ||
7318ee14b28Srob 			    request == AGENTX_REQUEST_TYPE_GETNEXTINCLUSIVE)
7328ee14b28Srob 				break;
7338ee14b28Srob 		} else if (cmp > 0) {
7348ee14b28Srob 			if (request == AGENTX_REQUEST_TYPE_GET) {
7358ee14b28Srob 				agentx_varbind_notfound(vb);
7368ee14b28Srob 				return;
7378ee14b28Srob 			}
7388ee14b28Srob 			break;
7398ee14b28Srob 		}
7408ee14b28Srob 	}
7418ee14b28Srob 	if (i == 4) {
7428ee14b28Srob 		agentx_varbind_notfound(vb);
7438ee14b28Srob 		return;
7448ee14b28Srob 	}
7458ee14b28Srob 
7468ee14b28Srob 	agentx_varbind_set_index_ipaddress(vb, regressidx_ipaddress,
7478ee14b28Srob 	    &(addrlist[i]));
7488ee14b28Srob 	agentx_varbind_ipaddress(vb, &(addrlist[i]));
7498ee14b28Srob }
7508ee14b28Srob 
7518ee14b28Srob void
regress_intindexstaticvalueint(struct agentx_varbind * vb)7528ee14b28Srob regress_intindexstaticvalueint(struct agentx_varbind *vb)
7538ee14b28Srob {
7548ee14b28Srob 	uint32_t idx;
7558ee14b28Srob 
7568ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_value);
7578ee14b28Srob 	agentx_varbind_integer(vb, idx);
7588ee14b28Srob }
7598ee14b28Srob 
7608ee14b28Srob void
regress_intindexstaticvaluestring(struct agentx_varbind * vb)7618ee14b28Srob regress_intindexstaticvaluestring(struct agentx_varbind *vb)
7628ee14b28Srob {
7638ee14b28Srob 	uint32_t idx;
7648ee14b28Srob 
7658ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_value);
7668ee14b28Srob 	agentx_varbind_printf(vb, "%u", idx);
7678ee14b28Srob }
7688ee14b28Srob 
7698ee14b28Srob void
regress_intindexstaticanyint(struct agentx_varbind * vb)7708ee14b28Srob regress_intindexstaticanyint(struct agentx_varbind *vb)
7718ee14b28Srob {
7728ee14b28Srob 	uint32_t idx;
7738ee14b28Srob 
7748ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_any);
7758ee14b28Srob 	agentx_varbind_integer(vb, idx);
7768ee14b28Srob }
7778ee14b28Srob 
7788ee14b28Srob void
regress_intindexstaticanystring(struct agentx_varbind * vb)7798ee14b28Srob regress_intindexstaticanystring(struct agentx_varbind *vb)
7808ee14b28Srob {
7818ee14b28Srob 	uint32_t idx;
7828ee14b28Srob 
7838ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_any);
7848ee14b28Srob 	agentx_varbind_printf(vb, "%u", idx);
7858ee14b28Srob }
7868ee14b28Srob 
7878ee14b28Srob void
regress_intindexstaticnewint(struct agentx_varbind * vb)7888ee14b28Srob regress_intindexstaticnewint(struct agentx_varbind *vb)
7898ee14b28Srob {
7908ee14b28Srob 	uint32_t idx;
7918ee14b28Srob 
7928ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_new);
7938ee14b28Srob 	agentx_varbind_integer(vb, idx);
7948ee14b28Srob }
7958ee14b28Srob 
7968ee14b28Srob void
regress_intindexstaticnewstring(struct agentx_varbind * vb)7978ee14b28Srob regress_intindexstaticnewstring(struct agentx_varbind *vb)
7988ee14b28Srob {
7998ee14b28Srob 	uint32_t idx;
8008ee14b28Srob 
8018ee14b28Srob 	idx = agentx_varbind_get_index_integer(vb, regressidx_new);
8028ee14b28Srob 	agentx_varbind_printf(vb, "%u", idx);
8038ee14b28Srob }
8048ee14b28Srob 
8058ee14b28Srob void
regress_scalarerror(struct agentx_varbind * vb)8068ee14b28Srob regress_scalarerror(struct agentx_varbind *vb)
8078ee14b28Srob {
8088ee14b28Srob 	agentx_varbind_error(vb);
8098ee14b28Srob }
810