Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
7431be3
common: change: prepare interface identity before link-layer users
mgonzalezlopezudc Sep 18, 2026
aaa369f
ieee80211: change: separate capability and BSS state ownership
mgonzalezlopezudc Sep 18, 2026
c913a63
ieee80211: refactor: separate the read-only mode-set provider
mgonzalezlopezudc Sep 18, 2026
db9d61d
plan: add: declare capability and HT/GI implementation contracts
mgonzalezlopezudc Sep 18, 2026
e734003
common: change: prepare interface identity before link-layer users
mgonzalezlopezudc Sep 18, 2026
69f18c6
ieee80211: change: separate capability and BSS state ownership
mgonzalezlopezudc Sep 18, 2026
8f147ea
ieee80211: refactor: separate the read-only mode-set provider
mgonzalezlopezudc Sep 18, 2026
97898f8
ieee80211: format: remove redundant blank lines
mgonzalezlopezudc Sep 14, 2026
fbd2d71
ieee80211: add: require explicit data-mode guard interval queries
mgonzalezlopezudc Sep 14, 2026
3eadb65
ieee80211: fix: correct HT MCS 32, 73 and 76 definitions
mgonzalezlopezudc Sep 14, 2026
f3679f7
ieee80211: fix: distinguish band and preamble in mode caches
mgonzalezlopezudc Sep 14, 2026
39aa78b
ieee80211: fix: correct HT/VHT PPDU timing
mgonzalezlopezudc Sep 14, 2026
1d4e101
ieee80211: add+change: complete guard-interval mode lookup
mgonzalezlopezudc Sep 14, 2026
446257e
ieee80211: add: qualify fixed data rates by guard interval
mgonzalezlopezudc Sep 14, 2026
654cce6
ieee80211: fix: select mandatory response rates by bitrate
mgonzalezlopezudc Sep 14, 2026
b42a3e1
ieee80211: fix: use legacy basic rates for group-addressed frames
mgonzalezlopezudc Sep 14, 2026
3651b16
ieee80211: add+change: coordinate mode-set transitions
mgonzalezlopezudc Sep 14, 2026
ae9b366
ieee80211: fix: preserve reception state during radio reconfiguration
mgonzalezlopezudc Sep 14, 2026
3e7dca8
ieee80211: fix: enforce SSID element length bounds
mgonzalezlopezudc Sep 14, 2026
0001061
ieee80211: fix: mark malformed response AIDs incorrect
mgonzalezlopezudc Sep 14, 2026
b17b7e9
ieee80211: add: expose VHT MCS identity through the mode contract
mgonzalezlopezudc Sep 14, 2026
1ea317c
ieee80211: add: complete the supported VHT guard-interval catalog
mgonzalezlopezudc Sep 14, 2026
e4f236f
ieee80211: add+change: negotiate VHT capabilities for rate selection
mgonzalezlopezudc Sep 14, 2026
6c1176a
plan: add+change: record verified HT/GI comment closure
mgonzalezlopezudc Sep 18, 2026
9ff0fb1
tests.fingerprint: change: align inherited graphical expectations
mgonzalezlopezudc Sep 14, 2026
5637f19
plan: add: resolve the PR1148 audit findings
mgonzalezlopezudc Sep 14, 2026
b914b87
queueing: add+change: expose extraction and logical departures
mgonzalezlopezudc Sep 14, 2026
546089a
ieee80211: fix: track pending queue departures through signals
mgonzalezlopezudc Sep 14, 2026
2d11de0
ieee80211: add+fix: make originator ADDBA transactions explicit
mgonzalezlopezudc Sep 14, 2026
9803bb3
ieee80211: add+fix: reset recipient state on renegotiation
mgonzalezlopezudc Sep 14, 2026
e3f5f61
ieee80211: add+fix: reassemble and expire fragmented MAC frames
mgonzalezlopezudc Sep 14, 2026
ad8a9e2
ieee80211: add+fix: cancel superseded management transactions
mgonzalezlopezudc Sep 14, 2026
1855783
ieee80211: add+fix: protect Block Ack teardown generations
mgonzalezlopezudc Sep 14, 2026
683b8ea
ieee80211: add+fix: use absolute Block Ack inactivity deadlines
mgonzalezlopezudc Sep 14, 2026
11dfc17
ieee80211: add+fix: make fragment reassembly generation-safe
mgonzalezlopezudc Sep 14, 2026
a85c43c
ieee80211: add+fix: enforce receive lifetime during reordering
mgonzalezlopezudc Sep 14, 2026
6ffc197
ieee80211: add+fix: quarantine expired Block Ack agreements
mgonzalezlopezudc Sep 14, 2026
c410c0e
ieee80211: fix: skip incomplete data released by a BAR
mgonzalezlopezudc Sep 14, 2026
fe1ded8
ieee80211: fix: honor recipient Block Ack timeout policy
mgonzalezlopezudc Sep 14, 2026
4e448ec
ieee80211: fix: enforce valid A-MSDU fragmentation and sizing
mgonzalezlopezudc Sep 14, 2026
6034af1
ieee80211: fix: preserve management bodies during fragmentation
mgonzalezlopezudc Sep 14, 2026
6091e32
ieee80211: fix: flag malformed peer association IDs
mgonzalezlopezudc Sep 14, 2026
9c732c3
ieee80211: fix: retain negotiated A-MSDU support in Block Ack
mgonzalezlopezudc Sep 14, 2026
e920fcf
plan: change: record completed PR1148 verification
mgonzalezlopezudc Sep 15, 2026
357f43d
plan: location: archive the completed PR1148 plan
mgonzalezlopezudc Sep 15, 2026
db0cb19
ieee80211: fix: isolate Block Ack request state by receiver
mgonzalezlopezudc Sep 15, 2026
a7352e1
tests: fix: adapt cancellation regression to MIB ownership API
mgonzalezlopezudc Sep 21, 2026
b896202
feature(physicallayer): add HT Greenfield mode set and PHY transmissi…
mgonzalezlopezudc Aug 29, 2026
d7cdba1
feature(linklayer): implement HT control-response rate selection and …
mgonzalezlopezudc Aug 29, 2026
0c1f9a2
fix(ieee80211): negotiate HT Greenfield capability and fall back to H…
mgonzalezlopezudc Aug 30, 2026
cc734a5
fix(linklayer): accept supported HT-mixed CTS responses in Greenfield…
mgonzalezlopezudc Aug 30, 2026
af9b0ad
test(linklayer): add unit tests for Greenfield receiver capability an…
mgonzalezlopezudc Aug 30, 2026
3cbb43b
fix(physicallayer): fix transmission duration decomposition for Short…
mgonzalezlopezudc Aug 30, 2026
fb218b8
physicallayer: preserve scalar signal phase durations
mgonzalezlopezudc Sep 5, 2026
7446fa4
ieee80211: restore the timed HT and VHT header phase
mgonzalezlopezudc Sep 5, 2026
c243022
ieee80211: bound mandatory multicast rates by the requested rate
mgonzalezlopezudc Sep 5, 2026
048e202
ieee80211: require unambiguous configured response modes
mgonzalezlopezudc Sep 5, 2026
3b2348a
ieee80211: document the packet PHY HT40 limitation
mgonzalezlopezudc Sep 5, 2026
bea61f5
ieee80211: adapt Greenfield coverage to current GI contracts
mgonzalezlopezudc Sep 21, 2026
3e57468
Merge Greenfield and ADDBA dependencies for compressed Block Ack
mgonzalezlopezudc Sep 21, 2026
d55a6fa
feat(ieee80211): add HT compressed Block Ack
mgonzalezlopezudc Aug 15, 2026
fccae3e
fix(ieee80211): select Block Ack rates by base variant
mgonzalezlopezudc Aug 15, 2026
5992b7d
fix(ieee80211): answer valid compressed block ack requests
mgonzalezlopezudc Aug 15, 2026
f963a3a
fix(ieee80211): correct Block Ack receive-window handling
mgonzalezlopezudc Aug 16, 2026
bdff56d
fix(ieee80211): make Block Ack receive processing transactional
mgonzalezlopezudc Aug 16, 2026
8ab47d7
fix(ieee80211): record frames at Block Ack window start
mgonzalezlopezudc Aug 16, 2026
11b2532
ieee80211: preserve Block Ack transaction state
mgonzalezlopezudc Sep 5, 2026
7bc3a39
ieee80211: correlate responses with the active receive step
mgonzalezlopezudc Sep 6, 2026
bd51427
ieee80211: centralize Block Ack receive-window arithmetic
mgonzalezlopezudc Sep 6, 2026
98b70d4
ieee80211: Enforce compressed BAR eligibility before state changes
mgonzalezlopezudc Sep 6, 2026
b872e83
ieee80211: Reject ineligible BARs before renewing agreement lifetime
mgonzalezlopezudc Sep 6, 2026
b43d3b8
ieee80211: correlate Block Ack responses by starting sequence
mgonzalezlopezudc Sep 6, 2026
c8ca2a7
ieee80211: require HT operation for compressed Block Ack
mgonzalezlopezudc Sep 6, 2026
5bc425b
ieee80211: gate compressed BAR selection on the active mode
mgonzalezlopezudc Sep 6, 2026
f640fe2
ieee80211: limit Basic BAR acknowledgment transitions to 64 positions
mgonzalezlopezudc Sep 9, 2026
947f1af
ieee80211: adapt compressed Block Ack to upstream contracts
mgonzalezlopezudc Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
245 changes: 245 additions & 0 deletions WHATSNEW
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,192 @@ Notable backward incompatible changes are the following:
arrives, so renewal timing does not move; traffic from the client starts one
probeWait later.

16. IEEE 802.11 capability and BSS state ownership

HT capabilities are prepared independently of the active BSS operation.
Simplified associations prepare both peers before network configuration,
regardless of node declaration order. Accepted BSS changes publish a
bssStateChanged notification after management completes its bookkeeping.
Legacy simplified stations retain BSS identity and channel information
without accepting the HT operation advertised by an HT access point.

Custom WLAN modules must replace ModeSetListener and modesetChanged with
an explicit modeSetModule using IIeee80211ModeSetProvider, and replace
direct MIB BSS/profile writes with the owner APIs. Custom HT PHY contributors
use typed capability interfaces. The migration guide describes these source
and wiring changes.
The selected legacy QoS and non-QoS ad hoc fingerprints remain unchanged;
no recorded fingerprint baseline was updated.

17. Packet queue extraction and lifecycle signals

IPacketQueue now supports queue-lifecycle signals and predicate-based extraction.
Direct C++ implementations of IPacketQueue must implement findPacket(), the
predicate overload of dequeuePacket(), and must emit packetQueueDeparture
with PacketQueueRemovalDetails exactly once whenever a packet is dequeued,
explicitly removed, or destructively dropped. Listeners subscribe to the queue
module and filter the source to exclude descendant queue emissions. Providers
connected to CompoundPacketQueueBase must also implement IPacketExtractor so
that a compound queue preserves the provider's scheduling policy when it
extracts a matching packet. Direct C++
implementations of IPacketExtractor must replace selected-pointer extraction
with findPacket(predicate) and dequeuePacket(predicate); predicates may be
evaluated repeatedly and must be stable and side-effect free throughout one
logical selection. WrrScheduler, LabelScheduler, and PriorityScheduler accept
ordinary IPassivePacketSource inputs; they require IPacketCollection only when
collection/aggregate access is used and IPacketExtractor only when predicate
extraction is used, reporting the unsupported operation lazily.
PriorityScheduler aggregate queries no longer return -1 when an input lacks
IPacketCollection; getNumPackets() and getTotalLength() now report that
unsupported operation with cRuntimeError. Update callers that treated -1 as
an unknown aggregate size, or connect collection-capable providers.
A-MSDU policies now receive the provider-selected anchor and frame-eligibility
predicate. Additional policy-selected members are removed through exact
predicate dequeues, preserving scheduler/flow accounting without requiring
collection enumeration order to match scheduling order.
BasicMsduAggregationPolicy conservatively considers only collection members
after the anchor and never bypasses an earlier blocked same-flow member.
IPacketBuffer::ICallback requires explicit handlePacketDropping() and
handlePacketDropped() implementations. The first detaches the packet; the
second publishes its departure after all victims of the overload operation
have been detached. Custom buffer owners must implement both phases. Compound
queues propagate destructive drops through arbitrary non-queue wrappers and
nested compound queues exactly once. PacketBuffer rejects packets owned by a
cPacketQueue whose owner cannot participate in the buffer callback contract.

18. Block Ack DELBA agreement ownership

Custom IBlockAckAgreementHandlerCallback implementations must explicitly
implement releaseBlockAckAgreementFrames() and cancelBlockAckTeardown().
Custom IFrameSequenceHandler implementations must implement both
cancelFrameSequence() and abortFrameSequence(), preserving their deferred
and immediate cancellation contracts. Custom originator and recipient
agreement handlers must implement isDelbaPending(); recipient handlers must
also implement processAcknowledgedDelba(), processAbortedDelba() and
getPendingTeardownGenerationId(). These methods no longer supply default
behavior in the interfaces. The built-in implementations already provide
these operations.

IOriginatorBlockAckAgreementHandler::processReceivedDelba(),
IOriginatorBlockAckAgreementHandler::processTransmittedDelba(), and
IRecipientBlockAckAgreementHandler::processReceivedDelba() now return the
terminated agreement as a unique_ptr. Originator ADDBA response processing
now returns a typed outcome containing the established agreement and, when
local policy vetoes a successful response, its immediately terminated local
agreement and a best-effort initiator DELBA for Hcf to enqueue after emitting
the Added and Deleted signals. Such locally generated DELBAs carry
sender-local agreement-generation metadata (the originator reuses its ADDBA
transaction identity), and ordinary data continues with Normal Ack. They remain
eligible through the
final fragment; aborting one fragment cancels its siblings. After retry backoff,
a replacement ADDBA setup invalidates an older queued DELBA, so an unreported
disposal cannot suppress setup indefinitely and a delayed frame cannot
terminate a newer peer/TID agreement. The replacement setup reports that
obsolete identity so Hcf also removes all of its queued or in-progress packets.
Originator and recipient DELBA transmission handlers now receive the full
Packet so sender-local agreement-generation metadata is retained through
fragmentation and MAC retries. This changes
IRecipientBlockAckAgreementHandler::processTransmittedDelba() from accepting
only a DELBA header to accepting Packet*; custom handler implementations and
callers must migrate to the Packet form. A locally tagged DELBA carrying
agreement-generation metadata remains eligible across MAC retries and is
retired only when its final fragment is acknowledged or the teardown is
terminally aborted. Custom handler
implementations and callers must adopt processAcknowledgedDelba() and the
boolean processAbortedDelba() outcome; processTransmittedDelba() still returns
the agreement removed by an untagged DELBA, or null when none was removed.

OriginatorBlockAckAgreementPolicy now exposes the new `addbaResponseTimeout`
and `addbaRetryBackoff` NED parameters. C++ implementations of
IOriginatorBlockAckAgreementPolicy must replace computeAddbaFailureTimeout()
with getAddbaResponseTimeout() and implement computeAddbaRetryBackoff().

19. Originator ADDBA Transactions and Eligible Frames

ADDBA response deadlines now begin at actual request transmission. Frames for a
pending peer/TID wait for a matching successful response or terminal failure, then
channel access resumes for eligible traffic. This changes affected Block Ack
trajectories. A-MSDU service now appears as dequeued traffic in queue counters and
graphical fingerprints, instead of administrative removal.

20. Fragment Reassembly and Receive Lifetime

Fragmented management actions are dispatched only after their complete body is
reassembled. Shared fragment reassembly now expires incomplete bodies after
maxReceiveLifetime, whose default is 512 TUs. Late fragments can therefore be dropped
instead of completing an old body; affected application deliveries, forwarding
trajectories and fingerprints change.

21. Block Ack Inactivity Timer Callbacks

Block Ack inactivity uses absolute per-agreement deadlines. The shared timer follows
the earliest enabled deadline and is cancelled when none remains. Agreement expiry is
safe when a bounded management queue drops a generated DELBA synchronously. Timers
and traffic may differ from runs that kept extending an inactivity interval.

22. Fragment Identity Across Sequence Reuse

Receive reassembly separates fragment generations and sequence spaces. Late
fragments, retries and reused sequence numbers no longer combine bodies from
unrelated transmissions; affected receive drops and deliveries may change.

23. Receive Lifetime in Block Ack Reordering

Receive lifetime now remains anchored to first reception while fragments wait in
Block Ack reordering. A later stage no longer gives an old incomplete body a fresh
lifetime, so delayed or incomplete bodies may be dropped earlier.

24. Expired Agreement Quarantine and Frame Release

Expired Block Ack agreements are quarantined from data-plane use while teardown state
is retained. Outstanding frames are released through the normal
acknowledgment/recovery paths before teardown proceeds, including when callbacks
replace agreement state.

25. Incomplete Data Released by a Block Ack Request

When a BAR releases data fragments that do not reassemble into a packet, recipient
processing skips data dispatch instead of dereferencing a null result.

26. Recipient Block Ack Timeout Policy

Recipient Block Ack timeout selection now honors a nonzero local policy value; zero
inherits the request's advisory value. This corrects the previously reversed choice
and can change agreement expiry and subsequent traffic.

27. A-MSDU Size and Fragmentation Limits

Basic A-MSDUs now include subframe headers and padding in size checks and avoid the
ordinary fragmentation path. Eligible members retain flow order. Aggregation,
transmissions and delivered traffic may change in configurations that previously
built oversized or fragmentable A-MSDUs.

28. Serialized Management Fragment Bodies

Management fragmentation now slices the serialized body instead of repeating a
complete management header in each fragment. Reassembly preserves the original body
bytes and local transaction context.

29. Malformed Peer Association IDs

Malformed peer association IDs now mark the decoded management header incorrect
instead of terminating the simulation during deserialization.

30. Negotiated A-MSDU Support

An originator now retains the successful ADDBA response's A-MSDU support bit for the
agreement. Subsequent aggregation follows the negotiated response instead of the
request's initial capability.

31. IEEE 802.11 PHY mode API

External implementations of IIeee80211DataMode must implement the new pure
virtual getGuardInterval() query. Return the modeled guard interval as a
simtime_t, or -1 when the PHY has no guard interval. The bitrate-based
Ieee80211ModeSet getMode() and findMode() overloads also take a trailing,
defaulted guardInterval argument. Ordinary existing calls still compile;
member-function pointers must use the new signature. See the migration guide.

Notable backward compatible changes are the following:

1. IEEE 802.11 per-station rate statistics
Expand Down Expand Up @@ -334,6 +520,58 @@ Notable backward compatible changes are the following:
ResidenceTimeTag and, with it, the FlowTag and the PacketEventTag of the packet.
Those two tags now survive the measurement.

6. IEEE 802.11 HT/VHT guard intervals and timing

HT MCS 32, 73, and 76 definitions are corrected. HT/VHT signal fields use
long-GI symbol timing independently of the data GI. Mixed-format HT and VHT
short-GI data airtimes are rounded to 4 us boundaries; HT greenfield retains
its unrounded short-GI airtime. Results and fingerprints may change for
simulations using the affected modes and frame formats.

IIeee80211Mode duration-component queries are now pure virtual. Their
previous defaults are supplied by Ieee80211ModeBase; direct external
implementations must provide these queries or inherit the base defaults.

RateSelection and QosRateSelection now accept dataFrameGuardInterval to
qualify a configured dataFrameBitrate. The default, -1s, leaves the GI
unspecified; an explicit value must match the selected mode's modeled GI.
The MAC now coordinates explicitly registered mode-set consumers,
updating MAC, management, rate selection, and active contention before
publishing modesetChanged from the MAC. Initialization queries the catalog;
unchanged catalogs retain algorithm state. Incompatible catalog-only requests
are rejected before opening a transition, allowing an explicit-mode retry.
Failures after PHY mutation remain fatal. External PHY
and contention implementations have new contracts described in the
migration guide. Default TXOP limits are resolved for each new TXOP after
a mode-set change; active TXOPs and configured overrides retain their limits.

Radio reconfiguration preserves ongoing receptions when the incoming mode
and receiver listening configuration remain compatible. Transmit-only mode
changes and reapplying unchanged settings no longer interrupt reception.
Incompatible changes abort through the normal reception cleanup path.

Management subclasses can override addVhtCapabilities and addVhtOperation
to customize advertisements produced by inherited AP/STA frame builders.

Group-addressed frames use a legacy basic rate when that set is nonempty.
Eligible configured basic rates are preserved; other configured rates fall
back to the fastest legacy basic rate. For example, a configured 54 Mbps
group rate becomes 24 Mbps in the default mixed legacy catalog. This changes
airtime and fingerprints in affected existing scenarios.

The ac catalog now contains both 800 ns and 400 ns GI for all 310 supported
VHT width/NSS/MCS tuples. Existing unqualified lookups, mandatory/basic flags,
and reference modes retain their previous choices.

Detailed AP/STA management now exchanges VHT Capabilities and VHT Operation
elements. Both rate selectors constrain VHT unicast by local Tx and peer Rx
MCS/NSS maps, bandwidth, GI, and advertised long-GI rate limits. Association
loss and mode-set application invalidate peer state. Missing VHT negotiation
falls back to legacy rates, including simplified-management and ad-hoc setups;
this changes their airtime and fingerprints. Current detailed VHT operation
is limited to 20 MHz and long GI. See the migration guide for configuration
and the retained VHT-only profile limitations.


INET-4.7 (July 2026) — feature release
--------------------------------------
Expand Down Expand Up @@ -453,6 +691,13 @@ Notable backward incompatible changes are the following:
These changes are backward incompatible for C++ code that directly references
the old combined ICMP error indication or tag types.

7. 802.11n control-response rate selection

Ordinary ACK and Basic BlockAck responses in the n(mixed-2.4Ghz) profile now
use the mandatory non-HT fallback because BSSBasicRateSet is not modelled.
This can change airtime, timeout trajectories, throughput, and fingerprints
in existing simulations. An HT RTS continues to receive an HT-mixed CTS.

Notable backward compatible changes are the following:

1. IPv6 network configurator
Expand Down
41 changes: 41 additions & 0 deletions doc/project/design/ieee80211-model-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,44 @@ Concrete signals declare their source/scope, change condition, payload, and life
[AR-COM-NOTIFY](../rule/architecture.md#ar-com-notify). An immutable borrowed snapshot is allowed;
it creates no second writable authority. Commands, queries, and required coordination use typed
calls or protocol messages, rather than notifications.

**Implemented HT contracts.** `IIeee80211ModeSetProvider` exposes the configured catalog after
`LOCAL`. `IIeee80211MacConfiguration` extends it with an idempotent `prepareLocalCapabilities()`
operation after PHY readiness. MAC consumers resolve their `modeSetModule` dependency through the
narrow provider in `ModeSetModuleBase` at `LINK_LAYER`; the MAC NED provides the default descendant
path. Management uses `macModule`. `LINK_LAYER` depends explicitly
on both `PHYSICAL_LAYER` and `NETWORK_INTERFACE_CONFIGURATION`, so addresses and contribution inputs
are available before simplified association. Its AP preparation/install/removal calls use
`IIeee80211BssProvider`; no remote `LAST` callback is required.

`Ieee80211Mib` provides const BSS/profile queries and guarded mutations. Management stages a complete
BSS/peer change, finishes its transaction and timer bookkeeping, then calls `publishStateChange()`.
The MIB's `bssStateChanged` signal covers meaningful BSS or peer changes. Its Boolean value reports
whether a BSS is active; observers query the current MIB for details. There is no borrowed signal
payload. Delivery is synchronous and observational: MIB mutation during delivery throws an error.
References into the MIB are valid only until the next corresponding mutation. A retained
`shared_ptr<const Ieee80211NegotiatedHtCapabilities>` keeps an immutable capability result alive,
but does not grant continued relationship eligibility.

`hasPreparedLocalCapabilities()`, `isLocalHtCapable()`, `hasActiveBss()`, `hasHtOperation()`, and
`relationshipAllowsHt(peer)` distinguish readiness, implementation support, current BSS presence,
accepted operation presence, and permission to select HT. A legacy BSS may be active without HT
operation. The current ad hoc no-beacon abstraction likewise has no learned channel/HT operation or
accepted peer advertisements. Stop/crash clears operational relationships while retaining prepared
configuration. Physical AP channel context is retained by management for restart; STA operation is
learned from accepted management information, independently of scan tuning.

**Runtime catalog reconfiguration.** The MAC simple module implements the typed
`IIeee80211ModeSetCoordinator` contract. The radio resolves its coordinator through
`modeSetCoordinatorModule`; the containing interface only supplies default wiring.
Consumers register through their declared catalog/configuration provider when it supports
coordination. A read-only replacement provider need not implement that optional runtime role.

An explicit changed-catalog transaction refreshes the MAC-assembled capability profile,
then management's local operation and dependent algorithms. HT compatibility results are
replaced only when capability inputs change; accepted peer knowledge remains relationship-scoped
and selection still checks eligibility and current operation. Reapplying the same catalog
does not reset algorithms. Ordinary preparation and stop/restart retain their existing contracts.
The MAC publishes `modesetChanged` only after a changed runtime catalog is applied; initialization
uses typed queries without a catalog notification. Membership changes and reentrant transitions
are rejected during application/publication. Failures after PHY mutation are fatal, without rollback.
Loading
Loading