Parent epic: #254
Problem
Core/Interface/SolidSyslogTunablesDefaults.h carries 35 *_POOL_SIZE tunables. For platform/vendor-selected classes the same role is named once per implementation — SOLIDSYSLOG_POSIX_TCP_STREAM_POOL_SIZE, _WINSOCK_TCP_STREAM_, _PLUS_TCP_TCP_STREAM_, _LWIP_RAW_TCP_STREAM_ are four names for "how many TCP streams". Only one implementation is ever live in a given build (platform backends are mutually exclusive at link time), so:
- the integrator must know which platform they are on to find the knob that matters, and reasons about a role they cannot name;
- the table grows O(roles) with every new OS / network stack / crypto vendor instead of O(1).
SOLIDSYSLOG_ADDRESS_POOL_SIZE already proves the role-based model — one tunable shared across the Posix / Winsock / PlusTcp Address implementations. This story extends that established pattern consistently to the remaining platform- and vendor-selected classes.
Change
Collapse 8 role groups to single role-named tunables. Clean break — no deprecated aliases (pre-1.0).
| New role tunable |
Replaces |
Default |
SOLIDSYSLOG_TCP_STREAM_POOL_SIZE |
POSIX / WINSOCK / PLUS_TCP / LWIP_RAW TCP stream |
2 |
SOLIDSYSLOG_DATAGRAM_POOL_SIZE |
POSIX / WINSOCK / PLUS_TCP / LWIP_RAW datagram |
1 |
SOLIDSYSLOG_RESOLVER_POOL_SIZE |
GETADDRINFO / WINSOCK / PLUS_TCP / LWIP_RAW / LWIP_RAW_DNS |
1 |
SOLIDSYSLOG_MUTEX_POOL_SIZE |
POSIX / WINDOWS / FREE_RTOS mutex |
1 |
SOLIDSYSLOG_FILE_POOL_SIZE |
POSIX / WINDOWS / FATFS file |
1 |
SOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZE |
STD / WINDOWS atomic counter |
1 |
SOLIDSYSLOG_TLS_STREAM_POOL_SIZE |
OpenSSL / mbedTLS TLS stream (name already exists for OpenSSL; mbedTLS folds in) |
1 |
SOLIDSYSLOG_HMAC_SHA256_POLICY_POOL_SIZE |
OpenSSL / mbedTLS HMAC policy |
1 |
Net: 35 -> 18 pool tunables.
Within every role group the current defaults are already uniform (all TCP streams = 2; all datagrams / resolvers / mutexes / files / counters / TLS / HMAC = 1), so there is no default-value reconciliation — each role macro simply takes the group common value. Preserve all floor static_asserts.
Convention (the new rule)
Documented at the head of the tunables file and codified in docs/NAMING.md:
Pool-size tunables are named by role, not platform. The pool counts what the integrator creates, regardless of which platform/vendor implementation provides it.
Two same-platform coexistence cases now share a role pool (instead of two pools of 1):
- lwIP numeric + DNS resolver — both compile on an lwIP target and may coexist (DNS is a superset). Wire both -> set
SOLIDSYSLOG_RESOLVER_POOL_SIZE to 2.
- Two crypto vendors in one binary (OpenSSL + mbedTLS TLS stream, or both HMAC policies) — one vendor per build is the norm, but if both are wired, set the role pool accordingly.
This matches how Sender / Buffer pools already behave.
Files affected
One mechanical macro reference per file, no logic change:
Core/Interface/SolidSyslogTunablesDefaults.h — consolidate 25 macro blocks into 8 role blocks (keep floor static_asserts).
- ~25
Platform/**/*Static.c — point each pool array at its role macro.
- ~25
Tests/** — reference the role macro (pool/exhaustion tests).
Bdd/Targets/FreeRtos/solidsyslog_user_tunables.h, Bdd/Targets/FreeRtosLwip/solidsyslog_user_tunables.h — FREE_RTOS_MUTEX_POOL_SIZE -> MUTEX_POOL_SIZE.
Tests/Fixtures/SmallMessageSizeTunables.h — two atomic-counter override lines collapse to one SOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZE.
CLAUDE.md, docs/NAMING.md, docs/integrating-lwip.md, docs/misra-deviations.md — name updates + convention.
No cross-macro value conflicts exist in the tree (verified): the only multi-override sites already set the same value for siblings that merge.
Test evidence
debug + clang-debug green.
- FreeRTOS-host, lwIP, and mbedTLS local images green (touches all platform trees).
- No coverage delta — rename / consolidation only, no new branches.
Acceptance criteria
Parent epic: #254
Problem
Core/Interface/SolidSyslogTunablesDefaults.hcarries 35*_POOL_SIZEtunables. For platform/vendor-selected classes the same role is named once per implementation —SOLIDSYSLOG_POSIX_TCP_STREAM_POOL_SIZE,_WINSOCK_TCP_STREAM_,_PLUS_TCP_TCP_STREAM_,_LWIP_RAW_TCP_STREAM_are four names for "how many TCP streams". Only one implementation is ever live in a given build (platform backends are mutually exclusive at link time), so:SOLIDSYSLOG_ADDRESS_POOL_SIZEalready proves the role-based model — one tunable shared across the Posix / Winsock / PlusTcp Address implementations. This story extends that established pattern consistently to the remaining platform- and vendor-selected classes.Change
Collapse 8 role groups to single role-named tunables. Clean break — no deprecated aliases (pre-1.0).
SOLIDSYSLOG_TCP_STREAM_POOL_SIZESOLIDSYSLOG_DATAGRAM_POOL_SIZESOLIDSYSLOG_RESOLVER_POOL_SIZESOLIDSYSLOG_MUTEX_POOL_SIZESOLIDSYSLOG_FILE_POOL_SIZESOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZESOLIDSYSLOG_TLS_STREAM_POOL_SIZESOLIDSYSLOG_HMAC_SHA256_POLICY_POOL_SIZENet: 35 -> 18 pool tunables.
Within every role group the current defaults are already uniform (all TCP streams = 2; all datagrams / resolvers / mutexes / files / counters / TLS / HMAC = 1), so there is no default-value reconciliation — each role macro simply takes the group common value. Preserve all floor
static_asserts.Convention (the new rule)
Documented at the head of the tunables file and codified in
docs/NAMING.md:Two same-platform coexistence cases now share a role pool (instead of two pools of 1):
SOLIDSYSLOG_RESOLVER_POOL_SIZEto 2.This matches how Sender / Buffer pools already behave.
Files affected
One mechanical macro reference per file, no logic change:
Core/Interface/SolidSyslogTunablesDefaults.h— consolidate 25 macro blocks into 8 role blocks (keep floor static_asserts).Platform/**/*Static.c— point each pool array at its role macro.Tests/**— reference the role macro (pool/exhaustion tests).Bdd/Targets/FreeRtos/solidsyslog_user_tunables.h,Bdd/Targets/FreeRtosLwip/solidsyslog_user_tunables.h—FREE_RTOS_MUTEX_POOL_SIZE->MUTEX_POOL_SIZE.Tests/Fixtures/SmallMessageSizeTunables.h— two atomic-counter override lines collapse to oneSOLIDSYSLOG_ATOMIC_COUNTER_POOL_SIZE.CLAUDE.md,docs/NAMING.md,docs/integrating-lwip.md,docs/misra-deviations.md— name updates + convention.No cross-macro value conflicts exist in the tree (verified): the only multi-override sites already set the same value for siblings that merge.
Test evidence
debug+clang-debuggreen.Acceptance criteria
static_assert.docs/NAMING.md.