netdev/register: configurable net packet size

Change-Id: I2af571a0273e67a06c1b4543eac3ded7cfdd8060
Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
chao.an 2020-05-14 15:52:13 +08:00 committed by patacongo
parent 03f462c5cd
commit 9cc2f50405

View File

@ -237,8 +237,8 @@ static int get_ifindex(void)
* *
* Input Parameters: * Input Parameters:
* dev - The device driver structure to be registered. * dev - The device driver structure to be registered.
* lltype - Link level protocol used by the driver (Ethernet, SLIP, TUN, ... * lltype - Link level protocol used by the driver (Ethernet, SLIP, TUN,
* ... * ...)
* *
* Returned Value: * Returned Value:
* 0:Success; negated errno on failure * 0:Success; negated errno on failure
@ -253,6 +253,8 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
{ {
FAR char devfmt_str[IFNAMSIZ]; FAR char devfmt_str[IFNAMSIZ];
FAR const char *devfmt; FAR const char *devfmt;
uint16_t pktsize = 0;
uint8_t llhdrlen = 0;
int devnum; int devnum;
#ifdef CONFIG_NETDEV_IFINDEX #ifdef CONFIG_NETDEV_IFINDEX
int ifindex; int ifindex;
@ -268,63 +270,63 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
{ {
#ifdef CONFIG_NET_LOOPBACK #ifdef CONFIG_NET_LOOPBACK
case NET_LL_LOOPBACK: /* Local loopback */ case NET_LL_LOOPBACK: /* Local loopback */
dev->d_llhdrlen = 0; llhdrlen = 0;
dev->d_pktsize = NET_LO_PKTSIZE; pktsize = NET_LO_PKTSIZE;
devfmt = NETDEV_LO_FORMAT; devfmt = NETDEV_LO_FORMAT;
break; break;
#endif #endif
#ifdef CONFIG_NET_ETHERNET #ifdef CONFIG_NET_ETHERNET
case NET_LL_ETHERNET: /* Ethernet */ case NET_LL_ETHERNET: /* Ethernet */
dev->d_llhdrlen = ETH_HDRLEN; llhdrlen = ETH_HDRLEN;
dev->d_pktsize = CONFIG_NET_ETH_PKTSIZE; pktsize = CONFIG_NET_ETH_PKTSIZE;
devfmt = NETDEV_ETH_FORMAT; devfmt = NETDEV_ETH_FORMAT;
break; break;
#endif #endif
#ifdef CONFIG_DRIVERS_IEEE80211 #ifdef CONFIG_DRIVERS_IEEE80211
case NET_LL_IEEE80211: /* IEEE 802.11 */ case NET_LL_IEEE80211: /* IEEE 802.11 */
dev->d_llhdrlen = ETH_HDRLEN; llhdrlen = ETH_HDRLEN;
dev->d_pktsize = CONFIG_NET_ETH_PKTSIZE; pktsize = CONFIG_NET_ETH_PKTSIZE;
devfmt = NETDEV_WLAN_FORMAT; devfmt = NETDEV_WLAN_FORMAT;
break; break;
#endif #endif
#ifdef CONFIG_NET_BLUETOOTH #ifdef CONFIG_NET_BLUETOOTH
case NET_LL_BLUETOOTH: /* Bluetooth */ case NET_LL_BLUETOOTH: /* Bluetooth */
dev->d_llhdrlen = BLUETOOTH_MAX_HDRLEN; /* Determined at runtime */ llhdrlen = BLUETOOTH_MAX_HDRLEN; /* Determined at runtime */
#ifdef CONFIG_NET_6LOWPAN #ifdef CONFIG_NET_6LOWPAN
dev->d_pktsize = CONFIG_NET_6LOWPAN_PKTSIZE; pktsize = CONFIG_NET_6LOWPAN_PKTSIZE;
#endif #endif
devfmt = NETDEV_BNEP_FORMAT; devfmt = NETDEV_BNEP_FORMAT;
break; break;
#endif #endif
#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154) #if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154)
case NET_LL_IEEE802154: /* IEEE 802.15.4 MAC */ case NET_LL_IEEE802154: /* IEEE 802.15.4 MAC */
case NET_LL_PKTRADIO: /* Non-IEEE 802.15.4 packet radio */ case NET_LL_PKTRADIO: /* Non-IEEE 802.15.4 packet radio */
dev->d_llhdrlen = 0; /* Determined at runtime */ llhdrlen = 0; /* Determined at runtime */
#ifdef CONFIG_NET_6LOWPAN #ifdef CONFIG_NET_6LOWPAN
dev->d_pktsize = CONFIG_NET_6LOWPAN_PKTSIZE; pktsize = CONFIG_NET_6LOWPAN_PKTSIZE;
#endif #endif
devfmt = NETDEV_WPAN_FORMAT; devfmt = NETDEV_WPAN_FORMAT;
break; break;
#endif #endif
#ifdef CONFIG_NET_SLIP #ifdef CONFIG_NET_SLIP
case NET_LL_SLIP: /* Serial Line Internet Protocol (SLIP) */ case NET_LL_SLIP: /* Serial Line Internet Protocol (SLIP) */
dev->d_llhdrlen = 0; llhdrlen = 0;
dev->d_pktsize = CONFIG_NET_SLIP_PKTSIZE; pktsize = CONFIG_NET_SLIP_PKTSIZE;
devfmt = NETDEV_SLIP_FORMAT; devfmt = NETDEV_SLIP_FORMAT;
break; break;
#endif #endif
#ifdef CONFIG_NET_TUN #ifdef CONFIG_NET_TUN
case NET_LL_TUN: /* Virtual Network Device (TUN) */ case NET_LL_TUN: /* Virtual Network Device (TUN) */
dev->d_llhdrlen = 0; /* This will be overwritten by tun_ioctl llhdrlen = 0; /* This will be overwritten by tun_ioctl
* if used as a TAP (layer 2) device */ * if used as a TAP (layer 2) device */
dev->d_pktsize = CONFIG_NET_TUN_PKTSIZE; pktsize = CONFIG_NET_TUN_PKTSIZE;
devfmt = NETDEV_TUN_FORMAT; devfmt = NETDEV_TUN_FORMAT;
break; break;
#endif #endif
@ -333,6 +335,18 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
return -EINVAL; return -EINVAL;
} }
/* Update the package length */
if (dev->d_llhdrlen == 0)
{
dev->d_llhdrlen = llhdrlen;
}
if (dev->d_pktsize == 0)
{
dev->d_pktsize = pktsize;
}
/* Remember the verified link type */ /* Remember the verified link type */
dev->d_lltype = (uint8_t)lltype; dev->d_lltype = (uint8_t)lltype;