net/bluetooth: Since the max header is always reported, the max frame size for purposes of allocation is the max header lenght plus the max payload, even though the frames with the max payload never have the max header length.
This commit is contained in:
parent
d6e563312b
commit
39e393fa5f
4 changed files with 22 additions and 13 deletions
|
@ -60,16 +60,17 @@
|
|||
* mark.
|
||||
*/
|
||||
|
||||
#define BLUETOOTH_SMP_MTU 65
|
||||
|
||||
#define BLUETOOTH_L2CAP_HDRLEN 4 /* Size of L2CAP header */
|
||||
#define BLUETOOTH_ACL_HDRLEN 4 /* Size of ACL header */
|
||||
#define BLUETOOTH_H4_HDRLEN 1 /* Size of H4 header */
|
||||
|
||||
#define BLUETOOTH_FRAME_HDRLEN \
|
||||
#define BLUETOOTH_MAX_HDRLEN \
|
||||
(BLUETOOTH_L2CAP_HDRLEN + BLUETOOTH_ACL_HDRLEN + BLUETOOTH_H4_HDRLEN)
|
||||
|
||||
#define BLUETOOTH_MAX_FRAMELEN (BLUETOOTH_SMP_MTU + BLUETOOTH_FRAME_HDRLEN)
|
||||
#define BLUETOOTH_SMP_MTU 65
|
||||
#define BLUETOOTH_MAX_MTU 70
|
||||
|
||||
#define BLUETOOTH_MAX_FRAMELEN (BLUETOOTH_MAX_MTU + BLUETOOTH_MAX_HDRLEN)
|
||||
|
||||
#define BLUETOOTH_ADDRSIZE 6
|
||||
#define BLUETOOTH_ADDRCOPY(d,s) memcpy((d),(s),BLUETOOTH_ADDRSIZE)
|
||||
|
|
|
@ -74,7 +74,8 @@
|
|||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_NET_6LOWPAN) && defined(CONFIG_WIRELESS_PKTRADIO)
|
||||
#if defined(CONFIG_NET_6LOWPAN) && (defined(CONFIG_WIRELESS_PKTRADIO) || \
|
||||
defined(CONFIG_NET_BLUETOOTH))
|
||||
static inline int netdev_pktradio_addrlen(FAR struct net_driver_s *dev)
|
||||
{
|
||||
FAR struct radio_driver_s *radio = (FAR struct radio_driver_s *)dev;
|
||||
|
@ -154,14 +155,19 @@ int netdev_dev_lladdrsize(FAR struct net_driver_s *dev)
|
|||
}
|
||||
#endif /* CONFIG_WIRELESS_IEEE802154 */
|
||||
|
||||
#if defined(CONFIG_WIRELESS_PKTRADIO) || defined(CONFIG_NET_BLUETOOTH)
|
||||
#ifdef CONFIG_WIRELESS_PKTRADIO
|
||||
case NET_LL_PKTRADIO:
|
||||
#endif
|
||||
#ifdef CONFIG_NET_BLUETOOTH
|
||||
case NET_LL_BLUETOOTH:
|
||||
#endif
|
||||
{
|
||||
/* Return the size of the packet radio address */
|
||||
|
||||
return netdev_pktradio_addrlen(dev);
|
||||
}
|
||||
#endif /* CONFIG_WIRELESS_PKTRADIO */
|
||||
#endif /* CONFIG_WIRELESS_PKTRADIO || CONFIG_NET_BLUETOOTH */
|
||||
#endif /* CONFIG_NET_6LOWPAN */
|
||||
|
||||
default:
|
||||
|
|
|
@ -221,7 +221,7 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
|
|||
|
||||
#ifdef CONFIG_NET_BLUETOOTH
|
||||
case NET_LL_BLUETOOTH: /* Bluetooth */
|
||||
dev->d_llhdrlen = BLUETOOTH_FRAME_HDRLEN;
|
||||
dev->d_llhdrlen = BLUETOOTH_MAX_HDRLEN; /* Determined at runtime */
|
||||
#ifdef CONFIG_NET_6LOWPAN
|
||||
# warning Missing logic
|
||||
dev->d_mtu = CONFIG_NET_6LOWPAN_MTU;
|
||||
|
@ -237,7 +237,7 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype)
|
|||
#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154)
|
||||
case NET_LL_IEEE802154: /* IEEE 802.15.4 MAC */
|
||||
case NET_LL_PKTRADIO: /* Non-IEEE 802.15.4 packet radio */
|
||||
dev->d_llhdrlen = 0;
|
||||
dev->d_llhdrlen = 0; /* Determined at runtime */
|
||||
#ifdef CONFIG_NET_6LOWPAN
|
||||
dev->d_mtu = CONFIG_NET_6LOWPAN_MTU;
|
||||
#ifdef CONFIG_NET_TCP
|
||||
|
|
|
@ -223,7 +223,7 @@ static int btnet_advertise(FAR struct net_driver_s *dev)
|
|||
* a single Bluetooth device.
|
||||
*/
|
||||
|
||||
addr = g_btdev.bdaddr.val
|
||||
addr = g_btdev.bdaddr.val;
|
||||
|
||||
/* Set the MAC address using 6-byte local address from the device. */
|
||||
|
||||
|
@ -845,7 +845,9 @@ static int btnet_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
|
|||
static int btnet_get_mhrlen(FAR struct radio_driver_s *netdev,
|
||||
FAR const void *meta)
|
||||
{
|
||||
return BLUETOOTH_FRAME_HDRLEN;
|
||||
/* Always report the maximum frame length. */
|
||||
|
||||
return BLUETOOTH_MAX_HDRLEN;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -918,12 +920,12 @@ static int btnet_req_data(FAR struct radio_driver_s *netdev,
|
|||
framelist = iob->io_flink;
|
||||
iob->io_flink = NULL;
|
||||
|
||||
DEBUGASSERT(iob->io_offset == BLUETOOTH_FRAME_HDRLEN &&
|
||||
iob->io_len >= BLUETOOTH_FRAME_HDRLEN);
|
||||
DEBUGASSERT(iob->io_offset == BLUETOOTH_MAX_HDRLEN &&
|
||||
iob->io_len >= BLUETOOTH_MAX_HDRLEN);
|
||||
|
||||
/* Allocate a buffer to contain the IOB */
|
||||
|
||||
buf = bt_buf_alloc(BT_ACL_OUT, iob, BLUETOOTH_FRAME_HDRLEN);
|
||||
buf = bt_buf_alloc(BT_ACL_OUT, iob, BLUETOOTH_MAX_HDRLEN);
|
||||
if (buf == NULL)
|
||||
{
|
||||
wlerr("ERROR: Failed to allocate buffer container\n");
|
||||
|
|
Loading…
Reference in a new issue