summaryrefslogtreecommitdiff
path: root/include/net-snmp/library/snmp_api.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/library/snmp_api.h')
-rw-r--r--include/net-snmp/library/snmp_api.h713
1 files changed, 713 insertions, 0 deletions
diff --git a/include/net-snmp/library/snmp_api.h b/include/net-snmp/library/snmp_api.h
new file mode 100644
index 0000000..6f658d5
--- /dev/null
+++ b/include/net-snmp/library/snmp_api.h
@@ -0,0 +1,713 @@
+/* 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.
+ */
+#ifndef SNMP_API_H
+#define SNMP_API_H
+
+/*
+ * @file snmp_api.h - API for access to snmp.
+ *
+ * @addtogroup library
+ *
+ * Caution: when using this library in a multi-threaded application,
+ * the values of global variables "snmp_errno" and "snmp_detail"
+ * cannot be reliably determined. Suggest using snmp_error()
+ * to obtain the library error codes.
+ *
+ * @{
+ */
+
+#include <net-snmp/types.h>
+#include <net-snmp/varbind_api.h>
+#include <net-snmp/output_api.h>
+#include <net-snmp/pdu_api.h>
+#include <net-snmp/session_api.h>
+
+#include <net-snmp/net-snmp-features.h>
+
+#ifndef DONT_SHARE_ERROR_WITH_OTHER_THREADS
+#define SET_SNMP_ERROR(x) snmp_errno=(x)
+#else
+#define SET_SNMP_ERROR(x)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/***********************************************************
+ Copyright 1989 by Carnegie Mellon University
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+******************************************************************/
+
+struct timeval;
+/*
+ * A list of all the outstanding requests for a particular session.
+ */
+#ifdef SNMP_NEED_REQUEST_LIST
+typedef struct request_list {
+ struct request_list *next_request;
+ long request_id; /* request id */
+ long message_id; /* message id */
+ netsnmp_callback callback; /* user callback per request (NULL if unused) */
+ void *cb_data; /* user callback data per request (NULL if unused) */
+ int retries; /* Number of retries */
+ u_long timeout; /* length to wait for timeout */
+ struct timeval timeM; /* Time this request was made [monotonic clock] */
+ struct timeval expireM; /* Time this request is due to expire [monotonic clock]. */
+ struct snmp_session *session;
+ netsnmp_pdu *pdu; /* The pdu for this request
+ * (saved so it can be retransmitted */
+} netsnmp_request_list;
+#endif /* SNMP_NEED_REQUEST_LIST */
+
+ /*
+ * Set fields in session and pdu to the following to get a default or unconfigured value.
+ */
+#define SNMP_DEFAULT_COMMUNITY_LEN 0 /* to get a default community name */
+#define SNMP_DEFAULT_RETRIES -1
+#define SNMP_DEFAULT_TIMEOUT -1
+#define SNMP_DEFAULT_REMPORT 0
+#define SNMP_DEFAULT_REQID -1
+#define SNMP_DEFAULT_MSGID -1
+#define SNMP_DEFAULT_ERRSTAT -1
+#define SNMP_DEFAULT_ERRINDEX -1
+#define SNMP_DEFAULT_ADDRESS 0
+#define SNMP_DEFAULT_PEERNAME NULL
+#define SNMP_DEFAULT_ENTERPRISE_LENGTH 0
+#define SNMP_DEFAULT_TIME 0
+#define SNMP_DEFAULT_VERSION -1
+#define SNMP_DEFAULT_SECMODEL -1
+#define SNMP_DEFAULT_CONTEXT ""
+#ifndef NETSNMP_DISABLE_MD5
+#define SNMP_DEFAULT_AUTH_PROTO usmHMACMD5AuthProtocol
+#else
+#define SNMP_DEFAULT_AUTH_PROTO usmHMACSHA1AuthProtocol
+#endif
+#define SNMP_DEFAULT_AUTH_PROTOLEN USM_LENGTH_OID_TRANSFORM
+#ifndef NETSNMP_DISABLE_DES
+#define SNMP_DEFAULT_PRIV_PROTO usmDESPrivProtocol
+#else
+#define SNMP_DEFAULT_PRIV_PROTO usmAESPrivProtocol
+#endif
+#define SNMP_DEFAULT_PRIV_PROTOLEN USM_LENGTH_OID_TRANSFORM
+
+ NETSNMP_IMPORT void snmp_set_detail(const char *);
+
+#define SNMP_MAX_MSG_SIZE 1472 /* ethernet MTU minus IP/UDP header */
+#define SNMP_MAX_MSG_V3_HDRS (4+3+4+7+7+3+7+16) /* fudge factor=16 */
+#define SNMP_MAX_ENG_SIZE 32
+#define SNMP_MAX_SEC_NAME_SIZE 256
+#define SNMP_MAX_CONTEXT_SIZE 256
+#define SNMP_SEC_PARAM_BUF_SIZE 256
+
+ /*
+ * set to one to ignore unauthenticated Reports
+ */
+#define SNMPV3_IGNORE_UNAUTH_REPORTS 0
+
+ /*
+ * authoritative engine definitions
+ */
+#define SNMP_SESS_NONAUTHORITATIVE 0 /* should be 0 to default to this */
+#define SNMP_SESS_AUTHORITATIVE 1 /* don't learn engineIDs */
+#define SNMP_SESS_UNKNOWNAUTH 2 /* sometimes (like NRs) */
+
+ /*
+ * to determine type of Report from varbind_list
+ */
+#define REPORT_STATS_LEN 9 /* Length of prefix for MPD/USM report statistic objects */
+#define REPORT_STATS_LEN2 8 /* Length of prefix for Target report statistic objects */
+/* From SNMP-MPD-MIB */
+#define REPORT_snmpUnknownSecurityModels_NUM 1
+#define REPORT_snmpInvalidMsgs_NUM 2
+#define REPORT_snmpUnknownPDUHandlers_NUM 3
+/* From SNMP-USER-BASED-SM-MIB */
+#define REPORT_usmStatsUnsupportedSecLevels_NUM 1
+#define REPORT_usmStatsNotInTimeWindows_NUM 2
+#define REPORT_usmStatsUnknownUserNames_NUM 3
+#define REPORT_usmStatsUnknownEngineIDs_NUM 4
+#define REPORT_usmStatsWrongDigests_NUM 5
+#define REPORT_usmStatsDecryptionErrors_NUM 6
+/* From SNMP-TARGET-MIB */
+#define REPORT_snmpUnavailableContexts_NUM 4
+#define REPORT_snmpUnknownContexts_NUM 5
+
+#define SNMP_DETAIL_SIZE 512
+
+#define SNMP_FLAGS_UDP_BROADCAST 0x800
+#define SNMP_FLAGS_RESP_CALLBACK 0x400 /* Additional callback on response */
+#define SNMP_FLAGS_USER_CREATED 0x200 /* USM user has been created */
+#define SNMP_FLAGS_DONT_PROBE 0x100 /* don't probe for an engineID */
+#define SNMP_FLAGS_STREAM_SOCKET 0x80
+#define SNMP_FLAGS_LISTENING 0x40 /* Server stream sockets only */
+#define SNMP_FLAGS_SUBSESSION 0x20
+#define SNMP_FLAGS_STRIKE2 0x02
+#define SNMP_FLAGS_STRIKE1 0x01
+
+#define CLEAR_SNMP_STRIKE_FLAGS(x) \
+ x &= ~(SNMP_FLAGS_STRIKE2|SNMP_FLAGS_STRIKE1)
+
+ /*
+ * returns '1' if the session is to be regarded as dead,
+ * otherwise set the strike flags appropriately, and return 0
+ */
+#define SET_SNMP_STRIKE_FLAGS(x) \
+ (( x & SNMP_FLAGS_STRIKE2 ) ? 1 : \
+ ((( x & SNMP_FLAGS_STRIKE1 ) ? ( x |= SNMP_FLAGS_STRIKE2 ) : \
+ ( x |= SNMP_FLAGS_STRIKE1 )), \
+ 0))
+
+ /*
+ * Error return values.
+ *
+ * SNMPERR_SUCCESS is the non-PDU "success" code.
+ *
+ * XXX These should be merged with SNMP_ERR_* defines and confined
+ * to values < 0. ???
+ */
+#define SNMPERR_SUCCESS (0) /* XXX Non-PDU "success" code. */
+#define SNMPERR_GENERR (-1)
+#define SNMPERR_BAD_LOCPORT (-2)
+#define SNMPERR_BAD_ADDRESS (-3)
+#define SNMPERR_BAD_SESSION (-4)
+#define SNMPERR_TOO_LONG (-5)
+#define SNMPERR_NO_SOCKET (-6)
+#define SNMPERR_V2_IN_V1 (-7)
+#define SNMPERR_V1_IN_V2 (-8)
+#define SNMPERR_BAD_REPEATERS (-9)
+#define SNMPERR_BAD_REPETITIONS (-10)
+#define SNMPERR_BAD_ASN1_BUILD (-11)
+#define SNMPERR_BAD_SENDTO (-12)
+#define SNMPERR_BAD_PARSE (-13)
+#define SNMPERR_BAD_VERSION (-14)
+#define SNMPERR_BAD_SRC_PARTY (-15)
+#define SNMPERR_BAD_DST_PARTY (-16)
+#define SNMPERR_BAD_CONTEXT (-17)
+#define SNMPERR_BAD_COMMUNITY (-18)
+#define SNMPERR_NOAUTH_DESPRIV (-19)
+#define SNMPERR_BAD_ACL (-20)
+#define SNMPERR_BAD_PARTY (-21)
+#define SNMPERR_ABORT (-22)
+#define SNMPERR_UNKNOWN_PDU (-23)
+#define SNMPERR_TIMEOUT (-24)
+#define SNMPERR_BAD_RECVFROM (-25)
+#define SNMPERR_BAD_ENG_ID (-26)
+#define SNMPERR_BAD_SEC_NAME (-27)
+#define SNMPERR_BAD_SEC_LEVEL (-28)
+#define SNMPERR_ASN_PARSE_ERR (-29)
+#define SNMPERR_UNKNOWN_SEC_MODEL (-30)
+#define SNMPERR_INVALID_MSG (-31)
+#define SNMPERR_UNKNOWN_ENG_ID (-32)
+#define SNMPERR_UNKNOWN_USER_NAME (-33)
+#define SNMPERR_UNSUPPORTED_SEC_LEVEL (-34)
+#define SNMPERR_AUTHENTICATION_FAILURE (-35)
+#define SNMPERR_NOT_IN_TIME_WINDOW (-36)
+#define SNMPERR_DECRYPTION_ERR (-37)
+#define SNMPERR_SC_GENERAL_FAILURE (-38)
+#define SNMPERR_SC_NOT_CONFIGURED (-39)
+#define SNMPERR_KT_NOT_AVAILABLE (-40)
+#define SNMPERR_UNKNOWN_REPORT (-41)
+#define SNMPERR_USM_GENERICERROR (-42)
+#define SNMPERR_USM_UNKNOWNSECURITYNAME (-43)
+#define SNMPERR_USM_UNSUPPORTEDSECURITYLEVEL (-44)
+#define SNMPERR_USM_ENCRYPTIONERROR (-45)
+#define SNMPERR_USM_AUTHENTICATIONFAILURE (-46)
+#define SNMPERR_USM_PARSEERROR (-47)
+#define SNMPERR_USM_UNKNOWNENGINEID (-48)
+#define SNMPERR_USM_NOTINTIMEWINDOW (-49)
+#define SNMPERR_USM_DECRYPTIONERROR (-50)
+#define SNMPERR_NOMIB (-51)
+#define SNMPERR_RANGE (-52)
+#define SNMPERR_MAX_SUBID (-53)
+#define SNMPERR_BAD_SUBID (-54)
+#define SNMPERR_LONG_OID (-55)
+#define SNMPERR_BAD_NAME (-56)
+#define SNMPERR_VALUE (-57)
+#define SNMPERR_UNKNOWN_OBJID (-58)
+#define SNMPERR_NULL_PDU (-59)
+#define SNMPERR_NO_VARS (-60)
+#define SNMPERR_VAR_TYPE (-61)
+#define SNMPERR_MALLOC (-62)
+#define SNMPERR_KRB5 (-63)
+#define SNMPERR_PROTOCOL (-64)
+#define SNMPERR_OID_NONINCREASING (-65)
+#define SNMPERR_JUST_A_CONTEXT_PROBE (-66)
+#define SNMPERR_TRANSPORT_NO_CONFIG (-67)
+#define SNMPERR_TRANSPORT_CONFIG_ERROR (-68)
+#define SNMPERR_TLS_NO_CERTIFICATE (-69)
+
+#define SNMPERR_MAX (-69)
+
+
+ /*
+ * General purpose memory allocation functions. Use these functions to
+ * allocate memory that may be reallocated or freed by the Net-SNMP
+ * library or to reallocate or free memory that has been allocated by the
+ * Net-SNMP library, and when working in a context where there is more than
+ * one heap. Examples are:
+ * - Perl XSUB's.
+ * - MSVC or MinGW with the Net-SNMP library compiled as a DLL instead of
+ * a static library.
+ */
+ NETSNMP_IMPORT void *netsnmp_malloc(size_t size);
+ NETSNMP_IMPORT void *netsnmp_calloc(size_t nelem, size_t elsize);
+ NETSNMP_IMPORT void *netsnmp_realloc(void *ptr, size_t size);
+ NETSNMP_IMPORT void netsnmp_free(void *ptr);
+ NETSNMP_IMPORT char *netsnmp_strdup(const char *s1);
+
+ /*
+ * void
+ * snmp_free_pdu(pdu)
+ * netsnmp_pdu *pdu;
+ *
+ * Frees the pdu and any malloc'd data associated with it.
+ */
+
+ NETSNMP_IMPORT void snmp_free_var_internals(netsnmp_variable_list *); /* frees contents only */
+
+
+ /*
+ * This routine must be supplied by the application:
+ *
+ * u_char *authenticator(pdu, length, community, community_len)
+ * u_char *pdu; The rest of the PDU to be authenticated
+ * int *length; The length of the PDU (updated by the authenticator)
+ * u_char *community; The community name to authenticate under.
+ * int community_len The length of the community name.
+ *
+ * Returns the authenticated pdu, or NULL if authentication failed.
+ * If null authentication is used, the authenticator in snmp_session can be
+ * set to NULL(0).
+ */
+
+
+
+ /*
+ * This routine must be supplied by the application:
+ *
+ * int callback(operation, session, reqid, pdu, magic)
+ * int operation;
+ * netsnmp_session *session; The session authenticated under.
+ * int reqid; The request id of this pdu (0 for TRAP)
+ * netsnmp_pdu *pdu; The pdu information.
+ * void *magic A link to the data for this routine.
+ *
+ * Returns 1 if request was successful, 0 if it should be kept pending.
+ * Any data in the pdu must be copied because it will be freed elsewhere.
+ * Operations are defined below:
+ */
+
+#define NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE 1
+#define NETSNMP_CALLBACK_OP_TIMED_OUT 2
+#define NETSNMP_CALLBACK_OP_SEND_FAILED 3
+#define NETSNMP_CALLBACK_OP_CONNECT 4
+#define NETSNMP_CALLBACK_OP_DISCONNECT 5
+
+ long snmp_get_next_msgid(void);
+ long snmp_get_next_reqid(void);
+ NETSNMP_IMPORT
+ long snmp_get_next_sessid(void);
+ NETSNMP_IMPORT
+ long snmp_get_next_transid(void);
+
+ NETSNMP_IMPORT
+ int snmp_oid_compare(const oid *, size_t, const oid *,
+ size_t);
+ int snmp_oid_ncompare(const oid *, size_t, const oid *,
+ size_t, size_t);
+ NETSNMP_IMPORT
+ int snmp_oidtree_compare(const oid *, size_t, const oid *,
+ size_t);
+ NETSNMP_IMPORT
+ int snmp_oidsubtree_compare(const oid *, size_t, const oid *,
+ size_t);
+ NETSNMP_IMPORT
+ int netsnmp_oid_compare_ll(const oid * in_name1,
+ size_t len1, const oid * in_name2,
+ size_t len2, size_t *offpt);
+ NETSNMP_IMPORT
+ int netsnmp_oid_equals(const oid *, size_t, const oid *,
+ size_t);
+ int netsnmp_oid_tree_equals(const oid *, size_t, const oid *,
+ size_t);
+ NETSNMP_IMPORT
+ int netsnmp_oid_is_subtree(const oid *, size_t, const oid *,
+ size_t);
+ NETSNMP_IMPORT
+ int netsnmp_oid_find_prefix(const oid * in_name1, size_t len1,
+ const oid * in_name2, size_t len2);
+ NETSNMP_IMPORT
+ void init_snmp(const char *);
+ u_char *snmp_pdu_build(netsnmp_pdu *, u_char *, size_t *);
+#ifdef NETSNMP_USE_REVERSE_ASNENCODING
+ u_char *snmp_pdu_rbuild(netsnmp_pdu *, u_char *, size_t *);
+#endif
+ int snmpv3_parse(netsnmp_pdu *, u_char *, size_t *,
+ u_char **, netsnmp_session *);
+ int snmpv3_packet_build(netsnmp_session *,
+ netsnmp_pdu *pdu, u_char * packet,
+ size_t * out_length,
+ u_char * pdu_data,
+ size_t pdu_data_len);
+ int snmpv3_packet_rbuild(netsnmp_session *,
+ netsnmp_pdu *pdu, u_char * packet,
+ size_t * out_length,
+ u_char * pdu_data,
+ size_t pdu_data_len);
+ int snmpv3_make_report(netsnmp_pdu *pdu, int error);
+ int snmpv3_get_report_type(netsnmp_pdu *pdu);
+ int snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data,
+ size_t * length);
+ u_char *snmpv3_scopedPDU_parse(netsnmp_pdu *pdu, u_char * cp,
+ size_t * length);
+ NETSNMP_IMPORT
+ void snmp_store_needed(const char *type);
+ NETSNMP_IMPORT
+ void snmp_store_if_needed(void);
+ NETSNMP_IMPORT
+ void snmp_store(const char *type);
+ NETSNMP_IMPORT
+ void snmp_shutdown(const char *type);
+ NETSNMP_IMPORT
+ int snmp_add_var(netsnmp_pdu *, const oid *, size_t, char,
+ const char *);
+ NETSNMP_IMPORT
+ oid *snmp_duplicate_objid(const oid * objToCopy, size_t);
+ NETSNMP_IMPORT
+
+#ifndef NETSNMP_FEATURE_REMOVE_STATISTICS
+ u_int snmp_increment_statistic(int which);
+ NETSNMP_IMPORT
+ u_int snmp_increment_statistic_by(int which, int count);
+ NETSNMP_IMPORT
+ u_int snmp_get_statistic(int which);
+ void snmp_init_statistics(void);
+#else /* NETSNMP_FEATURE_REMOVE_STATISTICS */
+
+/* allow code to continue referencing API even if statistics are removed */
+#define snmp_increment_statistic(X)
+#define snmp_increment_statistic_by(X,Y)
+#define snmp_init_statistics()
+
+#endif
+
+ int create_user_from_session(netsnmp_session * session);
+ int snmpv3_probe_contextEngineID_rfc5343(void *slp,
+ netsnmp_session *session);
+
+ /*
+ * New re-allocating reverse encoding functions.
+ */
+#ifdef NETSNMP_USE_REVERSE_ASNENCODING
+
+ int snmpv3_packet_realloc_rbuild(u_char ** pkt, size_t * pkt_len,
+ size_t * offset,
+ netsnmp_session * session,
+ netsnmp_pdu *pdu, u_char * pdu_data,
+ size_t pdu_data_len);
+
+ int snmp_pdu_realloc_rbuild(u_char ** pkt, size_t * pkt_len,
+ size_t * offset, netsnmp_pdu *pdu);
+#endif
+
+
+
+struct netsnmp_transport_s;
+
+ /*
+ * Extended open; fpre_parse has changed.
+ */
+
+ NETSNMP_IMPORT
+ netsnmp_session *snmp_open_ex(netsnmp_session *,
+ int (*fpre_parse) (netsnmp_session *,
+ struct
+ netsnmp_transport_s *,
+ void *, int),
+ int (*fparse) (netsnmp_session *,
+ netsnmp_pdu *, u_char *,
+ size_t),
+ int (*fpost_parse) (netsnmp_session *,
+ netsnmp_pdu *, int),
+ int (*fbuild) (netsnmp_session *,
+ netsnmp_pdu *, u_char *,
+ size_t *),
+ int (*frbuild) (netsnmp_session *,
+ netsnmp_pdu *, u_char **,
+ size_t *, size_t *),
+ int (*fcheck) (u_char *, size_t));
+
+ /*
+ * provided for backwards compatability. Don't use these functions.
+ * See snmp_debug.h and snmp_debug.c instead.
+ */
+
+ NETSNMP_IMPORT
+ void snmp_set_do_debugging(int);
+ NETSNMP_IMPORT
+ int snmp_get_do_debugging(void);
+
+
+ NETSNMP_IMPORT
+ void netsnmp_sess_log_error(int priority,
+ const char *prog_string,
+ netsnmp_session * ss);
+ const char * snmp_pdu_type(int type);
+
+ /*
+ * Return the netsnmp_transport structure associated with the given opaque
+ * pointer.
+ */
+
+ NETSNMP_IMPORT
+ struct netsnmp_transport_s *snmp_sess_transport(void *);
+ void snmp_sess_transport_set(void *,
+ struct netsnmp_transport_s *);
+
+ NETSNMP_IMPORT int
+ netsnmp_sess_config_transport(struct netsnmp_container_s *transport_configuration,
+ struct netsnmp_transport_s *transport);
+
+ NETSNMP_IMPORT int
+ netsnmp_sess_config_and_open_transport(netsnmp_session *in_session,
+ struct netsnmp_transport_s *transport);
+
+ /*
+ * EXTENDED SESSION API ------------------------------------------
+ *
+ * snmp_sess_add_ex, snmp_sess_add, snmp_add
+ *
+ * Analogous to snmp_open family of functions, but taking an
+ * netsnmp_transport pointer as an extra argument. Unlike snmp_open et
+ * al. it doesn't attempt to interpret the in_session->peername as a
+ * transport endpoint specifier, but instead uses the supplied transport.
+ * JBPN
+ *
+ */
+
+ void *snmp_sess_add_ex(netsnmp_session *,
+ struct netsnmp_transport_s *,
+ int (*fpre_parse) (netsnmp_session *,
+ struct
+ netsnmp_transport_s
+ *, void *, int),
+ int (*fparse) (netsnmp_session *,
+ struct snmp_pdu *,
+ u_char *, size_t),
+ int (*fpost_parse) (netsnmp_session *,
+ struct snmp_pdu *,
+ int),
+ int (*fbuild) (netsnmp_session *,
+ struct snmp_pdu *,
+ u_char *, size_t *),
+ int (*frbuild) (netsnmp_session *,
+ struct snmp_pdu *,
+ u_char **, size_t *,
+ size_t *),
+ int (*fcheck) (u_char *, size_t),
+ netsnmp_pdu *(*fcreate_pdu) (struct
+ netsnmp_transport_s
+ *,
+ void *,
+ size_t));
+
+ void *snmp_sess_add(netsnmp_session *,
+ struct netsnmp_transport_s *,
+ int (*fpre_parse) (netsnmp_session *,
+ struct
+ netsnmp_transport_s *,
+ void *, int),
+ int (*fpost_parse) (netsnmp_session *,
+ netsnmp_pdu *, int));
+
+ NETSNMP_IMPORT
+ netsnmp_session *snmp_add(netsnmp_session *,
+ struct netsnmp_transport_s *,
+ int (*fpre_parse) (netsnmp_session *,
+ struct netsnmp_transport_s
+ *, void *, int),
+ int (*fpost_parse) (netsnmp_session *,
+ netsnmp_pdu *, int));
+ NETSNMP_IMPORT
+ netsnmp_session *snmp_add_full(netsnmp_session * in_session,
+ struct netsnmp_transport_s *transport,
+ int (*fpre_parse) (netsnmp_session *,
+ struct
+ netsnmp_transport_s
+ *, void *, int),
+ int (*fparse) (netsnmp_session *,
+ netsnmp_pdu *, u_char *,
+ size_t),
+ int (*fpost_parse) (netsnmp_session *,
+ netsnmp_pdu *, int),
+ int (*fbuild) (netsnmp_session *,
+ netsnmp_pdu *, u_char *,
+ size_t *),
+ int (*frbuild) (netsnmp_session *,
+ netsnmp_pdu *,
+ u_char **, size_t *,
+ size_t *),
+ int (*fcheck) (u_char *, size_t),
+ netsnmp_pdu *(*fcreate_pdu) (struct
+ netsnmp_transport_s
+ *, void *,
+ size_t)
+ );
+ /*
+ * end single session API
+ */
+
+ /*
+ * generic statistic counters
+ */
+
+ /*
+ * snmpv3 statistics
+ */
+
+ /*
+ * mpd stats
+ */
+#define STAT_SNMPUNKNOWNSECURITYMODELS 0
+#define STAT_SNMPINVALIDMSGS 1
+#define STAT_SNMPUNKNOWNPDUHANDLERS 2
+#define STAT_MPD_STATS_START STAT_SNMPUNKNOWNSECURITYMODELS
+#define STAT_MPD_STATS_END STAT_SNMPUNKNOWNPDUHANDLERS
+
+ /*
+ * usm stats
+ */
+#define STAT_USMSTATSUNSUPPORTEDSECLEVELS 3
+#define STAT_USMSTATSNOTINTIMEWINDOWS 4
+#define STAT_USMSTATSUNKNOWNUSERNAMES 5
+#define STAT_USMSTATSUNKNOWNENGINEIDS 6
+#define STAT_USMSTATSWRONGDIGESTS 7
+#define STAT_USMSTATSDECRYPTIONERRORS 8
+#define STAT_USM_STATS_START STAT_USMSTATSUNSUPPORTEDSECLEVELS
+#define STAT_USM_STATS_END STAT_USMSTATSDECRYPTIONERRORS
+
+ /*
+ * snmp counters
+ */
+#define STAT_SNMPINPKTS 9
+#define STAT_SNMPOUTPKTS 10
+#define STAT_SNMPINBADVERSIONS 11
+#define STAT_SNMPINBADCOMMUNITYNAMES 12
+#define STAT_SNMPINBADCOMMUNITYUSES 13
+#define STAT_SNMPINASNPARSEERRS 14
+ /*
+ * #define STAT_SNMPINBADTYPES 15
+ */
+#define STAT_SNMPINTOOBIGS 16
+#define STAT_SNMPINNOSUCHNAMES 17
+#define STAT_SNMPINBADVALUES 18
+#define STAT_SNMPINREADONLYS 19
+#define STAT_SNMPINGENERRS 20
+#define STAT_SNMPINTOTALREQVARS 21
+#define STAT_SNMPINTOTALSETVARS 22
+#define STAT_SNMPINGETREQUESTS 23
+#define STAT_SNMPINGETNEXTS 24
+#define STAT_SNMPINSETREQUESTS 25
+#define STAT_SNMPINGETRESPONSES 26
+#define STAT_SNMPINTRAPS 27
+#define STAT_SNMPOUTTOOBIGS 28
+#define STAT_SNMPOUTNOSUCHNAMES 29
+#define STAT_SNMPOUTBADVALUES 30
+ /*
+ * #define STAT_SNMPOUTREADONLYS 31
+ */
+#define STAT_SNMPOUTGENERRS 32
+#define STAT_SNMPOUTGETREQUESTS 33
+#define STAT_SNMPOUTGETNEXTS 34
+#define STAT_SNMPOUTSETREQUESTS 35
+#define STAT_SNMPOUTGETRESPONSES 36
+#define STAT_SNMPOUTTRAPS 37
+ /*
+ * AUTHTRAPENABLE 38
+ */
+#define STAT_SNMPSILENTDROPS 39
+#define STAT_SNMPPROXYDROPS 40
+#define STAT_SNMP_STATS_START STAT_SNMPINPKTS
+#define STAT_SNMP_STATS_END STAT_SNMPPROXYDROPS
+
+ /*
+ * target mib counters
+ */
+#define STAT_SNMPUNAVAILABLECONTEXTS 41
+#define STAT_SNMPUNKNOWNCONTEXTS 42
+#define STAT_TARGET_STATS_START STAT_SNMPUNAVAILABLECONTEXTS
+#define STAT_TARGET_STATS_END STAT_SNMPUNKNOWNCONTEXTS
+
+ /*
+ * TSM counters
+ */
+#define STAT_TSM_SNMPTSMINVALIDCACHES 43
+#define STAT_TSM_SNMPTSMINADEQUATESECURITYLEVELS 44
+#define STAT_TSM_SNMPTSMUNKNOWNPREFIXES 45
+#define STAT_TSM_SNMPTSMINVALIDPREFIXES 46
+#define STAT_TSM_STATS_START STAT_TSM_SNMPTSMINVALIDCACHES
+#define STAT_TSM_STATS_END STAT_TSM_SNMPTSMINVALIDPREFIXES
+
+ /*
+ * TLSTM counters
+ */
+#define STAT_TLSTM_SNMPTLSTMSESSIONOPENS 47
+#define STAT_TLSTM_SNMPTLSTMSESSIONCLIENTCLOSES 48
+#define STAT_TLSTM_SNMPTLSTMSESSIONOPENERRORS 49
+#define STAT_TLSTM_SNMPTLSTMSESSIONACCEPTS 50
+#define STAT_TLSTM_SNMPTLSTMSESSIONSERVERCLOSES 51
+#define STAT_TLSTM_SNMPTLSTMSESSIONNOSESSIONS 52
+#define STAT_TLSTM_SNMPTLSTMSESSIONINVALIDCLIENTCERTIFICATES 53
+#define STAT_TLSTM_SNMPTLSTMSESSIONUNKNOWNSERVERCERTIFICATE 54
+#define STAT_TLSTM_SNMPTLSTMSESSIONINVALIDSERVERCERTIFICATES 55
+#define STAT_TLSTM_SNMPTLSTMSESSIONINVALIDCACHES 56
+
+#define STAT_TLSTM_STATS_START STAT_TLSTM_SNMPTLSTMSESSIONOPENS
+#define STAT_TLSTM_STATS_END STAT_TLSTM_SNMPTLSTMSESSIONINVALIDCACHES
+
+ /* this previously was end+1; don't know why the +1 is needed;
+ XXX: check the code */
+#define NETSNMP_STAT_MAX_STATS (STAT_TLSTM_STATS_END+1)
+/** backwards compatability */
+#define MAX_STATS NETSNMP_STAT_MAX_STATS
+
+ /*
+ * Internal: The list of active/open sessions.
+ */
+ struct session_list {
+ struct session_list *next;
+ netsnmp_session *session;
+ netsnmp_transport *transport;
+ struct snmp_internal_session *internal;
+ };
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* SNMP_API_H */