1 /* $OpenBSD: snmp.h,v 1.18 2021/10/21 14:33:13 martijn Exp $ */ 2 3 /* 4 * Copyright (c) 2007, 2008, 2012 Reyk Floeter <reyk@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef SNMPD_SNMP_H 20 #define SNMPD_SNMP_H 21 22 #include <sys/types.h> 23 #include <endian.h> 24 25 /* 26 * SNMP IMSG interface 27 */ 28 29 #define SNMP_MAX_OID_STRLEN 128 /* max size of the OID _string_ */ 30 31 enum snmp_type { 32 SNMP_IPADDR = 0, 33 SNMP_COUNTER32 = 1, 34 SNMP_GAUGE32 = 2, 35 SNMP_UNSIGNED32 = 2, 36 SNMP_TIMETICKS = 3, 37 SNMP_OPAQUE = 4, 38 SNMP_NSAPADDR = 5, 39 SNMP_COUNTER64 = 6, 40 SNMP_UINTEGER32 = 7, 41 42 SNMP_INTEGER32 = 100, 43 SNMP_BITSTRING = 101, 44 SNMP_OCTETSTRING = 102, 45 SNMP_NULL = 103, 46 SNMP_OBJECT = 104 47 }; 48 49 enum snmp_imsg_ctl { 50 IMSG_SNMP_DUMMY = 1000, /* something that works everywhere */ 51 IMSG_SNMP_ELEMENT, 52 IMSG_SNMP_END, 53 IMSG_SNMP_LOCK, /* enable restricted mode */ 54 }; 55 56 struct snmp_imsg_hdr { 57 u_int32_t imsg_type; 58 u_int16_t imsg_len; 59 u_int16_t imsg_flags; 60 u_int32_t imsg_peerid; 61 u_int32_t imsg_pid; 62 }; 63 64 struct snmp_imsg { 65 char snmp_oid[SNMP_MAX_OID_STRLEN]; 66 u_int8_t snmp_type; 67 u_int16_t snmp_len; 68 }; 69 70 /* 71 * SNMP BER types 72 */ 73 74 enum snmp_version { 75 SNMP_V1 = 0, 76 SNMP_V2 = 1, /* SNMPv2c */ 77 SNMP_V3 = 3 78 }; 79 80 enum snmp_pdutype { 81 SNMP_C_GETREQ = 0, 82 SNMP_C_GETNEXTREQ = 1, 83 SNMP_C_RESPONSE = 2, 84 SNMP_C_SETREQ = 3, 85 SNMP_C_TRAP = 4, 86 87 /* SNMPv2 */ 88 SNMP_C_GETBULKREQ = 5, 89 SNMP_C_INFORMREQ = 6, 90 SNMP_C_TRAPV2 = 7, 91 SNMP_C_REPORT = 8 92 }; 93 94 enum snmp_application { 95 SNMP_T_IPADDR = 0, 96 SNMP_T_COUNTER32 = 1, 97 SNMP_T_GAUGE32 = 2, 98 SNMP_T_UNSIGNED32 = 2, 99 SNMP_T_TIMETICKS = 3, 100 SNMP_T_OPAQUE = 4, 101 SNMP_T_NSAPADDR = 5, 102 SNMP_T_COUNTER64 = 6, 103 SNMP_T_UINTEGER32 = 7 104 }; 105 106 enum snmp_generic_trap { 107 SNMP_TRAP_COLDSTART = 0, 108 SNMP_TRAP_WARMSTART = 1, 109 SNMP_TRAP_LINKDOWN = 2, 110 SNMP_TRAP_LINKUP = 3, 111 SNMP_TRAP_AUTHFAILURE = 4, 112 SNMP_TRAP_EGPNEIGHLOSS = 5, 113 SNMP_TRAP_ENTERPRISE = 6 114 }; 115 116 enum snmp_error { 117 SNMP_ERROR_NONE = 0, 118 SNMP_ERROR_TOOBIG = 1, 119 SNMP_ERROR_NOSUCHNAME = 2, 120 SNMP_ERROR_BADVALUE = 3, 121 SNMP_ERROR_READONLY = 4, 122 SNMP_ERROR_GENERR = 5, 123 124 /* SNMPv2 */ 125 SNMP_ERROR_NOACCESS = 6, 126 SNMP_ERROR_WRONGTYPE = 7, 127 SNMP_ERROR_WRONGLENGTH = 8, 128 SNMP_ERROR_WRONGENC = 9, 129 SNMP_ERROR_WRONGVALUE = 10, 130 SNMP_ERROR_NOCREATION = 11, 131 SNMP_ERROR_INCONVALUE = 12, 132 SNMP_ERROR_RESUNAVAIL = 13, /* EGAIN */ 133 SNMP_ERROR_COMMITFAILED = 14, 134 SNMP_ERROR_UNDOFAILED = 15, 135 SNMP_ERROR_AUTHERROR = 16, 136 SNMP_ERROR_NOTWRITABLE = 17, 137 SNMP_ERROR_INCONNAME = 18 138 }; 139 140 enum snmp_security_model { 141 SNMP_SEC_ANY = 0, 142 SNMP_SEC_SNMPv1 = 1, 143 SNMP_SEC_SNMPv2c = 2, 144 SNMP_SEC_USM = 3, 145 SNMP_SEC_TSM = 4 146 }; 147 148 #define SNMP_MSGFLAG_AUTH 0x01 149 #define SNMP_MSGFLAG_PRIV 0x02 150 #define SNMP_MSGFLAG_SECMASK (SNMP_MSGFLAG_AUTH | SNMP_MSGFLAG_PRIV) 151 #define SNMP_MSGFLAG_REPORT 0x04 152 153 #define SNMP_MAX_TIMEWINDOW 150 /* RFC3414 */ 154 155 #endif /* SNMPD_SNMP_H */ 156