diff --git a/src/system/SystemConfig.h b/src/system/SystemConfig.h index fba85f5caafc4f..420cefef1290f4 100644 --- a/src/system/SystemConfig.h +++ b/src/system/SystemConfig.h @@ -359,15 +359,21 @@ #endif /* CHIP_SYSTEM_CONFIG_PACKETBUFFER_POOL_SIZE */ /** - * @def CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE + * @def CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM * * @brief - * LwIP @pbuf_type for System::PacketBuffer allocations. + * In LwIP builds, this selects whether to use LwIP @pbuf_type @PBUF_RAM (1) + * or @PBUF_POOL (0) for System::PacketBuffer allocations. * * Note that this does not affect allocations by LwIP itself, e.g. the normal receive path. */ -#ifndef CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE -#define CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE PBUF_POOL +#ifndef CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM +#define CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM 0 +#endif /* CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM */ + +// Catch configurations attempting to use the former method (see issue #29208). +#ifdef CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE +#error "See CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM" #endif /* CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE */ /** diff --git a/src/system/SystemPacketBuffer.cpp b/src/system/SystemPacketBuffer.cpp index 209a80b8218c18..32f4b8e3830077 100644 --- a/src/system/SystemPacketBuffer.cpp +++ b/src/system/SystemPacketBuffer.cpp @@ -501,7 +501,7 @@ PacketBufferHandle PacketBufferHandle::New(size_t aAvailableSize, uint16_t aRese #if CHIP_SYSTEM_CONFIG_USE_LWIP lPacket = static_cast( - pbuf_alloc(PBUF_RAW, static_cast(lAllocSize), CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE)); + pbuf_alloc(PBUF_RAW, static_cast(lAllocSize), CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE)); SYSTEM_STATS_UPDATE_LWIP_PBUF_COUNTS(); diff --git a/src/system/SystemPacketBufferInternal.h b/src/system/SystemPacketBufferInternal.h index e044e0d0f3819b..b0000f4e665df9 100644 --- a/src/system/SystemPacketBufferInternal.h +++ b/src/system/SystemPacketBufferInternal.h @@ -54,12 +54,25 @@ * * True if packet buffers are allocated from an LwIP pool (either standard or custom). */ -#if CHIP_SYSTEM_CONFIG_USE_LWIP && (CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_TYPE == PBUF_POOL) +#if CHIP_SYSTEM_CONFIG_USE_LWIP && !CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM #define CHIP_SYSTEM_PACKETBUFFER_FROM_LWIP_POOL 1 #else #define CHIP_SYSTEM_PACKETBUFFER_FROM_LWIP_POOL 0 #endif +/** + * CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE + * + * LwIP @pbuf_type for System::PacketBuffer allocations. + */ +#if CHIP_SYSTEM_CONFIG_USE_LWIP +#if CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM +#define CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE PBUF_RAM +#else +#define CHIP_SYSTEM_PACKETBUFFER_LWIP_PBUF_TYPE PBUF_POOL +#endif +#endif + /** * CHIP_SYSTEM_PACKETBUFFER_FROM_LWIP_STANDARD_POOL * @@ -114,3 +127,7 @@ CHIP_SYSTEM_PACKETBUFFER_FROM_LWIP_POOL #error "Inconsistent PacketBuffer LwIP pool configuration" #endif + +#if (CHIP_SYSTEM_PACKETBUFFER_FROM_LWIP_POOL + CHIP_SYSTEM_CONFIG_PACKETBUFFER_LWIP_PBUF_RAM) > 1 +#error "Inconsistent PacketBuffer LwIP pbuf_type configuration" +#endif