From 519740236373311e4a96a5aab8f99cde7af98061 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Fri, 5 Jan 2024 14:10:24 +0800 Subject: [PATCH] [trel] add config for peer table size and packet pool size (#9750) --- src/core/BUILD.gn | 1 + src/core/config/trel.h | 66 ++++++++++++++++++++ src/core/openthread-core-config.h | 1 + src/core/radio/trel_interface.hpp | 5 +- src/posix/platform/openthread-posix-config.h | 10 +++ src/posix/platform/trel.cpp | 11 ++-- 6 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 src/core/config/trel.h diff --git a/src/core/BUILD.gn b/src/core/BUILD.gn index 5263637bd..f4fa5db94 100644 --- a/src/core/BUILD.gn +++ b/src/core/BUILD.gn @@ -825,6 +825,7 @@ source_set("libopenthread_core_config") { "config/srp_server.h", "config/time_sync.h", "config/tmf.h", + "config/trel.h", "openthread-core-config.h", ] public_configs = [ diff --git a/src/core/config/trel.h b/src/core/config/trel.h new file mode 100644 index 000000000..8d378ee03 --- /dev/null +++ b/src/core/config/trel.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2024, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * This file includes compile-time configurations for TREL. + * + */ + +#ifndef CONFIG_TREL_H_ +#define CONFIG_TREL_H_ + +/** + * @addtogroup config-trel + * + * @brief + * This module includes configuration variables for TREL. + * + * @{ + * + */ + +/** + * @def OPENTHREAD_CONFIG_TREL_PEER_TABLE_SIZE + * + * Specifies the capacity of TREL peer table. Only non-zero value + * will be directly used for setting the TREL peer table capacity. + * Zero value lets the size to be determined by the OT stack itself + * which is derived based on other configurations such as a child + * table size, neighbor table size, etc. + */ +#ifndef OPENTHREAD_CONFIG_TREL_PEER_TABLE_SIZE +#define OPENTHREAD_CONFIG_TREL_PEER_TABLE_SIZE (0) +#endif + +/** + * @} + * + */ + +#endif // CONFIG_TREL_H_ diff --git a/src/core/openthread-core-config.h b/src/core/openthread-core-config.h index 79640a84f..498eb627c 100644 --- a/src/core/openthread-core-config.h +++ b/src/core/openthread-core-config.h @@ -114,6 +114,7 @@ #include "config/srp_server.h" #include "config/time_sync.h" #include "config/tmf.h" +#include "config/trel.h" #undef OPENTHREAD_CORE_CONFIG_H_IN diff --git a/src/core/radio/trel_interface.hpp b/src/core/radio/trel_interface.hpp index 9ef09b2dd..3d48368a5 100644 --- a/src/core/radio/trel_interface.hpp +++ b/src/core/radio/trel_interface.hpp @@ -229,9 +229,12 @@ public: bool IsFilterEnabled(void) const { return mFiltered; } private: +#if OPENTHREAD_COFNIG_TREL_PEER_TABLE_SIZE != 0 + static constexpr uint16_t kPeerTableSize = OPENTHREAD_COFNIG_TREL_PEER_TABLE_SIZE; +#else static constexpr uint16_t kPeerTableExtraEntries = 32; static constexpr uint16_t kPeerTableSize = Mle::kMaxRouters + Mle::kMaxChildren + kPeerTableExtraEntries; - +#endif static const char kTxtRecordExtAddressKey[]; static const char kTxtRecordExtPanIdKey[]; diff --git a/src/posix/platform/openthread-posix-config.h b/src/posix/platform/openthread-posix-config.h index 87dbfe418..f39c6f2ac 100644 --- a/src/posix/platform/openthread-posix-config.h +++ b/src/posix/platform/openthread-posix-config.h @@ -419,4 +419,14 @@ #define OPENTHREAD_POSIX_CONFIG_EXIT_ON_INFRA_NETIF_LOST_ENABLE 1 #endif +/** + * @def OPENTHREAD_POSIX_CONFIG_TREL_TX_PACKET_POOL_SIZE + * + * This setting configures the capacity of TREL packet pool for transmission. + * + */ +#ifndef OPENTHREAD_POSIX_CONFIG_TREL_TX_PACKET_POOL_SIZE +#define OPENTHREAD_POSIX_CONFIG_TREL_TX_PACKET_POOL_SIZE 5 +#endif + #endif // OPENTHREAD_PLATFORM_CONFIG_H_ diff --git a/src/posix/platform/trel.cpp b/src/posix/platform/trel.cpp index a925cb84c..4e5ed53ec 100644 --- a/src/posix/platform/trel.cpp +++ b/src/posix/platform/trel.cpp @@ -51,20 +51,19 @@ #if OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE -#define TREL_MAX_PACKET_SIZE 1400 -#define TREL_PACKET_POOL_SIZE 5 +static constexpr uint16_t kMaxPacketSize = 1400; // The max size of a TREL packet. typedef struct TxPacket { struct TxPacket *mNext; - uint8_t mBuffer[TREL_MAX_PACKET_SIZE]; + uint8_t mBuffer[kMaxPacketSize]; uint16_t mLength; otSockAddr mDestSockAddr; } TxPacket; -static uint8_t sRxPacketBuffer[TREL_MAX_PACKET_SIZE]; +static uint8_t sRxPacketBuffer[kMaxPacketSize]; static uint16_t sRxPacketLength; -static TxPacket sTxPacketPool[TREL_PACKET_POOL_SIZE]; +static TxPacket sTxPacketPool[OPENTHREAD_POSIX_CONFIG_TREL_TX_PACKET_POOL_SIZE]; static TxPacket *sFreeTxPacketHead; // A singly linked list of free/available `TxPacket` from pool. static TxPacket *sTxPacketQueueTail; // A circular linked list for queued tx packets. @@ -456,7 +455,7 @@ void otPlatTrelSend(otInstance *aInstance, VerifyOrExit(sEnabled); - assert(aUdpPayloadLen <= TREL_MAX_PACKET_SIZE); + assert(aUdpPayloadLen <= kMaxPacketSize); // We try to send the packet immediately. If it fails (e.g., // network is down) `SendPacket()` returns `OT_ERROR_ABORT`. If