diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-11-16 11:15:21 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-11-16 11:15:21 -0600 |
commit | 668e50371a5677bb28ed2884883838effd2f1839 (patch) | |
tree | 065e0aaf71b2e1bc8474065d2d005caec987b157 /nuttx | |
parent | 59944890db7ab35f2fa6cb7f4f2c6305a420b034 (diff) | |
download | px4-nuttx-668e50371a5677bb28ed2884883838effd2f1839.tar.gz px4-nuttx-668e50371a5677bb28ed2884883838effd2f1839.tar.bz2 px4-nuttx-668e50371a5677bb28ed2884883838effd2f1839.zip |
Completes basic changes to support per-device/per-link TCP receive window size
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/include/nuttx/net/netconfig.h | 47 | ||||
-rw-r--r-- | nuttx/include/nuttx/net/netdev.h | 3 | ||||
-rw-r--r-- | nuttx/net/Kconfig | 38 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev_register.c | 15 | ||||
-rw-r--r-- | nuttx/net/tcp/tcp_send.c | 4 |
5 files changed, 78 insertions, 29 deletions
diff --git a/nuttx/include/nuttx/net/netconfig.h b/nuttx/include/nuttx/net/netconfig.h index 556930cc7..247160355 100644 --- a/nuttx/include/nuttx/net/netconfig.h +++ b/nuttx/include/nuttx/net/netconfig.h @@ -88,7 +88,7 @@ * There are other device-specific features that at tied to the link layer: * * - Maximum Transfer Unit (MTU) - * - TCP Receive Window size + * - 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 @@ -298,15 +298,17 @@ #define TCP_MSS(d) (NET_DEV_MTU(d) - NET_LL_HDRLEN(d) - IPTCP_HDRLEN) #ifdef CONFIG_NET_ETHERNET -# define MIN_TCP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPTCP_HDRLEN) -#else /* if defined(CONFIG_NET_SLIP) */ -# define MIN_TCP_MSS (CONFIG_NET_SLIP_MTU - IPTCP_HDRLEN) +# define ETH_TCP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPTCP_HDRLEN) +# define MIN_TCP_MSS ETH_TCP_MSS +#elif defined(CONFIG_NET_SLIP) +# define SLIP_TCP_MSS (CONFIG_NET_SLIP_MTU - IPTCP_HDRLEN) +# define MIN_TCP_MSS SLIP_TCP_MSS #endif #ifdef CONFIG_NET_SLIP -# define MAX_TCP_MSS (CONFIG_NET_SLIP_MTU - IPTCP_HDRLEN) -#else /* if defined(CONFIG_NET_ETHERNET) */ -# define MAX_TCP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPTCP_HDRLEN) +# define MAX_TCP_MSS SLIP_TCP_MSS +#elif defined(CONFIG_NET_ETHERNET) +# define MAX_TCP_MSS ETH_TCP_MSS #endif /* The size of the advertised receiver's window. @@ -318,10 +320,37 @@ * See the note above regarding the TCP MSS and CONFIG_NET_MULTILINK. */ -#ifndef CONFIG_NET_RECEIVE_WINDOW -# define CONFIG_NET_RECEIVE_WINDOW MIN_TCP_MSS +#ifdef CONFIG_NET_SLIP +# ifndef CONFIG_NET_SLIP_TCP_RECVWNDO +# define CONFIG_NET_SLIP_TCP_RECVWNDO SLIP_TCP_MSS +# endif #endif +#ifdef CONFIG_NET_ETHERNET +# ifndef CONFIG_NET_ETH_TCP_RECVWNDO +# define CONFIG_NET_ETH_TCP_RECVWNDO ETH_TCP_MSS +# endif +#endif + +#if defined(CONFIG_NET_MULTILINK) + /* We are supporting multiple network devices using different link layer + * protocols. Get the size of the receive window from the device structure. + */ + +# define NET_DEV_RCVWNDO(d) ((d)->d_recvwndo) + +#elif defined(CONFIG_NET_SLIP) + /* Only SLIP.. use the configured SLIP receive window size */ + +# define NET_DEV_RCVWNDO(d) CONFIG_NET_SLIP_TCP_RECVWNDO + +#else /* if defined(CONFIG_NET_ETHERNET) */ + /* Only Ethernet.. use the configured SLIP receive window size */ + +# define NET_DEV_RCVWNDO(d) CONFIG_NET_ETH_TCP_RECVWNDO + +#endif /* MULTILINK or SLIP or ETHERNET */ + /* How long a connection should stay in the TIME_WAIT state. * * This configuration option has no real implication, and it should be diff --git a/nuttx/include/nuttx/net/netdev.h b/nuttx/include/nuttx/net/netdev.h index 70d965be0..42fcb2848 100644 --- a/nuttx/include/nuttx/net/netdev.h +++ b/nuttx/include/nuttx/net/netdev.h @@ -102,6 +102,9 @@ struct net_driver_s uint8_t d_lltype; /* See enum net_datalink_e */ uint8_t d_llhdrlen; /* Link layer header size */ uint16_t d_mtu; /* Maximum packet size */ +#ifdef CONFIG_NET_TCP + uint16_t d_recvwndo; /* TCP receive window size */ +#endif #endif #ifdef CONFIG_NET_ETHERNET diff --git a/nuttx/net/Kconfig b/nuttx/net/Kconfig index 53f2f93e6..baad94ae0 100644 --- a/nuttx/net/Kconfig +++ b/nuttx/net/Kconfig @@ -29,6 +29,15 @@ config NET_NOINTS Otherwise, it assumed that uIP will be called from interrupt level handling and critical sections will be managed by enabling and disabling interrupts. +config NET_PROMISCUOUS + bool "Promiscuous mode" + default n + ---help--- + Force the Ethernet driver to operate in promiscuous mode (if supported + by the Ethernet driver). + +menu "Driver buffer configuration" + config NET_MULTIBUFFER bool "Use multiple device-side I/O buffers" default n @@ -40,13 +49,6 @@ config NET_MULTIBUFFER Or, as another example, the driver may support queuing of concurrent input/ouput and output transfers for better performance. -config NET_PROMISCUOUS - bool "Promiscuous mode" - default n - ---help--- - Force the Ethernet driver to operate in promiscuous mode (if supported - by the Ethernet driver). - config NET_ETH_MTU int "Ethernet packet buffer size (MTU)" default 1294 if NET_IPv6 @@ -66,6 +68,17 @@ config NET_ETH_MTU IPv6 hosts are required to be able to handle an MSS of 1220 octets, resulting in a minimum buffer size of of 1220+20+40+14 = 1294 +config NET_ETH_TCP_RECVWNDO + int "Ethernet receive window size" + default 1220 if NET_IPv6 + default 536 if !NET_IPv6 + depends on NET_ETHERNET && NET_TCP + ---help--- + The size of the advertised receiver's window. Should be set low + (i.e., to the size of the MSS) if the application is slow to process + incoming data, or high (32768 bytes) if the application processes + data quickly. + config NET_SLIP_MTU int # "SLIP packet buffer size (MTU)" default 296 @@ -79,11 +92,10 @@ config NET_SLIP_MTU support at lest 256+20+20 = 296. Values other than 296 are not recommended. -config NET_RECEIVE_WINDOW - int "Receive window size" - default 1220 if !NET_SLIP && NET_IPv6 - default 536 if !NET_SLIP && !NET_IPv6 - default 256 if NET_SLIP && !NET_IPv6 +config NET_SLIP_TCP_RECVWNDO + int "SLIP receive window size" + default 256 + depends on NET_SLIP && NET_TCP ---help--- The size of the advertised receiver's window. Should be set low (i.e., to the size of the MSS) if the application is slow to process @@ -101,6 +113,8 @@ config NET_GUARDSIZE packet size will be chopped down to the size indicated in the TCP header. +end menu # Driver buffer configuration + menu "Data link support" config NET_MULTILINK diff --git a/nuttx/net/netdev/netdev_register.c b/nuttx/net/netdev/netdev_register.c index 26bf8ecf7..6b90e7ba7 100644 --- a/nuttx/net/netdev/netdev_register.c +++ b/nuttx/net/netdev/netdev_register.c @@ -135,6 +135,9 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype) case NET_LL_ETHERNET: /* Ethernet */ dev->d_llhdrlen = ETH_HDRLEN; dev->d_mtu = CONFIG_NET_ETH_MTU; +#ifdef CONFIG_NET_TCP + dev->d_recvwndo = CONFIG_NET_ETH_RECVWNDO; +#endif devfmt = NETDEV_ETH_FORMAT; break; #endif @@ -143,6 +146,9 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype) case NET_LL_SLIP: /* Serial Line Internet Protocol (SLIP) */ dev->d_llhdrlen = 0; dev->d_mtu = CONFIG_NET_SLIP_MTU; +#ifdef CONFIG_NET_TCP + dev->d_recvwndo = CONFIG_NET_SLIP_RECVWNDO; +#endif devfmt = NETDEV_SLIP_FORMAT; break; #endif @@ -151,16 +157,13 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype) case NET_LL_PPP: /* Point-to-Point Protocol (PPP) */ dev->d_llhdrlen = 0; dev->d_mtu = CONFIG_NET_PPP_MTU; +#ifdef CONFIG_NET_TCP + dev->d_recvwndo = CONFIG_NET_PPP_RECVWNDO; +#endif devfmt = NETDEV_PPP_FORMAT; break; #endif - /* REVISIT: Here we must also set the size of the link header - * header the precedes network layer headers. - */ - - break; - default: nlldbg("ERROR: Unrecognized link type: %d\n", lltype); return -EINVAL; diff --git a/nuttx/net/tcp/tcp_send.c b/nuttx/net/tcp/tcp_send.c index d68855511..2e8d23115 100644 --- a/nuttx/net/tcp/tcp_send.c +++ b/nuttx/net/tcp/tcp_send.c @@ -201,8 +201,8 @@ static void tcp_sendcommon(FAR struct net_driver_s *dev, } else { - pbuf->wnd[0] = ((CONFIG_NET_RECEIVE_WINDOW) >> 8); - pbuf->wnd[1] = ((CONFIG_NET_RECEIVE_WINDOW) & 0xff); + pbuf->wnd[0] = ((NET_DEV_RCVWNDO(dev)) >> 8); + pbuf->wnd[1] = ((NET_DEV_RCVWNDO(dev)) & 0xff); } /* Finish the IP portion of the message, calculate checksums and send |