summaryrefslogtreecommitdiff
path: root/include/net-snmp/agent/snmp_agent.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/agent/snmp_agent.h')
-rw-r--r--include/net-snmp/agent/snmp_agent.h322
1 files changed, 322 insertions, 0 deletions
diff --git a/include/net-snmp/agent/snmp_agent.h b/include/net-snmp/agent/snmp_agent.h
new file mode 100644
index 0000000..aad8837
--- /dev/null
+++ b/include/net-snmp/agent/snmp_agent.h
@@ -0,0 +1,322 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+/*
+ * @file snmp_agent.h
+ *
+ * @addtogroup agent
+ * @addtogroup table
+ * External definitions for functions and variables in snmp_agent.c.
+ *
+ * @{
+ */
+
+#ifndef SNMP_AGENT_H
+#define SNMP_AGENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <net-snmp/library/snmp_impl.h>
+#include <net-snmp/library/tools.h>
+#include <net-snmp/library/data_list.h>
+
+#define SNMP_MAX_PDU_SIZE 64000 /* local constraint on PDU size sent by agent
+ * (see also SNMP_MAX_MSG_SIZE in snmp_api.h) */
+
+ /*
+ * If non-zero, causes the addresses of peers to be logged when receptions
+ * occur.
+ */
+
+ extern int log_addresses;
+
+ /*
+ * How many ticks since we last aged the address cache entries.
+ */
+
+ extern int lastAddrAge;
+
+ /** @typedef struct netsnmp_request_info_s netsnmp_request_info
+ * Typedefs the netsnmp_request_info_s struct into
+ * netsnmp_request_info*/
+ /** @struct netsnmp_request_info_s
+ * The netsnmp request info structure.
+ */
+ typedef struct netsnmp_request_info_s {
+ /**
+ * variable bindings
+ */
+ netsnmp_variable_list *requestvb;
+
+ /**
+ * can be used to pass information on a per-request basis from a
+ * helper to the later handlers
+ */
+ netsnmp_data_list *parent_data;
+
+ /*
+ * pointer to the agent_request_info for this request
+ */
+ struct netsnmp_agent_request_info_s *agent_req_info;
+
+ /** don't free, reference to (struct tree)->end */
+ oid *range_end;
+ size_t range_end_len;
+
+ /*
+ * flags
+ */
+ int delegated;
+ int processed;
+ int inclusive;
+
+ int status;
+ /** index in original pdu */
+ int index;
+
+ /** get-bulk */
+ int repeat;
+ int orig_repeat;
+ netsnmp_variable_list *requestvb_start;
+
+ /* internal use */
+ struct netsnmp_request_info_s *next;
+ struct netsnmp_request_info_s *prev;
+ struct netsnmp_subtree_s *subtree;
+ } netsnmp_request_info;
+
+ typedef struct netsnmp_set_info_s {
+ int action;
+ void *stateRef;
+
+ /*
+ * don't use yet:
+ */
+ void **oldData;
+ int setCleanupFlags;
+#define AUTO_FREE_STATEREF 0x01 /* calls free(stateRef) */
+#define AUTO_FREE_OLDDATA 0x02 /* calls free(*oldData) */
+#define AUTO_UNDO 0x03 /* ... */
+ } netsnmp_set_info;
+
+ typedef struct netsnmp_tree_cache_s {
+ struct netsnmp_subtree_s *subtree;
+ netsnmp_request_info *requests_begin;
+ netsnmp_request_info *requests_end;
+ } netsnmp_tree_cache;
+
+#define MODE_GET SNMP_MSG_GET
+#define MODE_GETNEXT SNMP_MSG_GETNEXT
+#define MODE_GETBULK SNMP_MSG_GETBULK
+#define MODE_GET_STASH SNMP_MSG_INTERNAL_GET_STASH
+#ifndef NETSNMP_NO_WRITE_SUPPORT
+#define MODE_IS_GET(x) ((x >= 128) && (x != -1) && (x != SNMP_MSG_SET))
+#else /* NETSNMP_NO_WRITE_SUPPORT */
+#define MODE_IS_GET(x) ((x >= 128) && (x != -1))
+#endif /* NETSNMP_NO_WRITE_SUPPORT */
+
+ /* #define MODE_IS_GET(x) ((x == SNMP_MSG_GET) || (x == SNMP_MSG_GETNEXT) || (x == SNMP_MSG_GETBULK) || (x == SNMP_MSG_INTERNAL_GET_STASH)) */
+
+#ifndef NETSNMP_NO_WRITE_SUPPORT
+#define MODE_SET_BEGIN SNMP_MSG_INTERNAL_SET_BEGIN
+#define MODE_SET_RESERVE1 SNMP_MSG_INTERNAL_SET_RESERVE1
+#define MODE_SET_RESERVE2 SNMP_MSG_INTERNAL_SET_RESERVE2
+#define MODE_SET_ACTION SNMP_MSG_INTERNAL_SET_ACTION
+#define MODE_SET_COMMIT SNMP_MSG_INTERNAL_SET_COMMIT
+#define MODE_SET_FREE SNMP_MSG_INTERNAL_SET_FREE
+#define MODE_SET_UNDO SNMP_MSG_INTERNAL_SET_UNDO
+#define MODE_IS_SET(x) ((x < 128) || (x == -1) || (x == SNMP_MSG_SET))
+ /* #define MODE_IS_SET(x) (!MODE_IS_GET(x)) */
+#endif /* NETSNMP_NO_WRITE_SUPPORT */
+
+#define MODE_BSTEP_PRE_REQUEST SNMP_MSG_INTERNAL_PRE_REQUEST
+#define MODE_BSTEP_POST_REQUEST SNMP_MSG_INTERNAL_POST_REQUEST
+
+#define MODE_BSTEP_OBJECT_LOOKUP SNMP_MSG_INTERNAL_OBJECT_LOOKUP
+#ifndef NETSNMP_NO_WRITE_SUPPORT
+#define MODE_BSTEP_CHECK_VALUE SNMP_MSG_INTERNAL_CHECK_VALUE
+#define MODE_BSTEP_ROW_CREATE SNMP_MSG_INTERNAL_ROW_CREATE
+#define MODE_BSTEP_UNDO_SETUP SNMP_MSG_INTERNAL_UNDO_SETUP
+#define MODE_BSTEP_SET_VALUE SNMP_MSG_INTERNAL_SET_VALUE
+#define MODE_BSTEP_CHECK_CONSISTENCY SNMP_MSG_INTERNAL_CHECK_CONSISTENCY
+#define MODE_BSTEP_UNDO_SET SNMP_MSG_INTERNAL_UNDO_SET
+#define MODE_BSTEP_COMMIT SNMP_MSG_INTERNAL_COMMIT
+#define MODE_BSTEP_UNDO_COMMIT SNMP_MSG_INTERNAL_UNDO_COMMIT
+#define MODE_BSTEP_IRREVERSIBLE_COMMIT SNMP_MSG_INTERNAL_IRREVERSIBLE_COMMIT
+#define MODE_BSTEP_UNDO_CLEANUP SNMP_MSG_INTERNAL_UNDO_CLEANUP
+#endif /* NETSNMP_NO_WRITE_SUPPORT */
+
+/** @typedef struct netsnmp_agent_request_info_s netsnmp_agent_request_info
+ * Typedefs the netsnmp_agent_request_info_s struct into
+ * netsnmp_agent_request_info
+ */
+
+/** @struct netsnmp_agent_request_info_s
+ * The agent transaction request structure
+ */
+ typedef struct netsnmp_agent_request_info_s {
+ int mode;
+ /** pdu contains authinfo, eg */
+/* netsnmp_pdu *pdu; */
+ struct netsnmp_agent_session_s *asp; /* may not be needed */
+ /*
+ * can be used to pass information on a per-pdu basis from a
+ * helper to the later handlers
+ */
+ netsnmp_data_list *agent_data;
+ } netsnmp_agent_request_info;
+
+ typedef struct netsnmp_cachemap_s {
+ int globalid;
+ int cacheid;
+ struct netsnmp_cachemap_s *next;
+ } netsnmp_cachemap;
+
+ typedef struct netsnmp_agent_session_s {
+ int mode;
+ netsnmp_session *session;
+ netsnmp_pdu *pdu;
+ netsnmp_pdu *orig_pdu;
+ int rw;
+ int exact;
+ int status;
+ int index;
+ int oldmode;
+
+ struct netsnmp_agent_session_s *next;
+
+ /*
+ * new API pointers
+ */
+ netsnmp_agent_request_info *reqinfo;
+ netsnmp_request_info *requests;
+ netsnmp_tree_cache *treecache;
+ netsnmp_variable_list **bulkcache;
+ int treecache_len; /* length of cache array */
+ int treecache_num; /* number of current cache entries */
+ netsnmp_cachemap *cache_store;
+ int vbcount;
+ } netsnmp_agent_session;
+
+ /*
+ * Address cache handling functions.
+ */
+
+ void netsnmp_addrcache_initialise(void);
+ void netsnmp_addrcache_destroy(void);
+ void netsnmp_addrcache_age(void);
+
+
+ /*
+ * config file parsing routines
+ */
+ int handle_snmp_packet(int, netsnmp_session *, int,
+ netsnmp_pdu *, void *);
+ void snmp_agent_parse_config(char *, char *);
+ netsnmp_agent_session *init_agent_snmp_session(netsnmp_session *,
+ netsnmp_pdu *);
+ void free_agent_snmp_session(netsnmp_agent_session *);
+ void
+ netsnmp_remove_and_free_agent_snmp_session(netsnmp_agent_session
+ *asp);
+#ifdef SNMP_NEED_REQUEST_LIST
+ void
+ netsnmp_free_agent_snmp_session_by_session(netsnmp_session * sess,
+ void (*free_request)
+ (netsnmp_request_list
+ *));
+#endif
+ int getNextSessID(void);
+ void dump_sess_list(void);
+ int init_master_agent(void);
+ void shutdown_master_agent(void);
+ int agent_check_and_process(int block);
+ void netsnmp_check_outstanding_agent_requests(void);
+
+ int netsnmp_request_set_error(netsnmp_request_info *request,
+ int error_value);
+ int netsnmp_check_requests_error(netsnmp_request_info *reqs);
+ int netsnmp_check_all_requests_error(netsnmp_agent_session *asp,
+ int look_for_specific);
+ int
+ netsnmp_set_all_requests_error(netsnmp_agent_request_info *reqinfo,
+ netsnmp_request_info *requests,
+ int error_value);
+ int netsnmp_request_set_error_idx(netsnmp_request_info *requests,
+ int error_value, int idx);
+ int
+ netsnmp_request_set_error_all(netsnmp_request_info *requests,
+ int error_value);
+
+ /** deprecated, use netsnmp_request_set_error instead */
+ int netsnmp_set_request_error(netsnmp_agent_request_info
+ *reqinfo,
+ netsnmp_request_info
+ *request, int error_value);
+ /** deprecated, use netsnmp_request_set_error instead */
+ int netsnmp_set_mode_request_error(int mode,
+ netsnmp_request_info
+ *request,
+ int error_value);
+
+ u_long netsnmp_marker_uptime(marker_t pm);
+ u_long netsnmp_timeval_uptime(struct timeval *tv);
+ const_marker_t netsnmp_get_agent_starttime(void);
+ uint64_t netsnmp_get_agent_runtime(void);
+ void netsnmp_set_agent_starttime(marker_t s);
+ u_long netsnmp_get_agent_uptime(void);
+ void netsnmp_set_agent_uptime(u_long hsec);
+ int netsnmp_check_transaction_id(int transaction_id);
+ int netsnmp_agent_check_packet(netsnmp_session *,
+ struct netsnmp_transport_s
+ *, void *, int);
+ int netsnmp_agent_check_parse(netsnmp_session *,
+ netsnmp_pdu *, int);
+ int netsnmp_allocate_globalcacheid(void);
+
+ int netsnmp_remove_delegated_requests_for_session(netsnmp_session *sess);
+
+ /*
+ * Register and de-register agent NSAPs.
+ */
+
+ struct netsnmp_transport_s;
+
+ int netsnmp_register_agent_nsap(struct netsnmp_transport_s
+ *t);
+ void netsnmp_deregister_agent_nsap(int handle);
+
+ void
+ netsnmp_agent_add_list_data(netsnmp_agent_request_info *agent,
+ netsnmp_data_list *node);
+
+ int
+ netsnmp_agent_remove_list_data(netsnmp_agent_request_info *ari,
+ const char * name);
+
+ void *
+ netsnmp_agent_get_list_data(netsnmp_agent_request_info
+ *agent, const char *name);
+
+ void
+ netsnmp_free_agent_data_set(netsnmp_agent_request_info *agent);
+
+ void
+ netsnmp_free_agent_data_sets(netsnmp_agent_request_info *agent);
+ void
+ netsnmp_free_agent_request_info(netsnmp_agent_request_info *ari);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/** @} */