1*f00a771dSmartijn /* $OpenBSD: agentx_internal.h,v 1.3 2021/10/23 14:39:35 martijn Exp $ */ 281180db9Smartijn /* 381180db9Smartijn * Copyright (c) 2020 Martijn van Duren <martijn@openbsd.org> 481180db9Smartijn * 581180db9Smartijn * Permission to use, copy, modify, and distribute this software for any 681180db9Smartijn * purpose with or without fee is hereby granted, provided that the above 781180db9Smartijn * copyright notice and this permission notice appear in all copies. 881180db9Smartijn * 981180db9Smartijn * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1081180db9Smartijn * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1181180db9Smartijn * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1281180db9Smartijn * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1381180db9Smartijn * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1481180db9Smartijn * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1581180db9Smartijn * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1681180db9Smartijn */ 1781180db9Smartijn #include <sys/queue.h> 1881180db9Smartijn #include <sys/time.h> 1981180db9Smartijn #include <sys/tree.h> 2081180db9Smartijn 2181180db9Smartijn #include "ax.h" 2281180db9Smartijn 2381180db9Smartijn enum agentx_cstate { /* Current state */ 2481180db9Smartijn AX_CSTATE_CLOSE, /* Closed */ 2581180db9Smartijn AX_CSTATE_WAITOPEN, /* Connection requested */ 2681180db9Smartijn AX_CSTATE_OPEN, /* Open */ 2781180db9Smartijn AX_CSTATE_WAITCLOSE /* Close requested */ 2881180db9Smartijn }; 2981180db9Smartijn 3081180db9Smartijn enum agentx_dstate { /* Desired state */ 3181180db9Smartijn AX_DSTATE_OPEN, /* Open */ 3281180db9Smartijn AX_DSTATE_CLOSE /* Close/free */ 3381180db9Smartijn }; 3481180db9Smartijn 3581180db9Smartijn struct agentx { 3681180db9Smartijn void (*ax_nofd)(struct agentx *, void *, int); 3781180db9Smartijn void *ax_cookie; 3881180db9Smartijn int ax_fd; 3981180db9Smartijn enum agentx_cstate ax_cstate; 4081180db9Smartijn enum agentx_dstate ax_dstate; 41*f00a771dSmartijn int ax_free; /* Freeing already planned */ 4281180db9Smartijn struct ax *ax_ax; 4381180db9Smartijn TAILQ_HEAD(, agentx_session) ax_sessions; 4481180db9Smartijn TAILQ_HEAD(, agentx_get) ax_getreqs; 4581180db9Smartijn RB_HEAD(ax_requests, agentx_request) ax_requests; 4681180db9Smartijn }; 4781180db9Smartijn 4881180db9Smartijn struct agentx_session { 4981180db9Smartijn struct agentx *axs_ax; 5081180db9Smartijn uint32_t axs_id; 5181180db9Smartijn uint32_t axs_timeout; 5281180db9Smartijn struct ax_oid axs_oid; 5381180db9Smartijn struct ax_ostring axs_descr; 5481180db9Smartijn enum agentx_cstate axs_cstate; 5581180db9Smartijn enum agentx_dstate axs_dstate; 5681180db9Smartijn uint32_t axs_packetid; 5781180db9Smartijn TAILQ_HEAD(, agentx_context) axs_contexts; 5881180db9Smartijn TAILQ_ENTRY(agentx_session) axs_ax_sessions; 5981180db9Smartijn }; 6081180db9Smartijn 6181180db9Smartijn struct agentx_context { 6281180db9Smartijn struct agentx_session *axc_axs; 6381180db9Smartijn int axc_name_default; 6481180db9Smartijn struct ax_ostring axc_name; 6581180db9Smartijn uint32_t axc_sysuptime; 6681180db9Smartijn struct timespec axc_sysuptimespec; 6781180db9Smartijn enum agentx_cstate axc_cstate; 6881180db9Smartijn enum agentx_dstate axc_dstate; 6981180db9Smartijn TAILQ_HEAD(, agentx_agentcaps) axc_agentcaps; 7081180db9Smartijn TAILQ_HEAD(, agentx_region) axc_regions; 7181180db9Smartijn RB_HEAD(axc_objects, agentx_object) axc_objects; 7281180db9Smartijn TAILQ_ENTRY(agentx_context) axc_axs_contexts; 7381180db9Smartijn }; 7481180db9Smartijn 7581180db9Smartijn struct agentx_get { 7681180db9Smartijn struct agentx_context *axg_axc; 7781180db9Smartijn int axg_fd; /* Only used for logging */ 7881180db9Smartijn uint32_t axg_sessionid; 7981180db9Smartijn uint32_t axg_transactionid; 8081180db9Smartijn uint32_t axg_packetid; 8181180db9Smartijn int axg_context_default; 8281180db9Smartijn struct ax_ostring axg_context; 8381180db9Smartijn enum ax_pdu_type axg_type; 8481180db9Smartijn uint16_t axg_nonrep; 8581180db9Smartijn uint16_t axg_maxrep; 8681180db9Smartijn size_t axg_nvarbind; 8781180db9Smartijn struct agentx_varbind *axg_varbind; 8881180db9Smartijn TAILQ_ENTRY(agentx_get) axg_ax_getreqs; 8981180db9Smartijn }; 9081180db9Smartijn 9181180db9Smartijn __dead void agentx_log_ax_fatalx(struct agentx *, const char *, ...) 9281180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 9381180db9Smartijn void agentx_log_ax_warn(struct agentx *, const char *, ...) 9481180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 9581180db9Smartijn void agentx_log_ax_warnx(struct agentx *, const char *, ...) 9681180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 9781180db9Smartijn void agentx_log_ax_info(struct agentx *, const char *, ...) 9881180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 9981180db9Smartijn void agentx_log_ax_debug(struct agentx *, const char *, ...) 10081180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 10181180db9Smartijn __dead void agentx_log_axs_fatalx(struct agentx_session *, const char *, 10281180db9Smartijn ...) __attribute__((__format__ (printf, 2, 3))); 10381180db9Smartijn void agentx_log_axs_warnx(struct agentx_session *, const char *, ...) 10481180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 10581180db9Smartijn void agentx_log_axs_warn(struct agentx_session *, const char *, ...) 10681180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 10781180db9Smartijn void agentx_log_axs_info(struct agentx_session *, const char *, ...) 10881180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 10981180db9Smartijn __dead void agentx_log_axc_fatalx(struct agentx_context *, const char *, 11081180db9Smartijn ...) __attribute__((__format__ (printf, 2, 3))); 11181180db9Smartijn void agentx_log_axc_warnx(struct agentx_context *, const char *, ...) 11281180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 11381180db9Smartijn void agentx_log_axc_warn(struct agentx_context *, const char *, ...) 11481180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 11581180db9Smartijn void agentx_log_axc_info(struct agentx_context *, const char *, ...) 11681180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 11781180db9Smartijn void agentx_log_axc_debug(struct agentx_context *, const char *, ...) 11881180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 11981180db9Smartijn __dead void agentx_log_axg_fatalx(struct agentx_get *, const char *, 12081180db9Smartijn ...) __attribute__((__format__ (printf, 2, 3))); 12181180db9Smartijn void agentx_log_axg_warnx(struct agentx_get *, const char *, ...) 12281180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 12381180db9Smartijn void agentx_log_axg_warn(struct agentx_get *, const char *, ...) 12481180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 12581180db9Smartijn void agentx_log_axg_debug(struct agentx_get *, const char *, ...) 12681180db9Smartijn __attribute__((__format__ (printf, 2, 3))); 127