xref: /openbsd-src/lib/libagentx/agentx.h (revision 67d8ab44192c0cf7e54831adb628115b09b38c05)
1*67d8ab44Smartijn /*	$OpenBSD: agentx.h,v 1.7 2022/10/14 15:26:58 martijn Exp $ */
29dbe2cd1Smartijn /*
39dbe2cd1Smartijn  * Copyright (c) 2019 Martijn van Duren <martijn@openbsd.org>
49dbe2cd1Smartijn  *
59dbe2cd1Smartijn  * Permission to use, copy, modify, and distribute this software for any
69dbe2cd1Smartijn  * purpose with or without fee is hereby granted, provided that the above
79dbe2cd1Smartijn  * copyright notice and this permission notice appear in all copies.
89dbe2cd1Smartijn  *
99dbe2cd1Smartijn  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
109dbe2cd1Smartijn  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
119dbe2cd1Smartijn  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
129dbe2cd1Smartijn  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
139dbe2cd1Smartijn  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
149dbe2cd1Smartijn  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
159dbe2cd1Smartijn  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
169dbe2cd1Smartijn  */
179dbe2cd1Smartijn 
1881180db9Smartijn #include <netinet/in.h>
1981180db9Smartijn 
209dbe2cd1Smartijn #include <stdint.h>
2181180db9Smartijn #include <stddef.h>
229dbe2cd1Smartijn 
2381180db9Smartijn struct agentx;
2481180db9Smartijn struct agentx_session;
2581180db9Smartijn struct agentx_context;
2681180db9Smartijn struct agentx_agentcaps;
2781180db9Smartijn struct agentx_region;
2881180db9Smartijn struct agentx_index;
2981180db9Smartijn struct agentx_object;
3081180db9Smartijn struct agentx_varbind;
319dbe2cd1Smartijn 
3281180db9Smartijn enum agentx_request_type {
3381180db9Smartijn 	AGENTX_REQUEST_TYPE_GET,
3481180db9Smartijn 	AGENTX_REQUEST_TYPE_GETNEXT,
3581180db9Smartijn 	AGENTX_REQUEST_TYPE_GETNEXTINCLUSIVE
369dbe2cd1Smartijn };
379dbe2cd1Smartijn 
3881180db9Smartijn #define AGENTX_MASTER_PATH "/var/agentx/master"
399c70cf54Smartijn #define AGENTX_OID_MIN_LEN 2
409dbe2cd1Smartijn #define AGENTX_OID_MAX_LEN 128
4181180db9Smartijn #define AGENTX_OID_INDEX_MAX_LEN 10
4281180db9Smartijn #define AGENTX_MIB2 1, 3, 6, 1, 2, 1
4381180db9Smartijn #define AGENTX_ENTERPRISES 1, 3, 6, 1, 4, 1
4481180db9Smartijn #define AGENTX_OID(...) (uint32_t []) { __VA_ARGS__ }, \
4581180db9Smartijn     (sizeof((uint32_t []) { __VA_ARGS__ }) / sizeof(uint32_t))
469dbe2cd1Smartijn 
4781180db9Smartijn extern void (*agentx_log_fatal)(const char *, ...)
4881180db9Smartijn     __attribute__((__format__ (printf, 1, 2)));
4981180db9Smartijn extern void (*agentx_log_warn)(const char *, ...)
5081180db9Smartijn     __attribute__((__format__ (printf, 1, 2)));
5181180db9Smartijn extern void (*agentx_log_info)(const char *, ...)
5281180db9Smartijn     __attribute__((__format__ (printf, 1, 2)));
5381180db9Smartijn extern void (*agentx_log_debug)(const char *, ...)
5481180db9Smartijn     __attribute__((__format__ (printf, 1, 2)));
559dbe2cd1Smartijn 
5681180db9Smartijn struct agentx *agentx(void (*)(struct agentx *, void *, int), void *);
5781180db9Smartijn void agentx_connect(struct agentx *, int);
58*67d8ab44Smartijn void agentx_retry(struct agentx *);
5981180db9Smartijn void agentx_read(struct agentx *);
6081180db9Smartijn void agentx_write(struct agentx *);
6181180db9Smartijn extern void (*agentx_wantwrite)(struct agentx *, int);
629dbe2cd1Smartijn void agentx_free(struct agentx *);
6381180db9Smartijn struct agentx_session *agentx_session(struct agentx *,
6481180db9Smartijn     uint32_t[], size_t, const char *, uint8_t);
6581180db9Smartijn void agentx_session_free(struct agentx_session *);
6681180db9Smartijn struct agentx_context *agentx_context(struct agentx_session *,
6781180db9Smartijn     const char *);
6881180db9Smartijn struct agentx_object *agentx_context_object_find(
6981180db9Smartijn     struct agentx_context *, const uint32_t[], size_t, int, int);
7081180db9Smartijn struct agentx_object *agentx_context_object_nfind(
7181180db9Smartijn     struct agentx_context *, const uint32_t[], size_t, int, int);
7281180db9Smartijn uint32_t agentx_context_uptime(struct agentx_context *);
7381180db9Smartijn void agentx_context_free(struct agentx_context *);
7481180db9Smartijn struct agentx_agentcaps *agentx_agentcaps(struct agentx_context *,
7581180db9Smartijn     uint32_t[], size_t, const char *);
7681180db9Smartijn void agentx_agentcaps_free(struct agentx_agentcaps *);
7781180db9Smartijn struct agentx_region *agentx_region(struct agentx_context *,
7881180db9Smartijn     uint32_t[], size_t, uint8_t);
7981180db9Smartijn void agentx_region_free(struct agentx_region *);
8081180db9Smartijn struct agentx_index *agentx_index_integer_new(struct agentx_region *,
8181180db9Smartijn     uint32_t[], size_t);
8281180db9Smartijn struct agentx_index *agentx_index_integer_any(struct agentx_region *,
8381180db9Smartijn     uint32_t[], size_t);
8481180db9Smartijn struct agentx_index *agentx_index_integer_value(struct agentx_region *,
851b6ededeSmartijn     uint32_t[], size_t, int32_t);
8681180db9Smartijn struct agentx_index *agentx_index_integer_dynamic(
8781180db9Smartijn     struct agentx_region *, uint32_t[], size_t);
8881180db9Smartijn struct agentx_index *agentx_index_string_dynamic(
8981180db9Smartijn     struct agentx_region *, uint32_t[], size_t);
9081180db9Smartijn struct agentx_index *agentx_index_nstring_dynamic(
9181180db9Smartijn     struct agentx_region *, uint32_t[], size_t, size_t);
9281180db9Smartijn struct agentx_index *agentx_index_oid_dynamic(struct agentx_region *,
9381180db9Smartijn     uint32_t[], size_t);
9481180db9Smartijn struct agentx_index *agentx_index_noid_dynamic(struct agentx_region *,
9581180db9Smartijn     uint32_t[], size_t, size_t);
9681180db9Smartijn struct agentx_index *agentx_index_ipaddress_dynamic(
9781180db9Smartijn     struct agentx_region *, uint32_t[], size_t);
9881180db9Smartijn void agentx_index_free(struct agentx_index *);
9981180db9Smartijn struct agentx_object *agentx_object(struct agentx_region *, uint32_t[],
10081180db9Smartijn     size_t, struct agentx_index *[], size_t, int,
10181180db9Smartijn     void (*)(struct agentx_varbind *));
10281180db9Smartijn void agentx_object_free(struct agentx_object *);
10381180db9Smartijn 
1041b6ededeSmartijn void agentx_varbind_integer(struct agentx_varbind *, int32_t);
10581180db9Smartijn void agentx_varbind_string(struct agentx_varbind *, const char *);
10681180db9Smartijn void agentx_varbind_nstring(struct agentx_varbind *,
10781180db9Smartijn     const unsigned char *, size_t);
10881180db9Smartijn void agentx_varbind_printf(struct agentx_varbind *, const char *, ...)
10981180db9Smartijn     __attribute__((__format__ (printf, 2, 3)));
11081180db9Smartijn void agentx_varbind_null(struct agentx_varbind *);
11181180db9Smartijn void agentx_varbind_oid(struct agentx_varbind *, const uint32_t[],
11281180db9Smartijn     size_t);
11381180db9Smartijn void agentx_varbind_object(struct agentx_varbind *,
11481180db9Smartijn     struct agentx_object *);
11581180db9Smartijn void agentx_varbind_index(struct agentx_varbind *,
11681180db9Smartijn     struct agentx_index *);
11781180db9Smartijn void agentx_varbind_ipaddress(struct agentx_varbind *,
11881180db9Smartijn     const struct in_addr *);
11981180db9Smartijn void agentx_varbind_counter32(struct agentx_varbind *, uint32_t);
12081180db9Smartijn void agentx_varbind_gauge32(struct agentx_varbind *, uint32_t);
121036f0da0Smartijn void agentx_varbind_unsigned32(struct agentx_varbind *, uint32_t);
12281180db9Smartijn void agentx_varbind_timeticks(struct agentx_varbind *, uint32_t);
12381180db9Smartijn void agentx_varbind_opaque(struct agentx_varbind *, const char *, size_t);
12481180db9Smartijn void agentx_varbind_counter64(struct agentx_varbind *, uint64_t);
12581180db9Smartijn void agentx_varbind_notfound(struct agentx_varbind *);
12681180db9Smartijn void agentx_varbind_error(struct agentx_varbind *);
12781180db9Smartijn 
12881180db9Smartijn enum agentx_request_type agentx_varbind_request(
12981180db9Smartijn     struct agentx_varbind *);
13081180db9Smartijn struct agentx_object *
13181180db9Smartijn     agentx_varbind_get_object(struct agentx_varbind *);
1321b6ededeSmartijn int32_t agentx_varbind_get_index_integer(struct agentx_varbind *,
13381180db9Smartijn     struct agentx_index *);
13481180db9Smartijn const unsigned char *agentx_varbind_get_index_string(
13581180db9Smartijn     struct agentx_varbind *, struct agentx_index *, size_t *, int *);
13681180db9Smartijn const uint32_t *agentx_varbind_get_index_oid(struct agentx_varbind *,
13781180db9Smartijn     struct agentx_index *, size_t *, int *);
13881180db9Smartijn const struct in_addr *agentx_varbind_get_index_ipaddress(
13981180db9Smartijn     struct agentx_varbind *, struct agentx_index *);
14081180db9Smartijn void agentx_varbind_set_index_integer(struct agentx_varbind *,
1411b6ededeSmartijn     struct agentx_index *, int32_t);
14281180db9Smartijn void agentx_varbind_set_index_string(struct agentx_varbind *,
14381180db9Smartijn     struct agentx_index *, const char *);
14481180db9Smartijn void agentx_varbind_set_index_nstring(struct agentx_varbind *,
14581180db9Smartijn     struct agentx_index *, const unsigned char *, size_t);
14681180db9Smartijn void agentx_varbind_set_index_oid(struct agentx_varbind *,
14781180db9Smartijn     struct agentx_index *, const uint32_t *, size_t);
14881180db9Smartijn void agentx_varbind_set_index_object(struct agentx_varbind *,
14981180db9Smartijn     struct agentx_index *, struct agentx_object *);
15081180db9Smartijn void agentx_varbind_set_index_ipaddress(struct agentx_varbind *,
15181180db9Smartijn     struct agentx_index *, const struct in_addr *);
152