From 570904375a8fb6685c21a50b6afeb6e1d5857358 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 7 Jul 2017 10:30:24 -0600 Subject: [PATCH] Add definitions that will permit TUN-only networking. --- configs/sim/nettest/defconfig | 12 ++++- include/nuttx/net/netconfig.h | 96 +++++++++++++++++++++++++++++++---- 2 files changed, 96 insertions(+), 12 deletions(-) diff --git a/configs/sim/nettest/defconfig b/configs/sim/nettest/defconfig index cd7d850534a..61d6e14ff84 100644 --- a/configs/sim/nettest/defconfig +++ b/configs/sim/nettest/defconfig @@ -431,6 +431,7 @@ CONFIG_NET_ETHERNET=y # CONFIG_NET_IPv4=y # CONFIG_NET_IPv6 is not set +# CONFIG_NET_IPFORWARD is not set # # Socket Support @@ -497,6 +498,11 @@ CONFIG_NET_ARP_MAXAGE=120 # CONFIG_NET_ARCH_INCR32 is not set # CONFIG_NET_ARCH_CHKSUM is not set CONFIG_NET_STATISTICS=y +# CONFIG_NET_HAVE_STAR is not set + +# +# Network Topologies +# # # Routing Table Configuration @@ -718,14 +724,16 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 # CONFIG_EXAMPLES_HIDKBD is not set # CONFIG_EXAMPLES_IGMP is not set # CONFIG_EXAMPLES_JSON is not set -# CONFIG_EXAMPLES_KEYPADTEST is not set # CONFIG_EXAMPLES_MEDIA is not set # CONFIG_EXAMPLES_MM is not set # CONFIG_EXAMPLES_MODBUS is not set # CONFIG_EXAMPLES_MOUNT is not set CONFIG_EXAMPLES_NETTEST=y +CONFIG_EXAMPLES_NETTEST_SENDSIZE=4096 CONFIG_EXAMPLES_NETTEST_STACKSIZE1=2048 CONFIG_EXAMPLES_NETTEST_PRIORITY1=100 +# CONFIG_EXAMPLES_NETTEST_SERVER1 is not set +# CONFIG_EXAMPLES_NETTEST_TARGET2 is not set CONFIG_EXAMPLES_NETTEST_DEVNAME="eth0" # CONFIG_EXAMPLES_NETTEST_PERFORMANCE is not set CONFIG_EXAMPLES_NETTEST_IPv4=y @@ -764,7 +772,6 @@ CONFIG_EXAMPLES_NETTEST_SERVER_PORTNO=5471 # CONFIG_EXAMPLES_SMP is not set # CONFIG_EXAMPLES_STAT is not set # CONFIG_EXAMPLES_TCPECHO is not set -# CONFIG_EXAMPLES_TELNETD is not set # CONFIG_EXAMPLES_TIFF is not set # CONFIG_EXAMPLES_TOUCHSCREEN is not set # CONFIG_EXAMPLES_WATCHDOG is not set @@ -812,6 +819,7 @@ CONFIG_EXAMPLES_NETTEST_SERVER_PORTNO=5471 # CONFIG_NETUTILS_JSON is not set CONFIG_NETUTILS_NETLIB=y # CONFIG_NETUTILS_SMTP is not set +# CONFIG_NETUTILS_TELNETC is not set # CONFIG_NETUTILS_TELNETD is not set # CONFIG_NETUTILS_WEBCLIENT is not set # CONFIG_NETUTILS_WEBSERVER is not set diff --git a/include/nuttx/net/netconfig.h b/include/nuttx/net/netconfig.h index 019fa663db7..a4afb1b1843 100644 --- a/include/nuttx/net/netconfig.h +++ b/include/nuttx/net/netconfig.h @@ -110,6 +110,12 @@ # endif #endif +#ifdef CONFIG_NET_TUN +# ifndef CONFIG_NET_TUN_MTU +# define CONFIG_NET_TUN_MTU 296 +# endif +#endif + #ifdef CONFIG_NET_ETHERNET # ifndef CONFIG_NET_ETH_MTU # define CONFIG_NET_ETH_MTU 590 @@ -165,12 +171,20 @@ # define _MAX_SLIP_MTU _MAX_LO_MTU # endif -# ifdef CONFIG_NET_6LOWPAN -# define _MIN_6LOWPAN_MTU MIN(_MIN_SLIP_MTU,CONFIG_NET_6LOWPAN_MTU) -# define _MAX_6LOWPAN_MTU MAX(_MAX_SLIP_MTU,CONFIG_NET_6LOWPAN_MTU) +# ifdef CONFIG_NET_TUN +# define _MIN_TUN_MTU MIN(_MIN_SLIP_MTU,CONFIG_NET_TUN_MTU) +# define _MAX_TUN_MTU MAX(_MAX_SLIP_MTU,CONFIG_NET_TUN_MTU) # else -# define _MIN_6LOWPAN_MTU _MIN_SLIP_MTU -# define _MAX_6LOWPAN_MTU _MAX_SLIP_MTU +# define _MIN_TUN_MTU _MIN_SLIP_MTU +# define _MAX_TUN_MTU _MAX_SLIP_MTU +# endif + +# ifdef CONFIG_NET_6LOWPAN +# define _MIN_6LOWPAN_MTU MIN(_MIN_TUN_MTU,CONFIG_NET_6LOWPAN_MTU) +# define _MAX_6LOWPAN_MTU MAX(_MAX_TUN_MTU,CONFIG_NET_6LOWPAN_MTU) +# else +# define _MIN_6LOWPAN_MTU _MIN_TUN_MTU +# define _MAX_6LOWPAN_MTU _MAX_TUN_MTU # endif # define MIN_NET_DEV_MTU _MIN_6LOWPAN_MTU @@ -192,6 +206,14 @@ # define MIN_NET_DEV_MTU CONFIG_NET_SLIP_MTU # define MAX_NET_DEV_MTU CONFIG_NET_SLIP_MTU +#elif defined(CONFIG_NET_TUN) + /* There is no link layer header with TUN */ + +# define NET_LL_HDRLEN(d) 0 +# define NET_DEV_MTU(d) CONFIG_NET_TUN_MTU +# define MIN_NET_DEV_MTU CONFIG_NET_TUN_MTU +# define MAX_NET_DEV_MTU CONFIG_NET_TUN_MTU + #elif defined(CONFIG_NET_ETHERNET) /* Assume standard Ethernet link layer header */ @@ -215,10 +237,10 @@ # define MAX_NET_DEV_MTU NET_LO_MTU #elif defined(CONFIG_NET_6LOWPAN) - /* There is no link layer header with SLIP */ + /* There is no link layer header with 6LoWPAN */ # ifndef CONFIG_NET_IPv6 -# error 6LoWPAN requires IPv support +# error 6LoWPAN requires IP6v support # endif # define NET_LL_HDRLEN(d) 0 @@ -240,7 +262,7 @@ # define MIN_NET_DEV_MTU 0 # define MAX_NET_DEV_MTU 0 -#endif /* MULTILINK or SLIP or ETHERNET */ +#endif /* MULTILINK, SLIP, TUN, LOOPBACK, 6LoWOPAN, or ETHERNET */ /* Layer 3/4 Configuration Options ******************************************/ @@ -332,6 +354,14 @@ # endif #endif +#ifdef CONFIG_NET_TUN +# define TUN_UDP_MSS(h) (CONFIG_NET_TUN_MTU - UDP_HDRLEN - (h)) +# ifndef CONFIG_NET_MULTILINK +# define __MIN_UDP_MSS(h) TUN_UDP_MSS(h) +# define __MAX_UDP_MSS(h) TUN_UDP_MSS(h) +# endif +#endif + #ifdef CONFIG_NET_MULTILINK # ifdef CONFIG_NET_ETHERNET # define __MIN_UDP_MSS(h) ETH_UDP_MSS(h) @@ -378,12 +408,25 @@ # 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 __MIN_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 #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) @@ -507,6 +550,14 @@ # endif #endif +#ifdef CONFIG_NET_TUN +# define TUN_TCP_MSS(h) (CONFIG_NET_TUN_MTU - TCP_HDRLEN - (h)) +# ifndef CONFIG_NET_MULTILINK +# define __MIN_TCP_MSS(h) TUN_TCP_MSS(h) +# define __MAX_TCP_MSS(h) TUN_TCP_MSS(h) +# endif +#endif + #ifdef CONFIG_NET_MULTILINK # ifdef CONFIG_NET_ETHERNET @@ -554,6 +605,18 @@ # 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 #endif /* If IPv4 is supported, it will have the larger MSS. @@ -564,6 +627,7 @@ # 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 @@ -571,6 +635,7 @@ # 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) @@ -600,6 +665,12 @@ # endif #endif +#ifdef CONFIG_NET_TUN +# ifndef CONFIG_NET_TUN_TCP_RECVWNDO +# define CONFIG_NET_TUN_TCP_RECVWNDO TUN_TCP_MSS(0) +# endif +#endif + #ifdef CONFIG_NET_ETHERNET # ifndef CONFIG_NET_ETH_TCP_RECVWNDO # define CONFIG_NET_ETH_TCP_RECVWNDO ETH_TCP_MSS(0) @@ -615,7 +686,7 @@ # define NET_DEV_RCVWNDO(d) ((d)->d_recvwndo) #elif defined(CONFIG_NET_ETHERNET) - /* Only Ethernet.. use the configured SLIP receive window size */ + /* Only Ethernet.. use the configured Ethernet receive window size */ # define NET_DEV_RCVWNDO(d) CONFIG_NET_ETH_TCP_RECVWNDO @@ -629,12 +700,17 @@ # define NET_DEV_RCVWNDO(d) CONFIG_NET_SLIP_TCP_RECVWNDO +#elif defined(CONFIG_NET_TUN) + /* Only SLIP.. use the configured SLIP receive window size */ + +# define NET_DEV_RCVWNDO(d) CONFIG_NET_TUN_TCP_RECVWNDO + #else /* if defined(CONFIG_NET_LOOPBACK) */ /* Only loal loopback.. use the fixed loopback receive window size */ # define NET_DEV_RCVWNDO(d) NET_LO_TCP_RECVWNDO -#endif /* MULTILINK or SLIP or ETHERNET */ +#endif /* MULTILINK, ETHERNET, 6LoWPAN, SLIP, TUN, or LOOPBACK */ /* How long a connection should stay in the TIME_WAIT state. *