Annotation of src/usr.bin/snmp/snmp.h, Revision 1.1
1.1 ! martijn 1: /* $OpenBSD$ */
! 2:
! 3: /*
! 4: * Copyright (c) 2019 Martijn van Duren <martijn@openbsd.org>
! 5: * Copyright (c) 2007, 2008, 2012 Reyk Floeter <reyk@openbsd.org>
! 6: *
! 7: * Permission to use, copy, modify, and distribute this software for any
! 8: * purpose with or without fee is hereby granted, provided that the above
! 9: * copyright notice and this permission notice appear in all copies.
! 10: *
! 11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 15: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 16: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 17: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 18: */
! 19:
! 20: #ifndef SNMPD_SNMP_H
! 21: #define SNMPD_SNMP_H
! 22:
! 23: #include <sys/types.h>
! 24: #include <sys/queue.h>
! 25: #include <endian.h>
! 26:
! 27: #include <time.h>
! 28:
! 29: #define READ_BUF_SIZE 65535
! 30:
! 31: #define SNMP_MAX_OID_STRLEN 128 /* max size of the OID _string_ */
! 32:
! 33: /*
! 34: * SNMP BER types
! 35: */
! 36:
! 37: enum snmp_version {
! 38: SNMP_V1 = 0,
! 39: SNMP_V2C = 1, /* SNMPv2c */
! 40: SNMP_V3 = 3
! 41: };
! 42:
! 43: enum snmp_context {
! 44: SNMP_C_GETREQ = 0,
! 45: SNMP_C_GETNEXTREQ = 1,
! 46: SNMP_C_GETRESP = 2,
! 47: SNMP_C_SETREQ = 3,
! 48: SNMP_C_TRAP = 4,
! 49:
! 50: /* SNMPv2 */
! 51: SNMP_C_GETBULKREQ = 5,
! 52: SNMP_C_INFORMREQ = 6,
! 53: SNMP_C_TRAPV2 = 7,
! 54: SNMP_C_REPORT = 8
! 55: };
! 56:
! 57: enum snmp_application {
! 58: SNMP_T_IPADDR = 0,
! 59: SNMP_T_COUNTER32 = 1,
! 60: SNMP_T_GAUGE32 = 2,
! 61: SNMP_T_UNSIGNED32 = 2,
! 62: SNMP_T_TIMETICKS = 3,
! 63: SNMP_T_OPAQUE = 4,
! 64: SNMP_T_NSAPADDR = 5,
! 65: SNMP_T_COUNTER64 = 6,
! 66: SNMP_T_UINTEGER32 = 7
! 67: };
! 68:
! 69: enum snmp_generic_trap {
! 70: SNMP_TRAP_COLDSTART = 0,
! 71: SNMP_TRAP_WARMSTART = 1,
! 72: SNMP_TRAP_LINKDOWN = 2,
! 73: SNMP_TRAP_LINKUP = 3,
! 74: SNMP_TRAP_AUTHFAILURE = 4,
! 75: SNMP_TRAP_EGPNEIGHLOSS = 5,
! 76: SNMP_TRAP_ENTERPRISE = 6
! 77: };
! 78:
! 79: enum snmp_error {
! 80: SNMP_ERROR_NONE = 0,
! 81: SNMP_ERROR_TOOBIG = 1,
! 82: SNMP_ERROR_NOSUCHNAME = 2,
! 83: SNMP_ERROR_BADVALUE = 3,
! 84: SNMP_ERROR_READONLY = 4,
! 85: SNMP_ERROR_GENERR = 5,
! 86:
! 87: /* SNMPv2 */
! 88: SNMP_ERROR_NOACCESS = 6,
! 89: SNMP_ERROR_WRONGTYPE = 7,
! 90: SNMP_ERROR_WRONGLENGTH = 8,
! 91: SNMP_ERROR_WRONGENC = 9,
! 92: SNMP_ERROR_WRONGVALUE = 10,
! 93: SNMP_ERROR_NOCREATION = 11,
! 94: SNMP_ERROR_INCONVALUE = 12,
! 95: SNMP_ERROR_RESUNAVAIL = 13, /* EGAIN */
! 96: SNMP_ERROR_COMMITFAILED = 14,
! 97: SNMP_ERROR_UNDOFAILED = 15,
! 98: SNMP_ERROR_AUTHERROR = 16,
! 99: SNMP_ERROR_NOTWRITABLE = 17,
! 100: SNMP_ERROR_INCONNAME = 18
! 101: };
! 102:
! 103: enum snmp_security_model {
! 104: SNMP_SEC_ANY = 0,
! 105: SNMP_SEC_SNMPv1 = 1,
! 106: SNMP_SEC_SNMPv2c = 2,
! 107: SNMP_SEC_USM = 3,
! 108: SNMP_SEC_TSM = 4
! 109: };
! 110:
! 111: struct snmp_agent {
! 112: int fd;
! 113: enum snmp_version version;
! 114: char *community;
! 115: int timeout;
! 116: int retries;
! 117: };
! 118:
! 119: #define SNMP_MSGFLAG_AUTH 0x01
! 120: #define SNMP_MSGFLAG_PRIV 0x02
! 121: #define SNMP_MSGFLAG_SECMASK (SNMP_MSGFLAG_AUTH | SNMP_MSGFLAG_PRIV)
! 122: #define SNMP_MSGFLAG_REPORT 0x04
! 123:
! 124: #define SNMP_MAX_TIMEWINDOW 150 /* RFC3414 */
! 125:
! 126: struct snmp_agent *snmp_connect_v12(int, enum snmp_version, const char *);
! 127: void snmp_free_agent(struct snmp_agent *);
! 128: struct ber_element *
! 129: snmp_get(struct snmp_agent *agent, struct ber_oid *oid, size_t len);
! 130: struct ber_element *snmp_getnext(struct snmp_agent *, struct ber_oid *, size_t);
! 131: struct ber_element *
! 132: snmp_getbulk(struct snmp_agent *, struct ber_oid *, size_t, int, int);
! 133: int snmp_trap(struct snmp_agent *, struct timespec *, struct ber_oid *,
! 134: struct ber_element *);
! 135:
! 136: #endif /* SNMPD_SNMP_H */