diff --git a/README.txt b/README.txt index 59648d01f4c..5d3721f4c50 100644 --- a/README.txt +++ b/README.txt @@ -464,9 +464,9 @@ Notes about Header Files Certain header files, such as setjmp.h, stdarg.h, and math.h, may still be needed from your toolchain and your compiler may not, however, be able - to find these if you compile NuttX without using standard header file. - If that is the case, one solution is to copy those header file from - your toolchain into the NuttX include directory. + to find these if you compile NuttX without using standard header files + (ie., with -nostdinc). If that is the case, one solution is to copy + those header file from your toolchain into the NuttX include directory. Duplicated Header Files. diff --git a/include/nuttx/net/netconfig.h b/include/nuttx/net/netconfig.h index 1e79580ee35..77689ae32c5 100644 --- a/include/nuttx/net/netconfig.h +++ b/include/nuttx/net/netconfig.h @@ -226,6 +226,12 @@ # define MIN_NET_DEV_MTU CONFIG_NET_6LOWPAN_MTU # define MAX_NET_DEV_MTU CONFIG_NET_6LOWPAN_MTU +/* For the IEEE802.15.4 MAC device, we will use the packet MTU + * (which is probably much larger than the IEEE802.15.4 fram size) + */ + +# define NET_LO_MTU MAX_NET_DEV_MTU + #else /* Perhaps only Unix domain sockets or the loopback device */ @@ -418,24 +424,105 @@ * the minimum MSS for that case. */ -#define TCP_MSS(d,h) (NET_DEV_MTU(d) - NET_LL_HDRLEN(d) - TCP_HDRLEN - (h)) -#define LO_TCP_MSS(h) (NET_LO_MTU - (h)) +#define TCP_MSS(d,h) (NET_DEV_MTU(d) - NET_LL_HDRLEN(d) - TCP_HDRLEN - (h)) +#define LO_TCP_MSS(h) (NET_LO_MTU - (h)) -/* If Ethernet is supported, then it will have the smaller MSS */ - -#if defined(CONFIG_NET_SLIP) -# define SLIP_TCP_MSS(h) (CONFIG_NET_SLIP_MTU - (h)) -# define __MIN_TCP_MSS(h) SLIP_TCP_MSS(h) -#elif defined(CONFIG_NET_LOOPBACK) -# define LO_TCP_MSS(h) (NET_LO_MTU - (h)) -# define __MIN_TCP_MSS(h) LO_TCP_MSS(h) -#endif +/* Get the smallest and largest */ #ifdef CONFIG_NET_ETHERNET -# define ETH_TCP_MSS(h) (CONFIG_NET_ETH_MTU - ETH_HDRLEN - (h)) -# undef __MIN_TCP_MSS -# define __MIN_TCP_MSS(h) ETH_TCP_MSS(h) -# define __MAX_TCP_MSS(h) ETH_TCP_MSS(h) +# define ETH_TCP_MSS(h) (CONFIG_NET_ETH_MTU - ETH_HDRLEN - (h)) +# ifndef CONFIG_NET_MULTILINK +# define __MIN_TCP_MSS(h) ETH_TCP_MSS(h) +# define __MAX_TCP_MSS(h) ETH_TCP_MSS(h) +# endif +#endif + +#ifdef CONFIG_NET_6LOWPAN +# define IEEE802154_TCP_MSS(h) CONFIG_NET_6LOWPAN_MAXPAYLOAD +# ifndef CONFIG_NET_MULTILINK +# define __MIN_TCP_MSS(h) IEEE802154_TCP_MSS(h) +# define __MAX_TCP_MSS(h) IEEE802154_TCP_MSS(h) +# endif +#endif + +#ifdef CONFIG_NET_LOOPBACK +# define LO_TCP_MSS(h) (NET_LO_MTU - (h)) +# ifndef CONFIG_NET_MULTILINK +# define __MIN_TCP_MSS(h) LO_TCP_MSS(h) +# define __MAX_TCP_MSS(h) LO_TCP_MSS(h) +# endif +#endif + +#ifdef CONFIG_NET_SLIP +# define SLIP_TCP_MSS(h) (CONFIG_NET_SLIP_MTU - (h)) +# ifndef CONFIG_NET_MULTILINK +# define __MIN_TCP_MSS(h) SLIP_TCP_MSS(h) +# define __MAX_TCP_MSS(h) SLIP_TCP_MSS(h) +# endif +#endif + +#ifdef CONFIG_NET_MULTILINK +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS + +# ifdef CONFIG_NET_ETHERNET +# ifdef __LAST_MIN_TCP_MSS +# define __MIN_TCP_MSS(h) MIN(ETH_TCP_MSS(h),__LAST_MIN_TCP_MSS(h)) +# define __MAX_TCP_MSS(h) MAX(ETH_TCP_MSS(h),__LAST_MAX_TCP_MSS(h)) +# else +# define __MIN_TCP_MSS(h) ETH_TCP_MSS(h) +# define __MAX_TCP_MSS(h) ETH_TCP_MSS(h) +# endif +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS +# define __LAST_MIN_TCP_MSS(h) __MIN_TCP_MSS(h) +# define __LAST_MAX_TCP_MSS(h) __MAX_TCP_MSS(h) +# endif + +# ifdef CONFIG_NET_6LOWPAN +# ifdef __LAST_MIN_TCP_MSS +# define __MIN_TCP_MSS(h) MIN(IEEE802154_TCP_MSS(h),__LAST_MIN_TCP_MSS(h)) +# define __MAX_TCP_MSS(h) MAX(IEEE802154_TCP_MSS(h),__LAST_MAX_TCP_MSS(h)) +# else +# define __MIN_TCP_MSS(h) IEEE802154_TCP_MSS(h) +# define __MAX_TCP_MSS(h) IEEE802154_TCP_MSS(h) +# endif +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS +# define __LAST_MIN_TCP_MSS(h) __MIN_TCP_MSS(h) +# define __LAST_MAX_TCP_MSS(h) __MAX_TCP_MSS(h) +# endif + +# ifdef CONFIG_NET_LOOPBACK +# ifdef __LAST_MIN_TCP_MSS +# define __MIN_TCP_MSS(h) MIN(LO_TCP_MSS(h),__LAST_MIN_TCP_MSS(h)) +# define __MAX_TCP_MSS(h) MAX(LO_TCP_MSS(h),__LAST_MAX_TCP_MSS(h)) +# else +# define __MIN_TCP_MSS(h) LO_TCP_MSS(h) +# define __MAX_TCP_MSS(h) LO_TCP_MSS(h) +# endif +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS +# define __LAST_MIN_TCP_MSS(h) __MIN_TCP_MSS(h) +# define __LAST_MAX_TCP_MSS(h) __MAX_TCP_MSS(h) +# endif + +# ifdef CONFIG_NET_SLIP +# ifdef __LAST_MIN_TCP_MSS +# define __MIN_TCP_MSS(h) MIN(SLIP_TCP_MSS(h),__LAST_MIN_TCP_MSS(h)) +# define __MAX_TCP_MSS(h) MAX(SLIP_TCP_MSS(h),__LAST_MAX_TCP_MSS(h)) +# else +# define __MIN_TCP_MSS(h) SLIP_TCP_MSS(h) +# define __MAX_TCP_MSS(h) SLIP_TCP_MSS(h) +# endif +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS +# define __LAST_MIN_TCP_MSS(h) __MIN_TCP_MSS(h) +# define __LAST_MAX_TCP_MSS(h) __MAX_TCP_MSS(h) +# endif + +# undef __LAST_MIN_TCP_MSS +# undef __LAST_MAX_TCP_MSS #endif /* If SLIP is supported, then it will have the larger MSS */ diff --git a/net/sixlowpan/sixlowpan_tcpsend.c b/net/sixlowpan/sixlowpan_tcpsend.c index b515933053f..4e9f01d2378 100644 --- a/net/sixlowpan/sixlowpan_tcpsend.c +++ b/net/sixlowpan/sixlowpan_tcpsend.c @@ -126,14 +126,22 @@ ssize_t psock_6lowpan_tcp_send(FAR struct socket *psock, FAR const void *buf, #ifdef CONFIG_NETDEV_MULTINIC dev = netdev_findby_ipv6addr(conn->u.ipv6.laddr, conn->u.ipv6.raddr); +#ifdef CONFIG_NETDEV_MULTILINK if (dev == NULL || dev->d_lltype != NET_LL_IEEE802154) +#else + if (dev == NULL) +#endif { nwarn("WARNING: Not routable or not IEEE802.15.4 MAC\n"); return (ssize_t)-ENETUNREACH; } #else dev = netdev_findby_ipv6addr(conn->u.ipv6.raddr); +#ifdef CONFIG_NETDEV_MULTILINK + if (dev == NULL || dev->d_lltype != NET_LL_IEEE802154) +#else if (dev == NULL) +#endif { nwarn("WARNING: Not routable\n"); return (ssize_t)-ENETUNREACH; diff --git a/net/sixlowpan/sixlowpan_udpsend.c b/net/sixlowpan/sixlowpan_udpsend.c index be128918caf..7f558101805 100644 --- a/net/sixlowpan/sixlowpan_udpsend.c +++ b/net/sixlowpan/sixlowpan_udpsend.c @@ -127,14 +127,22 @@ ssize_t psock_6lowpan_udp_send(FAR struct socket *psock, FAR const void *buf, #ifdef CONFIG_NETDEV_MULTINIC dev = netdev_findby_ipv6addr(conn->u.ipv6.laddr, conn->u.ipv6.raddr); +#ifdef CONFIG_NETDEV_MULTILINK if (dev == NULL || dev->d_lltype != NET_LL_IEEE802154) +#else + if (dev == NULL) +#endif { nwarn("WARNING: Not routable or not IEEE802.15.4 MAC\n"); return (ssize_t)-ENETUNREACH; } #else dev = netdev_findby_ipv6addr(conn->u.ipv6.raddr); +#ifdef CONFIG_NETDEV_MULTILINK + if (dev == NULL || dev->d_lltype != NET_LL_IEEE802154) +#else if (dev == NULL) +#endif { nwarn("WARNING: Not routable\n"); return (ssize_t)-ENETUNREACH;