walnux/include/nuttx/net/netconfig.h
2024-12-10 18:14:26 +08:00

666 lines
22 KiB
C

/****************************************************************************
* include/nuttx/net/netconfig.h
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-FileCopyrightText: 2007, 2011, 2014-2015, 2017-2019 Gregory Nutt.
* All rights reserved.
* SPDX-FileCopyrightText: 2001-2003, Adam Dunkels. All rights reserved.
* SPDX-FileContributor: Gregory Nutt <gnutt@nuttx.org>
* SPDX-FileContributor: Adam Dunkels <adam@dunkels.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __INCLUDE_NUTTX_NET_NETCONFG_H
#define __INCLUDE_NUTTX_NET_NETCONFG_H
/* Note: Network configuration options the netconfig.h should not be changed,
* but rather the per-project defconfig file.
*/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <nuttx/net/ethernet.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Using the following definitions, the following socket() arguments should
* provide a valid socket in all configurations:
*
* ret = socket(NET_SOCK_FAMILY, NET_SOCK_TYPE,
* NET_SOCK_PROTOCOL);
*/
/* The TCP/UDP stack, which is used for determining HAVE_PFINET(6)_SOCKETS */
#undef NET_TCP_HAVE_STACK
#if defined(CONFIG_NET_TCP) && !defined(CONFIG_NET_TCP_NO_STACK)
# define NET_TCP_HAVE_STACK 1
#endif
#undef NET_UDP_HAVE_STACK
#if defined(CONFIG_NET_UDP) && !defined(CONFIG_NET_UDP_NO_STACK)
# define NET_UDP_HAVE_STACK 1
#endif
/* The address family that we used to create the socket really does not
* matter. It should, however, be valid in the current configuration.
*/
#undef HAVE_INET_SOCKETS
#undef HAVE_PFINET_SOCKETS
#undef HAVE_PFINET6_SOCKETS
#if defined(CONFIG_NET_IPv4) || defined(CONFIG_NET_IPv6)
# define HAVE_INET_SOCKETS
# if (defined(CONFIG_NET_IPv4) && (defined(NET_UDP_HAVE_STACK) || \
defined(NET_TCP_HAVE_STACK) || defined(CONFIG_NET_USRSOCK))) || \
defined(CONFIG_NET_ICMP_SOCKET)
# define HAVE_PFINET_SOCKETS
# endif
# if (defined(CONFIG_NET_IPv6) && (defined(NET_UDP_HAVE_STACK) || \
defined(NET_TCP_HAVE_STACK) || defined(CONFIG_NET_USRSOCK))) || \
defined(CONFIG_NET_ICMPv6_SOCKET)
# define HAVE_PFINET6_SOCKETS
# endif
#endif
#if defined(HAVE_PFINET_SOCKETS)
# define NET_SOCK_FAMILY AF_INET
#elif defined(HAVE_PFINET6_SOCKETS)
# define NET_SOCK_FAMILY AF_INET6
#elif defined(CONFIG_NET_LOCAL)
# define NET_SOCK_FAMILY AF_LOCAL
#elif defined(CONFIG_NET_PKT)
# define NET_SOCK_FAMILY AF_PACKET
#elif defined(CONFIG_NET_CAN)
# define NET_SOCK_FAMILY AF_CAN
#elif defined(CONFIG_NET_IEEE802154)
# define NET_SOCK_FAMILY AF_IEEE802154
#elif defined(CONFIG_WIRELESS_PKTRADIO)
# define NET_SOCK_FAMILY AF_PKTRADIO
#elif defined(CONFIG_NET_BLUETOOTH)
# define NET_SOCK_FAMILY AF_BLUETOOTH
#elif defined(CONFIG_NET_USRSOCK)
# define NET_SOCK_FAMILY AF_INET
#elif defined(CONFIG_NET_NETLINK)
# define NET_SOCK_FAMILY AF_NETLINK
#elif defined(CONFIG_NET_RPMSG)
# define NET_SOCK_FAMILY AF_RPMSG
#else
# define NET_SOCK_FAMILY AF_UNSPEC
#endif
/* Socket protocol of zero normally works */
#define NET_SOCK_PROTOCOL 0
/* SOCK_CTRL is the preferred socket type to use when we just want a
* socket for performing driver ioctls.
*/
#define NET_SOCK_TYPE (SOCK_CTRL | SOCK_CLOEXEC)
#if NET_SOCK_FAMILY == AF_INET
# if !defined(CONFIG_NET_UDP) && !defined(CONFIG_NET_TCP) && \
defined(CONFIG_NET_ICMP_SOCKET)
# undef NET_SOCK_PROTOCOL
# define NET_SOCK_PROTOCOL IPPROTO_ICMP
# endif
#elif NET_SOCK_FAMILY == AF_INET6
# if !defined(CONFIG_NET_UDP) && !defined(CONFIG_NET_TCP) && \
defined(CONFIG_NET_ICMPv6_SOCKET)
# undef NET_SOCK_PROTOCOL
# define NET_SOCK_PROTOCOL IPPROTO_ICMP6
# endif
#endif
/* Eliminate dependencies on other header files. This should not harm
* portability because these are well-known constants.
*/
#define __IPv4_HDRLEN 20 /* Must match IPv4_HDRLEN in include/nuttx/net/ip.h */
#define __IPv6_HDRLEN 40 /* Must match IPv6_HDRLEN in include/nuttx/net/ip.h */
#define __UDP_HDRLEN 8 /* Must match UDP_HDRLEN in include/nuttx/net/udp.h */
#define __TCP_HDRLEN 20 /* Must match TCP_HDRLEN in include/nuttx/net/tcp.h */
/* REVISIT: Not really a constant */
/* Layer 2 Configuration Options ********************************************/
/* The default link layer is Ethernet. If CONFIG_NET_SLIP is defined in
* the NuttX header file, then SLIP will be supported. The basic
* differences between the SLIP and Ethernet configurations is that when SLIP
* is selected:
*
* - The link level header (that comes before the IP header) is omitted.
* - All MAC address processing is suppressed.
* - ARP is disabled.
*
* If CONFIG_NET_SLIP is not supported, then Ethernet will be used (there is
* no need to define anything special in the configuration file to use
* Ethernet -- it is the default).
*
* The "link level header" is the offset into the d_buf where the IP header
* can be found. For Ethernet, this should be set to 14. For SLIP, this
* should be set to 0.
*
* There are other device-specific features that at tied to the link layer:
*
* - Maximum Transfer Unit (MTU)
* - TCP Receive Window size (See TCP configuration options below)
*
* A better solution would be to support device-by-device MTU and receive
* window sizes. This minimum support is require to support the optimal
* SLIP MTU of 296 bytes and the standard Ethernet MTU of 1500
* bytes.
*/
#ifdef CONFIG_NET_SLIP
# ifndef CONFIG_NET_SLIP_PKTSIZE
# define CONFIG_NET_SLIP_PKTSIZE 296
# endif
#endif
#ifdef CONFIG_NET_TUN
# ifndef CONFIG_NET_TUN_PKTSIZE
# define CONFIG_NET_TUN_PKTSIZE 296
# endif
#endif
#ifdef CONFIG_NET_ETHERNET
# ifndef CONFIG_NET_ETH_PKTSIZE
# define CONFIG_NET_ETH_PKTSIZE 590
# endif
#endif
#ifndef CONFIG_NET_6LOWPAN_PKTSIZE
# define CONFIG_NET_6LOWPAN_PKTSIZE 1294
#endif
/* We are supporting multiple network devices using different link layer
* protocols. Get the size of the link layer header from the device
* structure.
*/
#define NET_LL_HDRLEN(d) ((d)->d_llhdrlen)
#define NETDEV_PKTSIZE(d) ((d)->d_pktsize)
#ifdef CONFIG_NET_ETHERNET
# define _MIN_ETH_PKTSIZE CONFIG_NET_ETH_PKTSIZE
# define _MAX_ETH_PKTSIZE CONFIG_NET_ETH_PKTSIZE
#else
# define _MIN_ETH_PKTSIZE UINT16_MAX
# define _MAX_ETH_PKTSIZE 0
#endif
#ifdef CONFIG_NET_LOOPBACK
# define _MIN_LO_PKTSIZE MIN(_MIN_ETH_PKTSIZE, 574)
# define _MAX_LO_PKTSIZE MAX(_MAX_ETH_PKTSIZE, 1518)
#else
# define _MIN_LO_PKTSIZE _MIN_ETH_PKTSIZE
# define _MAX_LO_PKTSIZE _MAX_ETH_PKTSIZE
#endif
#ifdef CONFIG_NET_SLIP
# define _MIN_SLIP_PKTSIZE MIN(_MIN_LO_PKTSIZE, CONFIG_NET_SLIP_PKTSIZE)
# define _MAX_SLIP_PKTSIZE MAX(_MAX_LO_PKTSIZE, CONFIG_NET_SLIP_PKTSIZE)
#else
# define _MIN_SLIP_PKTSIZE _MIN_LO_PKTSIZE
# define _MAX_SLIP_PKTSIZE _MAX_LO_PKTSIZE
#endif
#ifdef CONFIG_NET_TUN
# define _MIN_TUN_PKTSIZE MIN(_MIN_SLIP_PKTSIZE, CONFIG_NET_TUN_PKTSIZE)
# define _MAX_TUN_PKTSIZE MAX(_MAX_SLIP_PKTSIZE, CONFIG_NET_TUN_PKTSIZE)
#else
# define _MIN_TUN_PKTSIZE _MIN_SLIP_PKTSIZE
# define _MAX_TUN_PKTSIZE _MAX_SLIP_PKTSIZE
#endif
#ifdef CONFIG_NET_6LOWPAN
# define _MIN_6LOWPAN_PKTSIZE MIN(_MIN_TUN_PKTSIZE, CONFIG_NET_6LOWPAN_PKTSIZE)
# define _MAX_6LOWPAN_PKTSIZE MAX(_MAX_TUN_PKTSIZE, CONFIG_NET_6LOWPAN_PKTSIZE)
#else
# define _MIN_6LOWPAN_PKTSIZE _MIN_TUN_PKTSIZE
# define _MAX_6LOWPAN_PKTSIZE _MAX_TUN_PKTSIZE
#endif
#define MIN_NETDEV_PKTSIZE _MIN_6LOWPAN_PKTSIZE
#define MAX_NETDEV_PKTSIZE _MAX_6LOWPAN_PKTSIZE
/* The loopback driver packet buffer should be quite large. The larger the
* loopback packet buffer, the better will be TCP performance of the loopback
* transfers. The Linux loopback device historically used packet buffers of
* size 16Kb, but that was increased in recent Linux versions to 64Kb. Those
* sizes may be excessive for resource constrained MCUs, however.
*
* For the loopback driver, we enforce a lower limit that is the maximum
* packet size of all enabled link layer protocols.
*/
#ifndef CONFIG_NET_LOOPBACK_PKTSIZE
# define CONFIG_NET_LOOPBACK_PKTSIZE 0
#endif
#if CONFIG_NET_LOOPBACK_PKTSIZE < MAX_NETDEV_PKTSIZE
# define NET_LO_PKTSIZE MAX_NETDEV_PKTSIZE
#else
# define NET_LO_PKTSIZE CONFIG_NET_LOOPBACK_PKTSIZE
#endif
#ifndef CONFIG_NET_SEND_BUFSIZE
# define CONFIG_NET_SEND_BUFSIZE 0
#endif
/* Layer 3/4 Configuration Options ******************************************/
/* IP configuration options */
/* The IP TTL (time to live) of IP packets sent by the network stack.
*
* This should normally not be changed.
*/
#define IP_TTL_DEFAULT 64
/* Network drivers often receive packets with garbage at the end
* and are longer than the size of packet in the TCP header. The
* following "fudge" factor increases the size of the I/O buffering
* by a small amount to allocate slightly oversize packets. After
* receipt, the packet size will be chopped down to the size indicated
* in the TCP header.
*/
#ifndef CONFIG_NET_GUARDSIZE
# define CONFIG_NET_GUARDSIZE 2
#endif
/* ICMP configuration options */
#ifndef CONFIG_NET_ICMP
# undef CONFIG_NET_ICMP_SOCKET
#endif
/* UDP configuration options */
/* The UDP maximum packet size. This should not be set to more than
* NETDEV_PKTSIZE(d) - NET_LL_HDRLEN(dev) - __UDP_HDRLEN - IPv*_HDRLEN.
*/
#define UDP_MSS(d,h) (NETDEV_PKTSIZE(d) - NET_LL_HDRLEN(d) - __UDP_HDRLEN - (h))
#ifdef CONFIG_NET_ETHERNET
# define ETH_UDP_MSS(h) (CONFIG_NET_ETH_PKTSIZE - ETH_HDRLEN - __UDP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_6LOWPAN
# define IEEE802154_UDP_MSS(h) (CONFIG_NET_6LOWPAN_PKTSIZE - __UDP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_LOOPBACK
# define LO_UDP_MSS(h) (NET_LO_PKTSIZE - __UDP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_SLIP
# define SLIP_UDP_MSS(h) (CONFIG_NET_SLIP_PKTSIZE - __UDP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_TUN
# define TUN_UDP_MSS(h) (CONFIG_NET_TUN_PKTSIZE - __UDP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_USRSOCK
# define __MIN_UDP_MSS(h) INT_MAX
# define __MAX_UDP_MSS(h) 0
#endif
#ifdef CONFIG_NET_ETHERNET
# undef __MIN_UDP_MSS
# undef __MAX_UDP_MSS
# define __MIN_UDP_MSS(h) ETH_UDP_MSS(h)
# define __MAX_UDP_MSS(h) ETH_UDP_MSS(h)
# define __ETH_MIN_UDP_MSS(h) ETH_UDP_MSS(h)
# define __ETH_MAX_UDP_MSS(h) ETH_UDP_MSS(h)
#else
# define __ETH_MIN_UDP_MSS(h) INT_MAX
# define __ETH_MAX_UDP_MSS(h) 0
#endif
#ifdef CONFIG_NET_6LOWPAN
# undef __MIN_UDP_MSS
# undef __MAX_UDP_MSS
# define __MIN_UDP_MSS(h) MIN(IEEE802154_UDP_MSS(h),__ETH_MIN_UDP_MSS(h))
# define __MAX_UDP_MSS(h) MAX(IEEE802154_UDP_MSS(h),__ETH_MAX_UDP_MSS(h))
# define __6LOWPAN_MIN_UDP_MSS(h) MIN(IEEE802154_UDP_MSS(h),__ETH_MIN_UDP_MSS(h))
# define __6LOWPAN_MAX_UDP_MSS(h) MAX(IEEE802154_UDP_MSS(h),__ETH_MAX_UDP_MSS(h))
#else
# define __6LOWPAN_MIN_UDP_MSS(h) __ETH_MIN_UDP_MSS(h)
# define __6LOWPAN_MAX_UDP_MSS(h) __ETH_MAX_UDP_MSS(h)
#endif
#ifdef CONFIG_NET_LOOPBACK
# undef __MIN_UDP_MSS
# undef __MAX_UDP_MSS
# define __MIN_UDP_MSS(h) MIN(LO_UDP_MSS(h),__6LOWPAN_MIN_UDP_MSS(h))
# define __MAX_UDP_MSS(h) MAX(LO_UDP_MSS(h),__6LOWPAN_MAX_UDP_MSS(h))
# define __LOOP_MIN_UDP_MSS(h) MIN(LO_UDP_MSS(h),__6LOWPAN_MIN_UDP_MSS(h))
# define __LOOP_MAX_UDP_MSS(h) MAX(LO_UDP_MSS(h),__6LOWPAN_MAX_UDP_MSS(h))
#else
# define __LOOP_MIN_UDP_MSS(h) __6LOWPAN_MIN_UDP_MSS(h)
# define __LOOP_MAX_UDP_MSS(h) __6LOWPAN_MAX_UDP_MSS(h)
#endif
#ifdef CONFIG_NET_SLIP
# undef __MIN_UDP_MSS
# undef __MAX_UDP_MSS
# define __MIN_UDP_MSS(h) MIN(SLIP_UDP_MSS(h),__LOOP_MIN_UDP_MSS(h))
# define __MAX_UDP_MSS(h) MAX(SLIP_UDP_MSS(h),__LOOP_MAX_UDP_MSS(h))
# define __SLIP_MIN_UDP_MSS(h) MIN(SLIP_UDP_MSS(h),__LOOP_MIN_UDP_MSS(h))
# define __SLIP_MAX_UDP_MSS(h) MAX(SLIP_UDP_MSS(h),__LOOP_MAX_UDP_MSS(h))
#else
# define __SLIP_MIN_UDP_MSS(h) __LOOP_MIN_UDP_MSS(h)
# define __SLIP_MAX_UDP_MSS(h) __LOOP_MAX_UDP_MSS(h)
#endif
#ifdef CONFIG_NET_TUN
# undef __MIN_UDP_MSS
# undef __MAX_UDP_MSS
# define __MIN_UDP_MSS(h) MIN(TUN_UDP_MSS(h),__SLIP_MIN_UDP_MSS(h))
# define __MAX_UDP_MSS(h) MAX(TUN_UDP_MSS(h),__SLIP_MAX_UDP_MSS(h))
# define __TUN_MIN_UDP_MSS(h) MIN(TUN_UDP_MSS(h),__SLIP_MIN_UDP_MSS(h))
# define __TUN_MAX_UDP_MSS(h) MAX(TUN_UDP_MSS(h),__SLIP_MAX_UDP_MSS(h))
#else
# define __TUN_MIN_UDP_MSS(h) __SLIP_MIN_UDP_MSS(h)
# define __TUN_MAX_UDP_MSS(h) __SLIP_MAX_UDP_MSS(h)
#endif
#ifdef CONFIG_NET_IPv4
# define UDP_IPv4_MSS(d) UDP_MSS(d,__IPv4_HDRLEN)
# define ETH_IPv4_UDP_MSS ETH_UDP_MSS(__IPv4_HDRLEN)
# define SLIP_IPv4_UDP_MSS SLIP_UDP_MSS(__IPv4_HDRLEN)
# define TUN_IPv4_UDP_MSS TUN_UDP_MSS(__IPv4_HDRLEN)
# define MIN_IPv4_UDP_MSS __MIN_UDP_MSS(__IPv4_HDRLEN)
# define MIN_UDP_MSS __MIN_UDP_MSS(__IPv4_HDRLEN)
# undef MAX_UDP_MSS
# define MAX_IPv4_UDP_MSS __MAX_UDP_MSS(__IPv4_HDRLEN)
# define MAX_UDP_MSS __MAX_UDP_MSS(__IPv4_HDRLEN)
#endif
/* If IPv6 is supported, it will have the smaller MSS. */
#ifdef CONFIG_NET_IPv6
# undef MIN_UDP_MSS
# define MIN_IPv6_UDP_MSS __MIN_UDP_MSS(__IPv6_HDRLEN)
# define MIN_UDP_MSS __MIN_UDP_MSS(__IPv6_HDRLEN)
# ifndef MAX_UDP_MSS
# define MAX_UDP_MSS __MAX_UDP_MSS(__IPv6_HDRLEN)
# endif
#endif
/* TCP configuration options */
/* The maximum number of simultaneously listening TCP ports.
*
* Each listening TCP port requires 2 bytes of memory.
*/
#ifndef CONFIG_NET_MAX_LISTENPORTS
# define CONFIG_NET_MAX_LISTENPORTS 20
#endif
/* The initial retransmission timeout counted in timer pulses.
* REVISIT: TCP RTO really should be calculated dynamically for each TCP
* connection.
*/
#ifdef CONFIG_NET_TCP_RTO
# define TCP_RTO CONFIG_NET_TCP_RTO
#else
# define TCP_RTO 3
#endif
/* The maximum number of times a segment should be retransmitted
* before the connection should be aborted.
*
* This should not be changed.
*/
#ifdef CONFIG_NET_TCP_MAXRTX
# define TCP_MAXRTX CONFIG_NET_TCP_MAXRTX
#else
# define TCP_MAXRTX 8
#endif
/* The maximum number of times a SYN segment should be retransmitted
* before a connection request should be deemed to have been
* unsuccessful.
*
* This should not need to be changed.
*/
#ifdef CONFIG_NET_TCP_MAXSYNRTX
# define TCP_MAXSYNRTX CONFIG_NET_TCP_MAXSYNRTX
#else
# define TCP_MAXSYNRTX 5
#endif
/* The TCP maximum segment size. This should not be set to more than
* NETDEV_PKTSIZE(dev) - NET_LL_HDRLEN(dev) - IPvN_HDRLEN - __TCP_HDRLEN.
*
* In the case where there are multiple network devices with different
* link layer protocols, each network device may support a different MSS
* value. Here we arbitrarily select the minimum MSS for that case.
*
* REVISIT: __TCP_HDRLEN is not really a constant!
*/
#define TCP_MSS(d,h) (NETDEV_PKTSIZE(d) - NET_LL_HDRLEN(d) - __TCP_HDRLEN - (h))
/* Get the smallest and largest MSS */
#ifdef CONFIG_NET_ETHERNET
# define ETH_TCP_MSS(h) (CONFIG_NET_ETH_PKTSIZE - ETH_HDRLEN - __TCP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_6LOWPAN
# define IEEE802154_TCP_MSS(h) (CONFIG_NET_6LOWPAN_PKTSIZE - __TCP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_LOOPBACK
# define LO_TCP_MSS(h) (NET_LO_PKTSIZE - __TCP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_SLIP
# define SLIP_TCP_MSS(h) (CONFIG_NET_SLIP_PKTSIZE - __TCP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_TUN
# define TUN_TCP_MSS(h) (CONFIG_NET_TUN_PKTSIZE - __TCP_HDRLEN - (h))
#endif
#ifdef CONFIG_NET_USRSOCK
# define __MIN_TCP_MSS(h) INT_MAX
# define __MAX_TCP_MSS(h) 0
#endif
#ifdef CONFIG_NET_ETHERNET
# undef __MIN_TCP_MSS
# undef __MAX_TCP_MSS
# define __MIN_TCP_MSS(h) ETH_TCP_MSS(h)
# define __MAX_TCP_MSS(h) ETH_TCP_MSS(h)
# define __ETH_MIN_TCP_MSS(h) ETH_TCP_MSS(h)
# define __ETH_MAX_TCP_MSS(h) ETH_TCP_MSS(h)
#else
# define __ETH_MIN_TCP_MSS(h) INT_MAX
# define __ETH_MAX_TCP_MSS(h) 0
#endif
#ifdef CONFIG_NET_6LOWPAN
# undef __MIN_TCP_MSS
# undef __MAX_TCP_MSS
# define __MIN_TCP_MSS(h) MIN(IEEE802154_TCP_MSS(h),__ETH_MIN_TCP_MSS(h))
# define __MAX_TCP_MSS(h) MAX(IEEE802154_TCP_MSS(h),__ETH_MAX_TCP_MSS(h))
# define __6LOWPAN_MIN_TCP_MSS(h) MIN(IEEE802154_TCP_MSS(h),__ETH_MIN_TCP_MSS(h))
# define __6LOWPAN_MAX_TCP_MSS(h) MAX(IEEE802154_TCP_MSS(h),__ETH_MAX_TCP_MSS(h))
#else
# define __6LOWPAN_MIN_TCP_MSS(h) __ETH_MIN_TCP_MSS(h)
# define __6LOWPAN_MAX_TCP_MSS(h) __ETH_MAX_TCP_MSS(h)
#endif
#ifdef CONFIG_NET_LOOPBACK
# undef __MIN_TCP_MSS
# undef __MAX_TCP_MSS
# define __MIN_TCP_MSS(h) MIN(LO_TCP_MSS(h),__6LOWPAN_MIN_TCP_MSS(h))
# define __MAX_TCP_MSS(h) MAX(LO_TCP_MSS(h),__6LOWPAN_MAX_TCP_MSS(h))
# define __LOOP_MIN_TCP_MSS(h) MIN(LO_TCP_MSS(h),__6LOWPAN_MIN_TCP_MSS(h))
# define __LOOP_MAX_TCP_MSS(h) MAX(LO_TCP_MSS(h),__6LOWPAN_MAX_TCP_MSS(h))
#else
# define __LOOP_MIN_TCP_MSS(h) __6LOWPAN_MIN_TCP_MSS(h)
# define __LOOP_MAX_TCP_MSS(h) __6LOWPAN_MAX_TCP_MSS(h)
#endif
#ifdef CONFIG_NET_SLIP
# undef __MIN_TCP_MSS
# undef __MAX_TCP_MSS
# define __MIN_TCP_MSS(h) MIN(SLIP_TCP_MSS(h),__LOOP_MIN_TCP_MSS(h))
# define __MAX_TCP_MSS(h) MAX(SLIP_TCP_MSS(h),__LOOP_MAX_TCP_MSS(h))
# define __SLIP_MIN_TCP_MSS(h) MIN(SLIP_TCP_MSS(h),__LOOP_MIN_TCP_MSS(h))
# define __SLIP_MAX_TCP_MSS(h) MAX(SLIP_TCP_MSS(h),__LOOP_MAX_TCP_MSS(h))
#else
# define __SLIP_MIN_TCP_MSS(h) __LOOP_MIN_TCP_MSS(h)
# define __SLIP_MAX_TCP_MSS(h) __LOOP_MAX_TCP_MSS(h)
#endif
#ifdef CONFIG_NET_TUN
# undef __MIN_TCP_MSS
# undef __MAX_TCP_MSS
# define __MIN_TCP_MSS(h) MIN(TUN_TCP_MSS(h),__SLIP_MIN_TCP_MSS(h))
# define __MAX_TCP_MSS(h) MAX(TUN_TCP_MSS(h),__SLIP_MAX_TCP_MSS(h))
# define __TUN_MIN_TCP_MSS(h) MIN(TUN_TCP_MSS(h),__SLIP_MIN_TCP_MSS(h))
# define __TUN_MAX_TCP_MSS(h) MAX(TUN_TCP_MSS(h),__SLIP_MAX_TCP_MSS(h))
#else
# define __TUN_MIN_TCP_MSS(h) __SLIP_MIN_TCP_MSS(h)
# define __TUN_MAX_TCP_MSS(h) __SLIP_MAX_TCP_MSS(h)
#endif
/* If IPv4 is supported, it will have the larger MSS.
* NOTE: MSS calculation excludes the __TCP_HDRLEN.
*/
#ifdef CONFIG_NET_IPv6
# define TCP_IPv6_MSS(d) TCP_MSS(d,__IPv6_HDRLEN)
# define ETH_IPv6_TCP_MSS ETH_TCP_MSS(__IPv6_HDRLEN)
# define SLIP_IPv6_TCP_MSS SLIP_TCP_MSS(__IPv6_HDRLEN)
# define TUN_IPv6_TCP_MSS TUN_TCP_MSS(__IPv6_HDRLEN)
# define MAX_TCP_MSS __MAX_TCP_MSS(__IPv6_HDRLEN)
#endif
#ifdef CONFIG_NET_IPv4
# define TCP_IPv4_MSS(d) TCP_MSS(d,__IPv4_HDRLEN)
# define ETH_IPv4_TCP_MSS ETH_TCP_MSS(__IPv4_HDRLEN)
# define SLIP_IPv4_TCP_MSS SLIP_TCP_MSS(__IPv4_HDRLEN)
# define TUN_IPv4_TCP_MSS TUN_TCP_MSS(__IPv4_HDRLEN)
# define MIN_TCP_MSS __MIN_TCP_MSS(__IPv4_HDRLEN)
# undef MAX_TCP_MSS
# define MAX_TCP_MSS __MAX_TCP_MSS(__IPv4_HDRLEN)
#endif
/* If IPv6 is supported, it will have the smaller MSS. */
#ifdef CONFIG_NET_IPv6
# undef MIN_TCP_MSS
# define MIN_TCP_MSS __MIN_TCP_MSS(__IPv6_HDRLEN)
#endif
/* How long a connection should stay in the TIME_WAIT state (in units of
* seconds).
*
* TIME_WAIT is often also known as the 2MSL wait state. This is because
* the socket that transitions to TIME_WAIT stays there for a period that
* is 2 x Maximum Segment Lifetime in duration. The MSL is the maximum
* amount of time that any segment can remain valid on the network before
* being discarded. This time limit is ultimately bounded by the TTL field
* in the IP datagram that is used to transmit the TCP segment. RFC 793
* specifies MSL as 2 minutes but most systems permit this value to be tuned.
* Here a default TIME_WAIT (2MSL) 2 minutes is used, half the value
* specified by RFC 793.
*/
#ifdef CONFIG_NET_TCP_WAIT_TIMEOUT
# define TCP_TIME_WAIT_TIMEOUT CONFIG_NET_TCP_WAIT_TIMEOUT
#else
# define TCP_TIME_WAIT_TIMEOUT (60*2)
#endif
/* ARP configuration options */
#ifndef CONFIG_NET_ARPTAB_SIZE
/* The size of the ARP table.
*
* This option should be set to a larger value if this network node will
* have many connections from the local network.
*/
# define CONFIG_NET_ARPTAB_SIZE 8
#endif
#ifndef CONFIG_NET_ARP_MAXAGE
/* The maximum age of ARP table entries measured in 10ths of seconds.
*
* An CONFIG_NET_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD
* default).
*/
# define CONFIG_NET_ARP_MAXAGE 120
#endif
/****************************************************************************
* Public Type Definitions
****************************************************************************/
/* Statistics datatype
*
* This typedef defines the datatype used for keeping statistics in
* the network.
*/
typedef uint16_t net_stats_t;
#endif /* __INCLUDE_NUTTX_NET_NETCONFG_H */