diff options
Diffstat (limited to 'include/net-snmp/agent/snmp_agent.h')
-rw-r--r-- | include/net-snmp/agent/snmp_agent.h | 322 |
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 +/** @} */ |