diff options
Diffstat (limited to 'include/net-snmp/library/snmp.h')
-rw-r--r-- | include/net-snmp/library/snmp.h | 360 |
1 files changed, 360 insertions, 0 deletions
diff --git a/include/net-snmp/library/snmp.h b/include/net-snmp/library/snmp.h new file mode 100644 index 0000000..f5978c6 --- /dev/null +++ b/include/net-snmp/library/snmp.h @@ -0,0 +1,360 @@ +#ifndef SNMP_H +#define SNMP_H + +#ifdef __cplusplus +extern "C" { +#endif + /* + * Definitions for the Simple Network Management Protocol (RFC 1067). + * + * + */ +/*********************************************************** + Copyright 1988, 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. +******************************************************************/ + + +#define SNMP_PORT 161 /* standard UDP port for SNMP agents + * to receive requests messages */ +#define SNMP_TRAP_PORT 162 /* standard UDP port for SNMP + * managers to receive notificaion + * (trap and inform) messages */ + +#define SNMP_MAX_LEN 1500 /* typical maximum message size */ +#define SNMP_MIN_MAX_LEN 484 /* minimum maximum message size */ + + /* + * SNMP versions + */ + /* + * There currently exists the following SNMP versions. + * * (Note that only SNMPv1 is in widespread usage, and this code supports + * * only SNMPv1, SNMPv2c, and SNMPv3. + * * + * * SNMPv1 - (full) the original version, defined by RFC 1157 + * * SNMPsec - (historic) the first attempt to add strong security + * * to SNMPv1, defined by RFCs 1351, 1352, and 1353. + * * SNMPv2p - (historic) party-based SNMP, which was another + * * attempt to add strong security to SNMP, defined + * * by RFCs 1441, 1445, 1446, 1448, and 1449. + * * SNMPv2c - (experimental) community string-based SNMPv2, + * * which was an attempt to combine the protocol + * * operations of SNMPv2 with the security of + * * SNMPv1, defined by RFCs 1901, 1905, and 1906. + * * SNMPv2u - (experimental) user-based SNMPv2, which provided + * * security based on user names and protocol + * * operations of SNMPv2, defined by RFCs 1905, + * * 1909, and 1910. + * * SNMPv2* (or SNMPv2star) - (experimental) an attempt to add the + * * best features of SNMPv2p and SNMPv2u, defined + * * by unpublished documents found at WEB site + * * owned by SNMP Research (a leading SNMP vendor) + * * SNMPv3 - the current attempt by the IETF working group to merge + * * the SNMPv2u and SNMPv2* proposals into a more widly + * * accepted SNMPv3. It is defined by not yet published + * * documents of the IETF SNMPv3 WG. + * * + * * SNMPv1, SNMPv2c, SNMPv2u, and SNMPv3 messages have a common + * * form, which is an ASN.1 sequence containing a message version + * * field, followed by version dependent fields. + * * SNMPsec, SNMPv2p, and SNMPv2* messages have a common form, + * * which is a tagged ASN.1 context specific sequence containing + * * message dependent fields. + * * + * * In the #defines for the message versions below, the value + * * for SNMPv1, SNMPv2c, SNMPv2u, and SNMPv3 messages is the + * * value of the message version field. Since SNMPsec, SNMPv2p, + * * and SNMPv2* messages do not have a message version field, + * * the value in the defines for them is choosen to be a large + * * arbitrary number. + * * + * * Note that many of the version ID's are defined below purely for + * * documentational purposes. At this point the only protocol planned + * * for future implementations is SNMP3, as the other v2 protocols will + * * not be supported by the IETF (ie, v2u, v2sec, v2star) or used by + * * the snmp community at large (at the time of this writing). + */ + + /* + * versions based on version field + */ +#ifndef NETSNMP_DISABLE_SNMPV1 +#define SNMP_VERSION_1 0 +#endif +#ifndef NETSNMP_DISABLE_SNMPV2C +#define SNMP_VERSION_2c 1 +#endif +#define SNMP_VERSION_2u 2 /* not (will never be) supported by this code */ +#define SNMP_VERSION_3 3 + + /* + * versions not based on a version field + */ +#define SNMP_VERSION_sec 128 /* not (will never be) supported by this code */ +#define SNMP_VERSION_2p 129 /* no longer supported by this code (> 4.0) */ +#define SNMP_VERSION_2star 130 /* not (will never be) supported by this code */ + + /* + * PDU types in SNMPv1, SNMPsec, SNMPv2p, SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 + */ +#define SNMP_MSG_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0) /* a0=160 */ +#define SNMP_MSG_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1) /* a1=161 */ +#define SNMP_MSG_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2) /* a2=162 */ +#ifndef NETSNMP_NO_WRITE_SUPPORT +#define SNMP_MSG_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) /* a3=163 */ +#endif /* !NETSNMP_NO_WRITE_SUPPORT */ + + /* + * PDU types in SNMPv1 and SNMPsec + */ +#define SNMP_MSG_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) /* a4=164 */ + + /* + * PDU types in SNMPv2p, SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 + */ +#define SNMP_MSG_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5) /* a5=165 */ +#define SNMP_MSG_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6) /* a6=166 */ +#define SNMP_MSG_TRAP2 (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7) /* a7=167 */ + + /* + * PDU types in SNMPv2u, SNMPv2*, and SNMPv3 + */ +#define SNMP_MSG_REPORT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x8) /* a8=168 */ + +#ifndef NETSNMP_NO_WRITE_SUPPORT + /* + * internal modes that should never be used by the protocol for the + * pdu type. + * + * All modes < 128 are reserved for SET requests. + */ +#define SNMP_MSG_INTERNAL_SET_BEGIN -1 +#define SNMP_MSG_INTERNAL_SET_RESERVE1 0 /* these should match snmp.h */ +#define SNMP_MSG_INTERNAL_SET_RESERVE2 1 +#define SNMP_MSG_INTERNAL_SET_ACTION 2 +#define SNMP_MSG_INTERNAL_SET_COMMIT 3 +#define SNMP_MSG_INTERNAL_SET_FREE 4 +#define SNMP_MSG_INTERNAL_SET_UNDO 5 +#define SNMP_MSG_INTERNAL_SET_MAX 6 + +#define SNMP_MSG_INTERNAL_CHECK_VALUE 17 +#define SNMP_MSG_INTERNAL_ROW_CREATE 18 +#define SNMP_MSG_INTERNAL_UNDO_SETUP 19 +#define SNMP_MSG_INTERNAL_SET_VALUE 20 +#define SNMP_MSG_INTERNAL_CHECK_CONSISTENCY 21 +#define SNMP_MSG_INTERNAL_UNDO_SET 22 +#define SNMP_MSG_INTERNAL_COMMIT 23 +#define SNMP_MSG_INTERNAL_UNDO_COMMIT 24 +#define SNMP_MSG_INTERNAL_IRREVERSIBLE_COMMIT 25 +#define SNMP_MSG_INTERNAL_UNDO_CLEANUP 26 +#endif /* !NETSNMP_NO_WRITE_SUPPORT */ + + /* + * modes > 128 for non sets. + * Note that 160-168 overlap with SNMP ASN1 pdu types + */ +#define SNMP_MSG_INTERNAL_PRE_REQUEST 128 +#define SNMP_MSG_INTERNAL_OBJECT_LOOKUP 129 +#define SNMP_MSG_INTERNAL_POST_REQUEST 130 +#define SNMP_MSG_INTERNAL_GET_STASH 131 + + /* + * test for member of Confirmed Class i.e., reportable + */ +#ifdef NETSNMP_NO_WRITE_SUPPORT +#define SNMP_CMD_CONFIRMED(c) (c == SNMP_MSG_INFORM || c == SNMP_MSG_GETBULK ||\ + c == SNMP_MSG_GETNEXT || c == SNMP_MSG_GET ) +#else /* !NETSNMP_NO_WRITE_SUPPORT */ +#define SNMP_CMD_CONFIRMED(c) (c == SNMP_MSG_INFORM || c == SNMP_MSG_GETBULK ||\ + c == SNMP_MSG_GETNEXT || c == SNMP_MSG_GET || \ + c == SNMP_MSG_SET ) +#endif /* !NETSNMP_NO_WRITE_SUPPORT */ + + /* + * Exception values for SNMPv2p, SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 + */ +#define SNMP_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x0) /* 80=128 */ +#define SNMP_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x1) /* 81=129 */ +#define SNMP_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x2) /* 82=130 */ + + /* + * Error codes (the value of the field error-status in PDUs) + */ + + /* + * in SNMPv1, SNMPsec, SNMPv2p, SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 PDUs + */ +#define SNMP_ERR_NOERROR (0) /* XXX Used only for PDUs? */ +#define SNMP_ERR_TOOBIG (1) +#define SNMP_ERR_NOSUCHNAME (2) +#define SNMP_ERR_BADVALUE (3) +#define SNMP_ERR_READONLY (4) +#define SNMP_ERR_GENERR (5) + + /* + * in SNMPv2p, SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 PDUs + */ +#define SNMP_ERR_NOACCESS (6) +#define SNMP_ERR_WRONGTYPE (7) +#define SNMP_ERR_WRONGLENGTH (8) +#define SNMP_ERR_WRONGENCODING (9) +#define SNMP_ERR_WRONGVALUE (10) +#define SNMP_ERR_NOCREATION (11) +#define SNMP_ERR_INCONSISTENTVALUE (12) +#define SNMP_ERR_RESOURCEUNAVAILABLE (13) +#define SNMP_ERR_COMMITFAILED (14) +#define SNMP_ERR_UNDOFAILED (15) +#define SNMP_ERR_AUTHORIZATIONERROR (16) +#define SNMP_ERR_NOTWRITABLE (17) + + /* + * in SNMPv2c, SNMPv2u, SNMPv2*, and SNMPv3 PDUs + */ +#define SNMP_ERR_INCONSISTENTNAME (18) + +#define MAX_SNMP_ERR 18 + +#define SNMP_VALIDATE_ERR(x) ( (x > MAX_SNMP_ERR) ? \ + SNMP_ERR_GENERR : \ + (x < SNMP_ERR_NOERROR) ? \ + SNMP_ERR_GENERR : \ + x ) + + /* + * values of the generic-trap field in trap PDUs + */ +#define SNMP_TRAP_COLDSTART (0) +#define SNMP_TRAP_WARMSTART (1) +#define SNMP_TRAP_LINKDOWN (2) +#define SNMP_TRAP_LINKUP (3) +#define SNMP_TRAP_AUTHFAIL (4) +#define SNMP_TRAP_EGPNEIGHBORLOSS (5) +#define SNMP_TRAP_ENTERPRISESPECIFIC (6) + + /* + * row status values + */ +#define SNMP_ROW_NONEXISTENT 0 +#define SNMP_ROW_ACTIVE 1 +#define SNMP_ROW_NOTINSERVICE 2 +#define SNMP_ROW_NOTREADY 3 +#define SNMP_ROW_CREATEANDGO 4 +#define SNMP_ROW_CREATEANDWAIT 5 +#define SNMP_ROW_DESTROY 6 + + /* + * row storage values + */ +#define SNMP_STORAGE_NONE 0 +#define SNMP_STORAGE_OTHER 1 +#define SNMP_STORAGE_VOLATILE 2 +#define SNMP_STORAGE_NONVOLATILE 3 +#define SNMP_STORAGE_PERMANENT 4 +#define SNMP_STORAGE_READONLY 5 + + /* + * message processing models + */ +#define SNMP_MP_MODEL_SNMPv1 0 +#define SNMP_MP_MODEL_SNMPv2c 1 +#define SNMP_MP_MODEL_SNMPv2u 2 +#define SNMP_MP_MODEL_SNMPv3 3 +#define SNMP_MP_MODEL_SNMPv2p 256 + + /* + * security values + */ +#define SNMP_SEC_MODEL_ANY 0 +#define SNMP_SEC_MODEL_SNMPv1 1 +#define SNMP_SEC_MODEL_SNMPv2c 2 +#define SNMP_SEC_MODEL_USM 3 +#define SNMP_SEC_MODEL_TSM 4 +#define SNMP_SEC_MODEL_SNMPv2p 256 + +#define SNMP_SEC_LEVEL_NOAUTH 1 +#define SNMP_SEC_LEVEL_AUTHNOPRIV 2 +#define SNMP_SEC_LEVEL_AUTHPRIV 3 + +#define SNMP_MSG_FLAG_AUTH_BIT 0x01 +#define SNMP_MSG_FLAG_PRIV_BIT 0x02 +#define SNMP_MSG_FLAG_RPRT_BIT 0x04 + + /* + * control PDU handling characteristics + */ +#define UCD_MSG_FLAG_RESPONSE_PDU 0x100 +#define UCD_MSG_FLAG_EXPECT_RESPONSE 0x200 +#define UCD_MSG_FLAG_FORCE_PDU_COPY 0x400 +#define UCD_MSG_FLAG_ALWAYS_IN_VIEW 0x800 +#define UCD_MSG_FLAG_PDU_TIMEOUT 0x1000 +#define UCD_MSG_FLAG_ONE_PASS_ONLY 0x2000 +#define UCD_MSG_FLAG_TUNNELED 0x4000 + + /* + * view status + */ +#define SNMP_VIEW_INCLUDED 1 +#define SNMP_VIEW_EXCLUDED 2 + + /* + * basic oid values + */ +#define SNMP_OID_INTERNET 1, 3, 6, 1 +#define SNMP_OID_ENTERPRISES SNMP_OID_INTERNET, 4, 1 +#define SNMP_OID_MIB2 SNMP_OID_INTERNET, 2, 1 +#define SNMP_OID_SNMPV2 SNMP_OID_INTERNET, 6 +#define SNMP_OID_SNMPMODULES SNMP_OID_SNMPV2, 3 + + /* + * lengths as defined by TCs + */ +#define SNMPADMINLENGTH 255 + + + NETSNMP_IMPORT + char *uptime_string(u_long, char *); + char *uptime_string_n(u_long, char *, size_t); + NETSNMP_IMPORT + void xdump(const void *, size_t, const char *); + NETSNMP_IMPORT + u_char *snmp_parse_var_op(u_char *, oid *, size_t *, u_char *, + size_t *, u_char **, size_t *); + NETSNMP_IMPORT + u_char *snmp_build_var_op(u_char *, oid *, size_t *, u_char, + size_t, u_char *, size_t *); + + +#ifdef NETSNMP_USE_REVERSE_ASNENCODING + int snmp_realloc_rbuild_var_op(u_char ** pkt, + size_t * pkt_len, + size_t * offset, + int allow_realloc, + const oid * name, + size_t * name_len, + u_char value_type, + u_char * value, + size_t value_length); +#endif + +#ifdef __cplusplus +} +#endif +#endif /* SNMP_H */ |