| /* |
| * |
| * Copyright (c) 2020 Project CHIP Authors |
| * Copyright (c) 2013-2018 Nest Labs, Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** |
| * @file |
| * This file defines default compile-time configuration constants |
| * for the CHIP InetLayer, an Internet Protocol communications |
| * abstraction layer. |
| * |
| * Package integrators that wish to override these values should |
| * either use preprocessor definitions or create a project- |
| * specific InetProjectConfig.h header and then assert |
| * HAVE_INETPROJECTCONFIG_H via the package configuration tool |
| * via --with-chip-inet-project-includes=DIR where DIR is the |
| * directory that contains the header. |
| * |
| * NOTE WELL: On some platforms, this header is included by C-language programs. |
| * |
| */ |
| |
| #pragma once |
| |
| #if CHIP_HAVE_CONFIG_H |
| #include <inet/InetBuildConfig.h> |
| #endif |
| |
| /*--- Include configuration headers ---*/ |
| #include <system/SystemConfig.h> |
| |
| /* |
| * If the CHIP_SYSTEM_CONFIG_TRANSFER_INETLAYER_PROJECT_CONFIGURATION option is not applicable, then the "InetProjectConfig.h" |
| * header was not included by <system/SystemConfig.h> and therefore it must be included here. |
| */ |
| #if !CHIP_SYSTEM_CONFIG_TRANSFER_INETLAYER_PROJECT_CONFIGURATION |
| |
| /* Include a project-specific configuration file, if defined. |
| * |
| * An application or module that incorporates chip can define a project configuration |
| * file to override standard Inet Layer configuration with application-specific values. |
| * The project config file is typically located outside the Openchip source tree, |
| * alongside the source code for the application. |
| */ |
| #ifdef INET_PROJECT_CONFIG_INCLUDE |
| #include INET_PROJECT_CONFIG_INCLUDE |
| #endif // INET_PROJECT_CONFIG_INCLUDE |
| |
| #endif // !CHIP_SYSTEM_CONFIG_TRANSFER_INETLAYER_PROJECT_CONFIGURATION |
| |
| /* Include a platform-specific configuration file, if defined. |
| * |
| * A platform configuration file contains overrides to standard Inet Layer configuration |
| * that are specific to the platform or OS on which chip is running. It is typically |
| * provided as apart of an adaptation layer that adapts Openchip to the target |
| * environment. This adaptation layer may be included in the Openchip source tree |
| * itself or implemented externally. |
| */ |
| #ifdef INET_PLATFORM_CONFIG_INCLUDE |
| #include INET_PLATFORM_CONFIG_INCLUDE |
| #endif |
| |
| // clang-format off |
| |
| /** |
| * @def INET_CONFIG_MAX_IP_AND_UDP_HEADER_SIZE |
| * |
| * @brief |
| * The maximum space required for IPv6 and UDP headers. |
| * Useful when ensuring a chip message will not exceed a UDP MTU. |
| * |
| */ |
| #ifndef INET_CONFIG_MAX_IP_AND_UDP_HEADER_SIZE |
| #define INET_CONFIG_MAX_IP_AND_UDP_HEADER_SIZE (40 + 8) |
| #endif // INET_CONFIG_MAX_IP_AND_UDP_HEADER_SIZE |
| |
| /** |
| * @def INET_CONFIG_NUM_TCP_ENDPOINTS |
| * |
| * @brief |
| * This is the total number of TCP end point context structures. |
| * |
| * Up to this many outstanding TCP communication flows may be in |
| * use. |
| * |
| */ |
| #ifndef INET_CONFIG_NUM_TCP_ENDPOINTS |
| #define INET_CONFIG_NUM_TCP_ENDPOINTS 64 |
| #endif // INET_CONFIG_NUM_TCP_ENDPOINTS |
| |
| /** |
| * @def INET_CONFIG_NUM_UDP_ENDPOINTS |
| * |
| * @brief |
| * This is the total number of UDP end point context structures. |
| * |
| * Up to this many outstanding UDP communication flows may be in |
| * use. |
| * |
| */ |
| #ifndef INET_CONFIG_NUM_UDP_ENDPOINTS |
| #define INET_CONFIG_NUM_UDP_ENDPOINTS 64 |
| #endif // INET_CONFIG_NUM_UDP_ENDPOINTS |
| |
| /** |
| * @def INET_TCP_IDLE_CHECK_INTERVAL |
| * |
| * @brief |
| * This is the interval, in milliseconds, at which checks are made |
| * to detect idle TCP connections. |
| * |
| */ |
| #ifndef INET_TCP_IDLE_CHECK_INTERVAL |
| #define INET_TCP_IDLE_CHECK_INTERVAL 100 |
| #endif // INET_TCP_IDLE_CHECK_INTERVAL |
| |
| /** |
| * @def INET_CONFIG_ENABLE_TCP_ENDPOINT |
| * |
| * @brief |
| * Defines whether (1) or not (0) to enable the ability |
| * to instantiate a TCP endpoint. |
| * |
| */ |
| #ifndef INET_CONFIG_ENABLE_TCP_ENDPOINT |
| #define INET_CONFIG_ENABLE_TCP_ENDPOINT 0 |
| #endif // INET_CONFIG_ENABLE_TCP_ENDPOINT |
| |
| /** |
| * @def INET_CONFIG_ENABLE_UDP_ENDPOINT |
| * |
| * @brief |
| * Defines whether (1) or not (0) to enable the ability |
| * to instantiate a UDP endpoint. |
| * |
| */ |
| #ifndef INET_CONFIG_ENABLE_UDP_ENDPOINT |
| #define INET_CONFIG_ENABLE_UDP_ENDPOINT 0 |
| #endif // INET_CONFIG_ENABLE_UDP_ENDPOINT |
| |
| /** |
| * @def INET_CONFIG_TEST |
| * |
| * @brief |
| * Defines whether (1) or not (0) to enable testing aids |
| */ |
| #ifndef INET_CONFIG_TEST |
| #define INET_CONFIG_TEST 0 |
| #endif |
| |
| /** |
| * @def INET_CONFIG_OVERRIDE_SYSTEM_TCP_USER_TIMEOUT |
| * |
| * @brief |
| * When this flag is set, the InetLayer implements |
| * a mechanism that simulates the TCP_USER_TIMEOUT |
| * socket option for Linux sockets. |
| * |
| * @details |
| * The TCP_USER_TIMEOUT option specifies the maximum |
| * amount of time in milliseconds that transmitted |
| * data may remain unacknowledged before TCP will |
| * forcibly close the corresponding connection. |
| * See RFC 5482, for further details. |
| * |
| * This flag is set to override the usage of the system |
| * defined TCP_USER_TIMEOUT socket option for Linux. |
| * The reason for having this overriding feature |
| * was to overcome some limitations of the system |
| * socket option wherein the TCP_USER_TIMEOUT was |
| * not taking effect when |
| * 1) The IP address of the interface of the TCP |
| * connection was removed. |
| * 2) The interface of the TCP connection was |
| * brought down. |
| * |
| */ |
| #ifndef INET_CONFIG_OVERRIDE_SYSTEM_TCP_USER_TIMEOUT |
| #define INET_CONFIG_OVERRIDE_SYSTEM_TCP_USER_TIMEOUT 1 |
| #endif // INET_CONFIG_OVERRIDE_SYSTEM_TCP_USER_TIMEOUT |
| |
| /** |
| * @def INET_CONFIG_TCP_SEND_QUEUE_POLL_INTERVAL_MSEC |
| * |
| * @brief |
| * The default polling interval to check the progress |
| * on the TCP SendQueue to determine if sent data is |
| * being acknowledged. |
| * |
| * @details |
| * If progress is being made, then the TCP UserTimeout |
| * period would be shifted further ahead by resetting |
| * the max poll count. If, however, progress is not made, |
| * then the next timer would still fire at the next poll |
| * interval without resetting the poll count. The |
| * connection would be torn down when the poll count |
| * reaches zero. |
| */ |
| #ifndef INET_CONFIG_TCP_SEND_QUEUE_POLL_INTERVAL_MSEC |
| #define INET_CONFIG_TCP_SEND_QUEUE_POLL_INTERVAL_MSEC 500 |
| #endif // INET_CONFIG_TCP_SEND_QUEUE_POLL_INTERVAL_MSEC |
| |
| /** |
| * @def INET_CONFIG_DEFAULT_TCP_USER_TIMEOUT_MSEC |
| * |
| * @brief |
| * The default value of the TCP_USER_TIMEOUT in |
| * milliseconds. Set to equivalent of 5 minutes. |
| * |
| * |
| * @details |
| * This value specifies the maximum amount of |
| * time in milliseconds that transmitted data may remain |
| * unacknowledged before TCP will forcibly close the |
| * corresponding connection. |
| * See RFC 5482, for further details. |
| */ |
| #ifndef INET_CONFIG_DEFAULT_TCP_USER_TIMEOUT_MSEC |
| #define INET_CONFIG_DEFAULT_TCP_USER_TIMEOUT_MSEC (5 * 60 * 1000) |
| #endif // INET_CONFIG_DEFAULT_TCP_USER_TIMEOUT_MSEC |
| |
| /** |
| * @def INET_CONFIG_IP_MULTICAST_HOP_LIMIT |
| * |
| * @brief |
| * The default value of the Hop Limit field in |
| * the IP multicast packet. |
| * |
| * |
| * @details |
| * This value specifies the hop limit that could be set in the |
| * outgoing IP packet to override any default settings(made by |
| * the kernel) for the hop limit field in the IP header. |
| * On Linux platforms, the hoplimit field is set to 1 for |
| * multicast packets. |
| */ |
| #ifndef INET_CONFIG_IP_MULTICAST_HOP_LIMIT |
| #define INET_CONFIG_IP_MULTICAST_HOP_LIMIT (64) |
| #endif // INET_CONFIG_IP_MULTICAST_HOP_LIMIT |
| |
| /** |
| * @def INET_CONFIG_UDP_SOCKET_PKTINFO |
| * |
| * @brief |
| * Use IP_PKTINFO and IPV6_PKTINFO control messages to specify the network |
| * interface and the source address of a sent UDP packet. |
| * |
| * @details |
| * When this flag is set, the socket-based implementation of UDP endpoints |
| * requires that IP_PKTINFO and IPV6_PKTINFO be supported. Otherwise, it is |
| * left to the operating system to select the network interface and the |
| * source address. |
| */ |
| #ifndef INET_CONFIG_UDP_SOCKET_PKTINFO |
| #ifndef __ZEPHYR__ |
| #define INET_CONFIG_UDP_SOCKET_PKTINFO 1 |
| #else |
| #define INET_CONFIG_UDP_SOCKET_PKTINFO 0 |
| #endif |
| #endif // INET_CONFIG_UDP_SOCKET_PKTINFO |
| |
| /** |
| * @def HAVE_SO_BINDTODEVICE |
| * |
| * @brief |
| * Should be set to 1 if the SO_BINDTODEVICE option to setsockopt is |
| * available. |
| */ |
| #ifndef HAVE_SO_BINDTODEVICE |
| #define HAVE_SO_BINDTODEVICE 0 |
| #endif |
| |
| /** |
| * @def INET_CONFIG_UDP_SOCKET_MREQN |
| * |
| * @brief |
| * Should be set to 1 if your platform can handle struct ip_mreqn, |
| * mandatory in UDPEndPointSocket.cpp |
| */ |
| |
| #ifndef INET_CONFIG_UDP_SOCKET_MREQN |
| #define INET_CONFIG_UDP_SOCKET_MREQN 0 |
| #endif |
| |
| // clang-format on |