1/** 2 * @file 3 * SNMP server options list 4 */ 5 6/* 7 * Copyright (c) 2015 Dirk Ziegelmeier 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without modification, 11 * are permitted provided that the following conditions are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright notice, 14 * this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 3. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 22 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 23 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 24 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 26 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 29 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 30 * OF SUCH DAMAGE. 31 * 32 * This file is part of the lwIP TCP/IP stack. 33 * 34 * Author: Dirk Ziegelmeier 35 * 36 */ 37#ifndef LWIP_HDR_SNMP_OPTS_H 38#define LWIP_HDR_SNMP_OPTS_H 39 40#include "lwip/opt.h" 41 42/** 43 * @defgroup snmp_opts Options 44 * @ingroup snmp 45 * @{ 46 */ 47 48/** 49 * LWIP_SNMP==1: This enables the lwIP SNMP agent. UDP must be available 50 * for SNMP transport. 51 * If you want to use your own SNMP agent, leave this disabled. 52 * To integrate MIB2 of an external agent, you need to enable 53 * LWIP_MIB2_CALLBACKS and MIB2_STATS. This will give you the callbacks 54 * and statistics counters you need to get MIB2 working. 55 */ 56#if !defined LWIP_SNMP || defined __DOXYGEN__ 57#define LWIP_SNMP 0 58#endif 59 60/** 61 * SNMP_USE_NETCONN: Use netconn API instead of raw API. 62 * Makes SNMP agent run in a worker thread, so blocking operations 63 * can be done in MIB calls. 64 */ 65#if !defined SNMP_USE_NETCONN || defined __DOXYGEN__ 66#define SNMP_USE_NETCONN 0 67#endif 68 69/** 70 * SNMP_USE_RAW: Use raw API. 71 * SNMP agent does not run in a worker thread, so blocking operations 72 * should not be done in MIB calls. 73 */ 74#if !defined SNMP_USE_RAW || defined __DOXYGEN__ 75#define SNMP_USE_RAW 1 76#endif 77 78#if SNMP_USE_NETCONN && SNMP_USE_RAW 79#error SNMP stack can use only one of the APIs {raw, netconn} 80#endif 81 82#if LWIP_SNMP && !SNMP_USE_NETCONN && !SNMP_USE_RAW 83#error SNMP stack needs a receive API and UDP {raw, netconn} 84#endif 85 86#if SNMP_USE_NETCONN 87/** 88 * SNMP_STACK_SIZE: Stack size of SNMP netconn worker thread 89 */ 90#if !defined SNMP_STACK_SIZE || defined __DOXYGEN__ 91#define SNMP_STACK_SIZE DEFAULT_THREAD_STACKSIZE 92#endif 93 94/** 95 * SNMP_THREAD_PRIO: SNMP netconn worker thread priority 96 */ 97#if !defined SNMP_THREAD_PRIO || defined __DOXYGEN__ 98#define SNMP_THREAD_PRIO DEFAULT_THREAD_PRIO 99#endif 100#endif /* SNMP_USE_NETCONN */ 101 102/** 103 * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap 104 * destination is required 105 */ 106#if !defined SNMP_TRAP_DESTINATIONS || defined __DOXYGEN__ 107#define SNMP_TRAP_DESTINATIONS 1 108#endif 109 110/** 111 * Only allow SNMP write actions that are 'safe' (e.g. disabling netifs is not 112 * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). 113 * Unsafe requests are disabled by default! 114 */ 115#if !defined SNMP_SAFE_REQUESTS || defined __DOXYGEN__ 116#define SNMP_SAFE_REQUESTS 1 117#endif 118 119/** 120 * The maximum length of strings used. 121 */ 122#if !defined SNMP_MAX_OCTET_STRING_LEN || defined __DOXYGEN__ 123#define SNMP_MAX_OCTET_STRING_LEN 127 124#endif 125 126/** 127 * The maximum number of Sub ID's inside an object identifier. 128 * Indirectly this also limits the maximum depth of SNMP tree. 129 */ 130#if !defined SNMP_MAX_OBJ_ID_LEN || defined __DOXYGEN__ 131#define SNMP_MAX_OBJ_ID_LEN 50 132#endif 133 134#if !defined SNMP_MAX_VALUE_SIZE || defined __DOXYGEN__ 135/** 136 * The minimum size of a value. 137 */ 138#define SNMP_MIN_VALUE_SIZE (2 * sizeof(u32_t*)) /* size required to store the basic types (8 bytes for counter64) */ 139/** 140 * The maximum size of a value. 141 */ 142#define SNMP_MAX_VALUE_SIZE LWIP_MAX(LWIP_MAX((SNMP_MAX_OCTET_STRING_LEN), sizeof(u32_t)*(SNMP_MAX_OBJ_ID_LEN)), SNMP_MIN_VALUE_SIZE) 143#endif 144 145/** 146 * The snmp read-access community. Used for write-access and traps, too 147 * unless SNMP_COMMUNITY_WRITE or SNMP_COMMUNITY_TRAP are enabled, respectively. 148 */ 149#if !defined SNMP_COMMUNITY || defined __DOXYGEN__ 150#define SNMP_COMMUNITY "public" 151#endif 152 153/** 154 * The snmp write-access community. 155 * Set this community to "" in order to disallow any write access. 156 */ 157#if !defined SNMP_COMMUNITY_WRITE || defined __DOXYGEN__ 158#define SNMP_COMMUNITY_WRITE "private" 159#endif 160 161/** 162 * The snmp community used for sending traps. 163 */ 164#if !defined SNMP_COMMUNITY_TRAP || defined __DOXYGEN__ 165#define SNMP_COMMUNITY_TRAP "public" 166#endif 167 168/** 169 * The maximum length of community string. 170 * If community names shall be adjusted at runtime via snmp_set_community() calls, 171 * enter here the possible maximum length (+1 for terminating null character). 172 */ 173#if !defined SNMP_MAX_COMMUNITY_STR_LEN || defined __DOXYGEN__ 174#define SNMP_MAX_COMMUNITY_STR_LEN LWIP_MAX(LWIP_MAX(sizeof(SNMP_COMMUNITY), sizeof(SNMP_COMMUNITY_WRITE)), sizeof(SNMP_COMMUNITY_TRAP)) 175#endif 176 177/** 178 * The OID identifiying the device. This may be the enterprise OID itself or any OID located below it in tree. 179 */ 180#if !defined SNMP_DEVICE_ENTERPRISE_OID || defined __DOXYGEN__ 181#define SNMP_LWIP_ENTERPRISE_OID 26381 182/** 183 * IANA assigned enterprise ID for lwIP is 26381 184 * @see http://www.iana.org/assignments/enterprise-numbers 185 * 186 * @note this enterprise ID is assigned to the lwIP project, 187 * all object identifiers living under this ID are assigned 188 * by the lwIP maintainers! 189 * @note don't change this define, use snmp_set_device_enterprise_oid() 190 * 191 * If you need to create your own private MIB you'll need 192 * to apply for your own enterprise ID with IANA: 193 * http://www.iana.org/numbers.html 194 */ 195#define SNMP_DEVICE_ENTERPRISE_OID {1, 3, 6, 1, 4, 1, SNMP_LWIP_ENTERPRISE_OID} 196/** 197 * Length of SNMP_DEVICE_ENTERPRISE_OID 198 */ 199#define SNMP_DEVICE_ENTERPRISE_OID_LEN 7 200#endif 201 202/** 203 * SNMP_DEBUG: Enable debugging for SNMP messages. 204 */ 205#if !defined SNMP_DEBUG || defined __DOXYGEN__ 206#define SNMP_DEBUG LWIP_DBG_OFF 207#endif 208 209/** 210 * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. 211 */ 212#if !defined SNMP_MIB_DEBUG || defined __DOXYGEN__ 213#define SNMP_MIB_DEBUG LWIP_DBG_OFF 214#endif 215 216/** 217 * Indicates if the MIB2 implementation of LWIP SNMP stack is used. 218 */ 219#if !defined SNMP_LWIP_MIB2 || defined __DOXYGEN__ 220#define SNMP_LWIP_MIB2 LWIP_SNMP 221#endif 222 223/** 224 * Value return for sysDesc field of MIB2. 225 */ 226#if !defined SNMP_LWIP_MIB2_SYSDESC || defined __DOXYGEN__ 227#define SNMP_LWIP_MIB2_SYSDESC "lwIP" 228#endif 229 230/** 231 * Value return for sysName field of MIB2. 232 * To make sysName field settable, call snmp_mib2_set_sysname() to provide the necessary buffers. 233 */ 234#if !defined SNMP_LWIP_MIB2_SYSNAME || defined __DOXYGEN__ 235#define SNMP_LWIP_MIB2_SYSNAME "FQDN-unk" 236#endif 237 238/** 239 * Value return for sysContact field of MIB2. 240 * To make sysContact field settable, call snmp_mib2_set_syscontact() to provide the necessary buffers. 241 */ 242#if !defined SNMP_LWIP_MIB2_SYSCONTACT || defined __DOXYGEN__ 243#define SNMP_LWIP_MIB2_SYSCONTACT "" 244#endif 245 246/** 247 * Value return for sysLocation field of MIB2. 248 * To make sysLocation field settable, call snmp_mib2_set_syslocation() to provide the necessary buffers. 249 */ 250#if !defined SNMP_LWIP_MIB2_SYSLOCATION || defined __DOXYGEN__ 251#define SNMP_LWIP_MIB2_SYSLOCATION "" 252#endif 253 254/** 255 * This value is used to limit the repetitions processed in GetBulk requests (value == 0 means no limitation). 256 * This may be useful to limit the load for a single request. 257 * According to SNMP RFC 1905 it is allowed to not return all requested variables from a GetBulk request if system load would be too high. 258 * so the effect is that the client will do more requests to gather all data. 259 * For the stack this could be useful in case that SNMP processing is done in TCP/IP thread. In this situation a request with many 260 * repetitions could block the thread for a longer time. Setting limit here will keep the stack more responsive. 261 */ 262#if !defined SNMP_LWIP_GETBULK_MAX_REPETITIONS || defined __DOXYGEN__ 263#define SNMP_LWIP_GETBULK_MAX_REPETITIONS 0 264#endif 265 266/** 267 * @} 268 */ 269 270/* 271 ------------------------------------ 272 ---------- SNMPv3 options ---------- 273 ------------------------------------ 274*/ 275 276/** 277 * LWIP_SNMP_V3==1: This enables EXPERIMENTAL SNMPv3 support. LWIP_SNMP must 278 * also be enabled. 279 * THIS IS UNDER DEVELOPMENT AND SHOULD NOT BE ENABLED IN PRODUCTS. 280 */ 281#ifndef LWIP_SNMP_V3 282#define LWIP_SNMP_V3 0 283#endif 284 285#ifndef LWIP_SNMP_V3_MBEDTLS 286#define LWIP_SNMP_V3_MBEDTLS LWIP_SNMP_V3 287#endif 288 289#ifndef LWIP_SNMP_V3_CRYPTO 290#define LWIP_SNMP_V3_CRYPTO LWIP_SNMP_V3_MBEDTLS 291#endif 292 293#ifndef LWIP_SNMP_CONFIGURE_VERSIONS 294#define LWIP_SNMP_CONFIGURE_VERSIONS 0 295#endif 296 297#endif /* LWIP_HDR_SNMP_OPTS_H */ 298