Add link MTU size to network device structure.

This commit is contained in:
Gregory Nutt 2014-11-16 08:49:14 -06:00
parent d6680d8524
commit ca7486d7f3
3 changed files with 42 additions and 12 deletions

View File

@ -93,6 +93,26 @@
*/
# define NET_LL_HDRLEN(d) ((d)->d_llhdrlen)
# define NET_LL_MTU(d) ((d)->d_llmtu)
# ifdef CONFIG_NET_ETHERNET
# define _MIN_ETH_MTU CONFIG_NET_ETH_MTU
# define _MAX_ETH_MTU CONFIG_NET_ETH_MTU
# else
# define _MIN_ETH_MTU UINT16_MAX
# define _MAX_ETH_MTU 0
# endif
# ifdef CONFIG_NET_SLIP
# define _MIN_SLIP_MTU MIN(_MIN_ETH_MTU,CONFIG_NET_SLIP_MTU)
# define _MAX_SLIP_MTU MAX(_MAX_ETH_MTU,CONFIG_NET_SLIP_MTU)
# else
# define _MIN_SLIP_MTU _MIN_ETH_MTU
# define _MAX_SLIP_MTU _MAX_ETH_MTU
# endif
# define MIN_NET_LL_MTU _MIN_SLIP_MTU
# define MAX_NET_LL_MTU _MAX_SLIP_MTU
#elif defined(CONFIG_NET_SLIP)
/* There is no link layer header with SLIP */
@ -101,11 +121,17 @@
# error SLIP is not available for IPv6
# endif
# define NET_LL_HDRLEN(d) 0
# define NET_LL_MTU(d) CONFIG_NET_SLIP_MTU
# define MIN_NET_LL_MTU CONFIG_NET_SLIP_MTU
# define MAX_NET_LL_MTU CONFIG_NET_SLIP_MTU
#else /* if defined(CONFIG_NET_ETHERNET) */
/* Assume standard Ethernet link layer header */
# define NET_LL_HDRLEN(d) 14
# define NET_LL_MTU(d) CONFIG_NET_ETH_MTU
# define MIN_NET_LL_MTU CONFIG_NET_ETH_MTU
# define MAX_NET_LL_MTU CONFIG_NET_ETH_MTU
#endif /* MULTILINK or SLIP or ETHERNET */
@ -165,18 +191,18 @@
* than CONFIG_NET_BUFSIZE - NET_LL_HDRLEN(dev) - IPUDP_HDRLEN.
*/
#define UDP_MSS(d) (CONFIG_NET_BUFSIZE - NET_LL_HDRLEN(d) - IPUDP_HDRLEN)
#define UDP_MSS(d) (CONFIG_NET_ETH_MTU - NET_LL_HDRLEN(d) - IPUDP_HDRLEN)
#ifdef CONFIG_NET_ETHERNET
# define MIN_UDP_MSS (CONFIG_NET_BUFSIZE - ETH_HDRLEN - IPUDP_HDRLEN)
# define MIN_UDP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPUDP_HDRLEN)
#else /* if defined(CONFIG_NET_SLIP) */
# define MIN_UDP_MSS (CONFIG_NET_BUFSIZE - IPUDP_HDRLEN)
# define MIN_UDP_MSS (CONFIG_NET_ETH_MTU - IPUDP_HDRLEN)
#endif
#ifdef CONFIG_NET_SLIP
# define MAX_UDP_MSS (CONFIG_NET_BUFSIZE - IPUDP_HDRLEN)
# define MAX_UDP_MSS (CONFIG_NET_ETH_MTU - IPUDP_HDRLEN)
#else /* if defined(CONFIG_NET_ETHERNET) */
# define MAX_UDP_MSS (CONFIG_NET_BUFSIZE - ETH_HDRLEN - IPUDP_HDRLEN)
# define MAX_UDP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPUDP_HDRLEN)
#endif
/* TCP configuration options */
@ -239,7 +265,7 @@
#define TCP_MAXSYNRTX 5
/* The TCP maximum segment size. This is should not be set to more
* than CONFIG_NET_BUFSIZE - NET_LL_HDRLEN(dev) - IPTCP_HDRLEN.
* than CONFIG_NET_ETH_MTU - NET_LL_HDRLEN(dev) - IPTCP_HDRLEN.
*
* In the case where there are multiple network devices with different
* link layer protocols (CONFIG_NET_MULTILINK), each network device
@ -247,18 +273,18 @@
* the minimum MSS for that case.
*/
#define TCP_MSS(d) (CONFIG_NET_BUFSIZE - NET_LL_HDRLEN(d) - IPTCP_HDRLEN)
#define TCP_MSS(d) (CONFIG_NET_ETH_MTU - NET_LL_HDRLEN(d) - IPTCP_HDRLEN)
#ifdef CONFIG_NET_ETHERNET
# define MIN_TCP_MSS (CONFIG_NET_BUFSIZE - ETH_HDRLEN - IPTCP_HDRLEN)
# define MIN_TCP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPTCP_HDRLEN)
#else /* if defined(CONFIG_NET_SLIP) */
# define MIN_TCP_MSS (CONFIG_NET_BUFSIZE - IPTCP_HDRLEN)
# define MIN_TCP_MSS (CONFIG_NET_ETH_MTU - IPTCP_HDRLEN)
#endif
#ifdef CONFIG_NET_SLIP
# define MAX_TCP_MSS (CONFIG_NET_BUFSIZE - IPTCP_HDRLEN)
# define MAX_TCP_MSS (CONFIG_NET_ETH_MTU - IPTCP_HDRLEN)
#else /* if defined(CONFIG_NET_ETHERNET) */
# define MAX_TCP_MSS (CONFIG_NET_BUFSIZE - ETH_HDRLEN - IPTCP_HDRLEN)
# define MAX_TCP_MSS (CONFIG_NET_ETH_MTU - ETH_HDRLEN - IPTCP_HDRLEN)
#endif
/* The size of the advertised receiver's window.

View File

@ -101,6 +101,7 @@ struct net_driver_s
uint8_t d_lltype; /* See enum net_datalink_e */
uint8_t d_llhdrlen; /* Link layer header size */
uint16_t d_llmtu; /* Maximum packet size */
#endif
#ifdef CONFIG_NET_ETHERNET

View File

@ -83,7 +83,7 @@ static int g_next_devnum = 0;
* Public Data
****************************************************************************/
/* List of registered ethernet device drivers */
/* List of registered Ethernet device drivers */
struct net_driver_s *g_netdevices = NULL;
@ -134,6 +134,7 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
#ifdef CONFIG_NET_ETHERNET
case NET_LL_ETHERNET: /* Ethernet */
dev->d_llhdrlen = ETH_HDRLEN;
dev->d_llmtu = CONFIG_NET_ETH_MTU;
devfmt = NETDEV_ETH_FORMAT;
break;
#endif
@ -141,6 +142,7 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
#ifdef CONFIG_NET_SLIP
case NET_LL_SLIP: /* Serial Line Internet Protocol (SLIP) */
dev->d_llhdrlen = 0;
dev->d_llmtu = CONFIG_NET_SLIP_MTU;
devfmt = NETDEV_SLIP_FORMAT;
break;
#endif
@ -148,6 +150,7 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
#if 0 /* REVISIT: Not yet supported */
case NET_LL_PPP: /* Point-to-Point Protocol (PPP) */
dev->d_llhdrlen = 0;
dev->d_llmtu = CONFIG_NET_PPP_MTU;
devfmt = NETDEV_PPP_FORMAT;
break;
#endif