Repository navigation
IEEE 802.11: admit Basic and Normal Ack DATA before queue extraction - #1365
Draft
mgonzalezlopezudc wants to merge 41 commits into
Draft
mgonzalezlopezudc wants to merge 41 commits into
mgonzalezlopezudc wants to merge 41 commits into
Conversation
Before this commit, consumers can inspect queued packets but cannot extract a later eligible packet with ordinary pull effects. Collection removal represents disposal. Deferred Block Ack DATA needs selection past an ineligible head without loss of queue observations. After this commit, the optional collection contract provides a pure predicate query and atomic selected extraction. PacketQueue, CompoundPacketQueueBase, and PriorityScheduler preserve configured service order. Each layer applies its ordinary pull effects once. For example, extraction behind a deferred head retains ownership, residence metadata, and queue events. An unsupported provider reports UnsupportedPacketSelection before extraction. Other queue and predicate errors retain their types. Direct tests cover storage, ownership, metadata, events, scheduler order, and unsupported providers. Ordinary head service remains unchanged. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.queueing | behavior.add | test whatsnew | ieee80211-compressed-blockack-replacement
Before this commit, Action dispatch can reuse deleted headers and repeat agreement effects. Setup can accept an uncorrelated response. Teardown can retain obsolete work or unsent fragments of transmitted DATA. DATA extraction can advance sequence state before setup resolves. After this commit, HCF dispatches complete accepted Actions once. Handlers correlate peer, TID, and dialog token before acceptance. The response determines agreement parameters. Directional retirement detaches the agreement before cleanup. Association replacement clears both roles before notification. Accepted physical exchanges finish safely but cannot submit retired protected frames after CTS. Setup defers new DATA extraction until the procedure resolves. Already numbered DATA resolves before ADDBA. A later successor can start setup after an empty interval without an empty request. The response timeout starts after the request ACK. Uncertain setup requires DELBA before surviving unsent DATA can resume. The QoS data service assigns a monotonic allocation index before fragmentation. All fragments retain that index in a tag. The agreement retains its highest transmitted index after ACK removal. Teardown uses that index to discard incomplete DATA. Older retransmissions cannot move the boundary backward. Wire sequence numbers remain unchanged. For example, sequence 0 transmits before sequences 1 through 2047 expire. Fragment 0 of sequence 2048 next transmits. Teardown discards its unsent siblings despite the exact half-range gap. Later intact DATA and unrelated peer DATA remain eligible. Deferred deletion protects references during accepted physical exchanges. An internal collision that discards first DATA also triggers retirement. HCF queues DELBA before the unsent successor can resume. Contention uses current eligibility, so deferred work cannot charge another category an internal collision. HCF schedules the earliest absolute deadline across both agreement roles. These lifecycle contracts change together because retirement requires safe Action invalidation and accepted-exchange completion at first use. The shared queue capability precedes this commit. Direct fixtures cover Action correlation, timeout, collision, fragment retirement, sequence gaps, and association reset. The migration guide explains custom-module contracts. Seven approved Basic fingerprint rows describe the changed setup boundaries. Numbered DATA resolves before setup, while infrastructure MacQosWithBlockAck waits for later DATA instead of empty-successor setup. Graphical expectations remain unchanged. Basic remains the default. Compressed exchanges, final-transfer arbitration, and MAC stop/start remain outside this commit. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.change.fix | test whatsnew migration fingerprint | ieee80211-compressed-blockack-replacement
Before this commit, HCF chooses completion or failure when an accepted Action interrupts a response wait. The frame-sequence handler owns the relevant exchange state, so receive dispatch duplicates that decision. After this commit, HCF requests interruption without an outcome argument. The frame-sequence handler checks whether recipient processing retires the outgoing frame. A retired frame completes without failure feedback. Other exchanges retain the ordinary failure path. HCF cancels the receive timer at sequence completion. For example, a correlated Action can retire outgoing management work during a response wait. The handler completes that retired exchange without failure feedback. Existing fixtures also cover refusals, unrelated Actions, and immediate ACK behavior. Custom handlers must implement the no-argument interruption operation. The migration guide explains this contract. Built-in packet behavior and event order remain unchanged. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | refactor | test migration | ieee80211-compressed-blockack-replacement
Before this commit, the branch lacks committed S3b completion records. Reviewers need component responsibilities, scope limits, and verification results in one record. After this commit, plan/done/ contains the summary and execution record. The summary explains agreement setup, retirement, peer reset, and safe physical completion. The execution record explains allocation indices and separates results by original source revision. Those historical revision identifiers remain unchanged. The records describe debug and release compilation, focused module fixtures, and functional fingerprint checks for the original implementation and later retirement repair. This documentation commit changes no protocol behavior or recorded expectation. S4 and production Compressed exchanges remain outside the completed stage. Plan: plan/done/ieee80211-compressed-blockack-s3b-summary.md Change: plan | behavior.add | -
Before this commit, the shared in-progress queue can obtain a successor only through extraction. The QoS data service already supports preview, but the generic contract does not expose it. BAR selection needs the candidate before queue ownership or sequence state changes. After this commit, the contract exposes preview, sequence lookup, and aggregation capability. The in-progress queue can return a borrowed candidate and prospective sequence number. The ordinary successor query retains extraction as its default. For example, a queued frame retains sequence 77 while preview reports prospective sequence 0. Preview leaves the frame in its queue. The DATA-selection fixture checks this result, ownership, and an empty in-progress set. Existing transmission behavior remains unchanged. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | refactor | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, BAR selection can extract DATA and combine counts across peers or TIDs. A short burst can lack a final response when its length remains below the BAR threshold. Duration forecasts can extract or incorrectly reserve an unprepared successor. After this commit, HCF selects BAR work before DATA extraction. The ACK policy groups outstanding DATA by peer and TID within the accepted window. Below the threshold, it defers BAR only for the next DATA within that group and window. EDCA can contend for BAR without a DATA candidate. Matched responses resolve only the selected peer and TID. Resolved DATA advances the window; the response starting sequence number alone cannot advance it. BAR policy calls require an explicit agreement-handler argument. Transmitted-BAR processing also requires an explicit originator agreement. Omitted arguments fail compilation. Explicit null arguments retain their documented behavior. BAR collision and failure update contention state without a DATA retry entry. Retransmitted DATA sets Retry after failed Block Ack feedback. At a safe exchange boundary, final resolution or expiration triggers completion DELBA. HCF first checks queued DATA in the TID category to avoid repeated unrelated scans. Basic single protection reserves only an already prepared successor. The sequence ends the TXOP before further extraction can change aggregation, fragmentation, or setup. Final zero-limit DATA reserves only its immediate required response. Prepared fragments can continue; unprepared successors require another TXOP. This policy can require more contention. Multiple protection retains its successor policy. For example, a window of one and BAR threshold of five require BAR before the next sequence leaves the window. Direct fixtures also cover separate peers and TIDs, timeout, collision, expiration, final Duration, and later-BAR admission. The timing fixture checks the former 40-microsecond overrun and the permitted initial Control-frame exception. Seven previously approved non-graphical fingerprint rows accompany their causal source change. Final ACK reservations, setup order, Retry feedback, and extraction boundaries explain those values. The execution record retains each exact value and its original approval. Graphical values remain unchanged and unverified. BAR selection, Duration forecasts, and continuation share one candidate contract without extraction. They stay together so each recorded expectation describes the complete behavior. Production Compressed exchanges, general Basic DATA admission, and complete NAV conformance remain outside this commit. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.change.fix | test whatsnew migration fingerprint | ieee80211-compressed-blockack-replacement
Before this commit, HCF calculates window advancement, while ACK callers repeat modulo-4096 distance calculations. Their results are correct, but separate definitions make later maintenance harder. After this commit, OriginatorBlockAckAgreement owns sequence distance, bitmap membership, and window advancement. HCF supplies unresolved sequence numbers for the same peer and TID. ACK policy and feedback use the shared operations. Existing virtual window accessors remain in the advancement path. For example, a window at 4094 advances to unresolved sequence 4095 and next to sequence 0 after resolution. With no unresolved DATA, it advances to the next allocation. Boundary tests also check the distinct 64-position bitmap range. Packet behavior, ownership, event order, and recorded expectations remain unchanged. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | refactor | test | ieee80211-compressed-blockack-replacement
Before this commit, interval consumers need retained transmission pointers or new propagation calculations. Cache expiry removes the relevant objects, so later MAC decisions cannot safely use those pointers. After this commit, radio media supply copied transmission endpoints and cached arrival endpoints. A snapshot survives cache expiry without object pointers. The receiver includes the transmission identifier in its local signal-time indication. Later delivery can use that identity to locate the evidence. For example, a recipient can retain arrival endpoints after the medium removes the reception. Const cache queries return absent results without insertion. Missing or identical transmission identities supply no interval evidence. The direct fixture checks copied values and absent states. The shared mechanism supplies no protocol-specific interval decision. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.physicallayer.wireless.common | behavior.add | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, HT duration omits the six-microsecond signal extension at 2.4 GHz. A waveform therefore ends early and supplies incorrect airtime and interval evidence. After this commit, HT duration includes that extension. Mode queries supply its nominal duration. Transmission queries derive the actual extension from the waveform so interval consumers cannot count it twice. The mode fixture checks the 2.4 GHz extension and the other-band control. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.physicallayer.wireless.ieee80211 | behavior.change.fix | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, HT management conversion loses RIFS Mode. A recipient therefore cannot use received permission to identify a permitted RIFS relation. After this commit, HT Operation retains RIFS Mode through conversion and equality checks. The MIB permits RIFS for unprotected HT operation and clears the permission for VHT. For example, an unprotected HT operation survives conversion with permission intact. The capability fixture checks these states. This commit adds no RIFS transmission scheduler. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.change.fix | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, Basic and Compressed decoders allocate temporary BitVector objects and copy their values without deletion. Repeated Block Ack decode therefore loses those allocations. After this commit, the decoders construct bitmap values directly. The generated fields retain their own values without an unowned temporary. For example, independent Basic and Compressed octets retain the same bitmap bits after decode. The direct wire check covers both paths. Type interpretation and frame acceptance remain unchanged. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.change.fix | test whatsnew | ieee80211-compressed-blockack-replacement
Before this commit, Block Ack serialization decodes only part of the Type field. Compressed bitmap and fragment fields lack complete wire validation. The preceding prerequisite already removes the unowned bitmap temporaries. After this commit, the serializer decodes all four Type bits. Type 0 retains Basic compatibility. Type 2 supplies a 64-bit Compressed bitmap and a 32-byte response with FCS. Both BAR profiles occupy 24 bytes with FCS. Invalid Types and malformed fragment fields fail validation. For example, Type 2 with a nonzero fragment field fails validation instead of entering the supported Compressed profile. Independent octets cover both Types, malformed fields, reserved bits, lengths, and sequence wrap. The existing Compressed BAR builder supplies its complete header. Synthetic fixtures provide valid FCS lengths and every Basic bitmap entry. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, QoS data services must extract source frames before they can create an aggregate. A caller cannot inspect that aggregate before queue removal and sequence assignment. After this commit, the service creates an owned preview while original MSDUs remain in their queue. Preparation copies the next sequence value without consumption. Successful commitment validates source identity, eligibility, lifetime, aggregation permission, and sequence state. It transfers the same preview and assigns its sequence number. Refusal preserves the preview and all source frames. Ordinary commitment uses normal dequeue for the head or selected extraction for a later eligible frame. The service copies completed region metadata into the preview before source deletion. Queue service effects occur once. Aggregation retains its existing source-removal behavior. For example, ordinary DATA that waits 2 ms retains 2 ms of queueing time and one queue departure after commitment. Direct service tests cover head and non-head commitment, refusal, stale state, and cancellation. Existing extraction remains available. Later runtime activation uses this contract to admit the complete DATA exchange before destructive preparation. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, recipient receipt state uses the Basic fragment bitmap. Delivery cleanup cannot supply the independent complete-MPDU receipt evidence that a Compressed response needs. After this commit, the record retains explicit complete receipts within its Compressed window. The agreement selects that record profile. The response builder copies receipt truth into a 64-bit bitmap. Positive receipts survive delivery cleanup, while absent positions remain zero. For example, a window at 4094 retains sequence 4094 after delivery and moves across sequence wrap without false positive bits. The direct record fixture checks window movement, the preceding receipt, absent positions, and response construction. HCF still refuses Compressed selection. This prerequisite activates no incomplete exchange. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.add | test whatsnew | ieee80211-compressed-blockack-replacement
Before this commit, QoS rate selection supports only the Basic Block Ack response contract. Compressed exchanges need distinct non-HT BAR selection and response-duration rules. After this commit, the selector uses the applicable local, BSS, and peer rate sets for initial and later BAR. Compressed responses use their non-HT reference rate and 32-byte airtime. Invalid configured overrides fail explicitly. The new pure interface operation requires matching custom implementations. For example, two peers with different operational rates can require different later-BAR rates. The direct rate fixture checks both peers, both response directions, Basic compatibility, and invalid overrides. HCF still refuses Compressed selection. This prerequisite activates no incomplete exchange. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, HCF still rejects the Compressed profile. Wire support, explicit receipt state, and rate helpers exist, but production exchanges do not use them. After this commit, explicit Compressed profiles complete immediate exchanges on eligible HT links. Receipt bits survive delivery, absent receipts remain zero, and shifted responses apply only within the active window. Actual physical endpoints establish SIFS or permitted RIFS relations. Active Compressed agreements suppress fragmentation. HCF uses the prepared non-HT BAR rates and 32-byte response airtime. Both endpoints must select the same profile because ADDBA does not negotiate it. Conflicting addressed BAR stops the simulation before agreement updates. Delayed Compressed policy fails initialization. Basic remains the default. Active Compressed DATA checks complete exchange cost before destructive aggregation. Refusal preserves queue frames, deadlines, and sequence state. An oversized aggregate can fall back to its first ordinary MSDU. One selected mode survives RTS/CTS. Failed RTS updates category recovery without a provisional sequence counter. Original lifetimes bound repeated attempts. For example, an aggregate that exceeds the exchange limit leaves its sources intact. HCF can instead admit its first ordinary MSDU with the same selected mode. Commitment records one queue departure and retains its queueing time through retransmission. Direct exchange and admission fixtures check refusal, fallback, retry, and response behavior. Agreement activation, physical interval use, DATA admission, and frame sequences change together to expose a complete supported exchange. Shared queue, timing, permission, wire, preparation, receipt, and rate prerequisites precede activation. Single protection reserves only the current exchange. The following commit changes the default separately. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, a configuration without a profile selector uses Basic. The complete Compressed runtime requires an explicit selector. After this commit, HCF selects Compressed by default. Eligible HT links use immediate Compressed exchanges. Links without usable local or peer HT state retain Normal Ack. Explicit Basic retains its historical compatibility path and fragment bitmap. For example, an eligible n link without blockAckVariant now uses Compressed. The n and ac consumers cover explicit Basic, explicit Compressed, and the default. Migration cases cover capability fallback, profile conflict, and unsupported delayed policy. Existing Basic demonstrations retain explicit selectors. Execution records retain supported scope and evidence limits. A-MPDU, Multi-TID Block Ack, delayed Compressed policy, complete historical Basic conformance, and complete VHT transfer remain outside this result. Admission limits outside active Compressed agreements also remain outside the correction. Plan: plan/pending/ieee80211-compressed-blockack-replacement.md Change: src.ieee80211 | behavior.change | test whatsnew migration | ieee80211-compressed-blockack-replacement
Before this commit, the branch has no plan for HT aggregate reception or implicit Block Ack integration. After this commit, the plans define separate PHY and MAC duties, staged changes, required evidence, and acceptance limits. The PHY plan records the approved exception to the merge prerequisite. Its first stages define wire representation, bounded member ranges, and cached PHY outcomes. Later MAC acceptance remains separate. This commit changes no runtime behavior. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: plan | behavior.add | - | ieee80211-ampdu-phy-reception
Before this commit, VHT signal mode constructs an HT PHY header. The header type therefore disagrees with the selected PHY mode. After this commit, VHT signal mode constructs the existing VHT PHY header. For example, a VHT transmission retains its VHT header identity instead of entering later HT validation with no HT MCS. The HT/VHT support fixture supplies the production control. This prerequisite adds no VHT serializer or aggregate profile. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: src.ieee80211 | behavior.change.fix | whatsnew | ieee80211-ampdu-phy-reception
Before this commit, HT header conversion supplies no HT-SIG bytes. A byte-backed singleton aggregate therefore cannot retain its aggregate identity. Deaggregation lacks a shared bounded description of delimiters and complete MPDUs. After this commit, the radio assigns HT-SIG fields and CRC from the selected mode and aggregate identity. The serializer preserves all 48 bits. Validation refuses invalid CRC, unsupported fields, and insufficient content before trailer removal. The shared delimiter inspector supplies bounded ranges for deaggregation and later PHY outcomes. For example, an invalid delimiter starts bounded recovery across a typed MPDU header. The inspector permits explicit byte reinterpretation of each delimiter candidate instead of a failing typed conversion. Typed and byte representations retain the same later complete MPDU ranges. Existing typed delimiter error flags remain effective. The wire fixture checks independent bytes, CRC, singleton identity, length limits, alignment, truncation, and typed delimiter recovery. Ordinary valid HT duration inputs remain unchanged. The preceding prerequisite already corrects VHT header identity. MAC aggregate acceptance remains outside this commit. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-ampdu-phy-reception
Before this commit, error models expose complete-packet probabilities but no optional contract for HT aggregate ranges. Receiver integration needs a pure mode-support query and per-length success probability. After this commit, the optional WLAN role supplies both operations. NIST and Yans implement the role through their shared base. The range operation uses the existing DATA calculation with the requested length. It rejects unsupported modes and invalid ranges without a random draw. The generic IErrorModel contract remains unchanged. For example, an HT20 MPDU range uses the same probability as the existing DATA calculation for that length and scalar SNIR. Direct checks cover 64 HT20 modes, six lengths, seven SNIR values, and minimum and mean reductions. They also check mode support and unchanged draw counts. The receiver does not use the role until the next commit. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: src.ieee80211 | behavior.add | test whatsnew | ieee80211-ampdu-phy-reception
Before this commit, the receiver samples an aggregate as one packet. It cannot retain successful members after partial DATA loss. Rx also treats an aggregate container as a standalone MAC frame and can fail during header or FCS checks. After this commit, the medium cache owns common-field decisions and bounded delimiter and MPDU outcomes. Repeated queries reuse those samples. Partial DATA loss preserves the aggregate bytes. A result tag copies outcomes without reception pointers. Rx rejects aggregate containers before standalone checks through its existing drop and contention path. For example, an aggregate with one failed MPDU retains successful neighbors and all range outcomes. The drop signal preserves those outcomes when Rx rejects the container. A standalone CTS still updates NAV. DCF and HCF cases cover typed and byte representations, scalar and dimensional radios, and whole and separate signal parts. The receiver uses the preceding probability role. The MAC supplies exact receive-capability bounds before its MIB update. A present model must cover every advertised HT receive mode within those bounds. The header defines the override contract and required cRuntimeError boundary. Validation cannot change capabilities or consume random draws. Absent error models retain common PHY checks without error draws. Aggregate error-rate estimates remain unknown; ordinary MPDU metadata remains unchanged. Direct fixtures cover cached decisions, malformed headers, insufficient content, missing roles, and incomplete mode coverage. MAC member acceptance and implicit Block Ack remain pending. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: src.ieee80211 | behavior.add+change | test whatsnew migration | ieee80211-ampdu-phy-reception
Before this commit, pure calculation checks cover range probabilities, but deterministic receiver checks do not verify seeded NIST and Yans outcomes. The real models need direct checks through the production receiver. After this commit, test subclasses call the real implementations through the receiver. Each range probability must equal the existing DATA calculation. Independent generators replay HEADER and range draws. The fixture compares cached outcomes, draw counts, and subsequent random values. Repeated PREAMBLE, decision, and result queries must reuse cached samples. For example, a second DATA query must retain every outcome and leave the random generator at its expected next value. The reference matrix covers 64 HT20 modes, six lengths, seven SNIR values, and minimum and mean reductions. The receiver campaign uses scalar and dimensional radios, both signal-part modes, and seeds 0, 1, and 2. These checks establish no error-accuracy or goodput claim. The complete receiver fixture now contains the pure probability matrix from the earlier prerequisite. The temporary independent fixture is removed. Production behavior and stored fingerprint expectations remain unchanged. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: tests | behavior.add | - | ieee80211-ampdu-phy-reception
Before this commit, ordinary reception controls lack a fixture that compiles unchanged on the pinned parent and the feature branch. The earlier receiver fixture cannot provide that independent compatibility comparison. After this commit, one fixture records ordinary reception with identical inputs on both revisions. NIST, Yans, absent-model, and non-HT custom controls cover three noise levels and seeds 0, 1, and 2. The campaign uses scalar and dimensional radios with whole and separate signal parts. Each record includes outcomes, duration, metadata, draw counts, and subsequent random values. For example, a failed ordinary reception must retain the same metadata and next random value as its parent control. The migration guide states the independent-range abstraction and its limits. Plan records close the declared PHY verification stages. MAC aggregate receipt and implicit Block Ack remain pending. BerTable retains its documented parent crash, which supplies no successful reception evidence. The additional fixture and records change no production contract or stored expectation. Execution results belong in the PR description and execution record. Plan: plan/pending/ieee80211-ampdu-phy-reception.md Change: tests | behavior.add | - | ieee80211-ampdu-phy-reception
Before this commit, valid sequence arithmetic can produce an intermediate value of minus one. The shared helper rejects that value, so 0 - 1 fails instead of returning sequence 4095. After this commit, the helper reduces every valid intermediate modulo 4096. Constructors and arithmetic operators still reject an unspecified source. The unit fixture checks every sequence value with positive and negative offsets. Aggregate reorder advancement needs this correction at sequence wrap. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.change.fix | test | ieee80211-implicit-blockack
Before this commit, negotiated HT state lacks the receiver's minimum MPDU start spacing. An aggregate builder therefore cannot apply that receiver limit. After this commit, full and simplified management preserve the encoded spacing in each negotiated direction. The MIB exposes the local receiver setting. The transmitter can obtain the peer receiver's limit before aggregate construction. Capability fixtures check asymmetric limits, encoding, initialization, and reset. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-implicit-blockack
Before this commit, aggregate construction cannot preview spacing at the selected DATA mode while it preserves the source MPDUs. It also lacks the complete HT duration admission calculation. After this commit, the builder borrows source references and copies their data and region tags. Alignment padding and zero-length delimiters satisfy negotiated spacing. Construction checks the receiver byte limit, PPDU duration, and L-SIG length. Singleton aggregates retain their delimiter. Bounded delimiter inspection retains invalid ranges for later MAC history checks. The wire and construction fixtures check serialization, spacing boundaries, source preservation, and malformed layouts. These operations prepare the later exchange without enabling the default MPDU policy. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.add+change | test whatsnew migration | ieee80211-implicit-blockack
Before this commit, Rx excludes a decoded aggregate from standalone FCS checks. A failed common header can lack that decoded property, so its container can reach an unsafe MAC peek. After this commit, Rx also checks common-header success and complete content before standalone parsing. The boundary fixture supplies malformed containers and proves refusal before the FCS predicate. Correct standalone reception retains its existing path. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.change.fix | test | ieee80211-implicit-blockack
Before this commit, the QoS service can prepare one DATA transmission but cannot retain independent previews beside canonical retry members. An aggregate selection must preserve sources until actual submission. After this commit, the HT policy selects borrowed members under supplied peer, window, mode, spacing, and length limits. The service gives each queued member an independent preview. Batch commitment validates every source before extraction. Canonical members retain their sequence numbers and deadlines. Forwarded previews use the local transmitter address without changing queued headers or ordinary A-MSDU construction. HCF rejects aggregate opt-in with a rate-control submodule at initialization. The default Basic policy remains disabled. Preparation fixtures check refusal, wrap, deadlines, limits, retained members, and both AARF rejection configurations. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.add | test whatsnew migration | ieee80211-implicit-blockack
Before this commit, prepared aggregates lack a complete MAC exchange. Rx cannot accept independent members, and HCF cannot submit a batch or resolve its implicit response. After this commit, Rx validates each member against cached PHY outcomes and its FCS. HCF applies agreement and address checks, records receipt, and supplies physical history for mandatory reorder release. The recipient returns one Compressed Block Ack after SIFS. A failed member cannot invalidate a correct neighbor or force EIFS after correct receipt. At actual DATA submission, HCF validates the agreement, deadlines, retained mode, and complete exchange cost. Tx finalizes each member before envelope construction. RTS selection uses the complete PSDU. Cancellation preserves queued sources. Failed RTS updates contention state without a DATA attempt or member retry charge. An unsuccessful implicit response requires one BAR probe before further DATA. Actual BAR submission consumes that requirement. Probe failure returns to DATA retry without duplicate DATA feedback. A recipient without an agreement can use the existing DELBA path, so continuous arrivals do not prevent stale-agreement retirement. For example, loss of the middle member retains that member's original deadline for selective retry. The other members can complete independently. Physical fixtures cover partial loss, SIFS responses, admission, cancellation, ownership, response windows, recovery, and reachable release conditions. Protocol fixtures prove sixty application deliveries through both AP hops. The approved HT expected-failure marker removal accompanies this feature. The earlier PHY boundary fixture now checks separate members through production Rx. Valid FCS trailers permit correct members to pass. The fixture checks member drops, delimiter recovery, and standalone CTS NAV across all 16 configurations. Related Rx boundary and reorder fixtures pass their 1 and 176 runs. The aggregate step, callback contracts, receipt context, response wait, and reset handling must land together. Their consumers share one exchange lifetime. Splitting this integration further would leave incomplete contracts or require temporary implementations. Earlier commits isolate the independent arithmetic, capabilities, construction, refusal, and preparation changes. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: src.ieee80211 | behavior.add+change | test expected whatsnew migration | ieee80211-implicit-blockack
Before this commit, users lack a complete configuration for the new HT aggregate profile. Selecting an HT mode alone does not establish peer capabilities or an accepted agreement. After this commit, one example uses production management and fixed HT20 long-GI DATA rates. Scalar, dimensional, and zero-TXOP configurations send UDP traffic through an AP. The README explains opt-in, selective retry, probe recovery, and profile limits. These demonstrations establish no throughput result. Plan: plan/pending/ieee80211-ampdu-implicit-blockack.md Change: examples | behavior.add | - | ieee80211-implicit-blockack
Before this commit, user documentation describes A-MPDU transmission as unavailable. Extension authors also lack the aggregate preparation, submission, reception, and response contracts. After this commit, the user guide explains configuration, independent member state, complete-PSDU RTS selection, implicit responses, and probe recovery. The migration guide names each changed extension role. WHATSNEW describes the supported profile and its limits. The Wi-Fi evidence report records the approved HT marker removal while it preserves the historical audit. Change: doc | comment | - | ieee80211-implicit-blockack
Before this commit, the plan records the proposed exchange and A1 status. It lacks the completed MAC evidence and the final verification boundaries. After this commit, the execution record maps A1 through A7 to their fixtures and results. It preserves failed attempts, disk-space recovery, the approved base exception, and the separate HT marker approval. Ordinary fingerprints pass. Graphical controls match the parent despite pre-existing baseline differences. The record states the interface, link, C++ analysis, and positive-RIFS limits. The user separately authorizes commit, push, and PR creation. A0 remains open, so the plan stays under pending. This publication does not change the validated source base or approve a merge. Change: plan | comment | - | ieee80211-implicit-blockack
Before this commit, twenty graphical expectations differ from the unchanged dependency build under OMNeT++ 6.4.0aipre2. Each corresponding event, communication, and packet-data fingerprint still matches. After this commit, only those tyf expectations match the measured dependency values. The twenty-five selected rows retain their original non-graphical expectations. The dependency and C3 produce identical values for every selected row. The graphical drift predates this topic; its earlier cause is unknown. This commit changes no simulation source. The user explicitly authorized fingerprint updates on 2026-10-19. Each line below names one inherited graphical update: - /showcases/wireless/fragmentation/ -f omnetpp.ini -c DCFfrag -r 0: f985-34fb/tyf -> 74c3-9ba0/tyf. - /showcases/wireless/aggregation/ -f omnetpp.ini -c NoAggregation -r 0: 27f2-4a52/tyf -> cb71-81f8/tyf. - /showcases/wireless/fragmentation/ -f omnetpp.ini -c HCFfrag -r 0: 335d-6687/tyf -> e394-4985/tyf. - /showcases/wireless/fragmentation/ -f omnetpp.ini -c HCFfragblockack -r 0: 6f6e-b101/tyf -> 77f4-58c1/tyf. - /showcases/wireless/aggregation/ -f omnetpp.ini -c Aggregation -r 0: 95cc-1859/tyf -> 6cdd-e65e/tyf. - /examples/adhoc/qos/ -f omnetpp.ini -c Fragmentation: 33b7-00f9/tyf -> 97f7-655d/tyf. - /showcases/wireless/aggregation/ -f omnetpp.ini -c VoicePriorityAggregation -r 0: bd88-5ba6/tyf -> c99f-3188/tyf. - /examples/wireless/mactest/ -f omnetpp.ini -c MacEdca -r 0: dfcf-4644/tyf -> 24e0-2e48/tyf. - /examples/wireless/mactest/ -f omnetpp.ini -c MacDcf -r 0: f37f-cd48/tyf -> 3edc-eb8d/tyf. - /showcases/wireless/txop/ -f omnetpp.ini -c General -r 0: c87d-3f3a/tyf -> 6175-eb06/tyf. - /showcases/wireless/qos/ -f omnetpp.ini -c NonQos -r 0: 093e-1ca4/tyf -> 34ac-bc95/tyf. - /showcases/wireless/qos/ -f omnetpp.ini -c Qos -r 0: bda9-15d1/tyf -> 64d2-47e3/tyf. - /examples/adhoc/qos/ -f omnetpp.ini -c MsduAggregation: df04-18f7/tyf -> 734c-15d1/tyf. - /examples/wireless/qos/ -f omnetpp.ini -c MacNonQos -r 0: 6097-a429/tyf -> b802-9992/tyf. - /examples/wireless/qos/ -f omnetpp.ini -c MacQos -r 0: 9f3c-4512/tyf -> b06a-f098/tyf. - /examples/adhoc/qos/ -f omnetpp.ini -c MacQos -r 0: 2c1e-66e5/tyf -> f74f-a0c0/tyf. - /examples/adhoc/qos/ -f omnetpp.ini -c MacQos -r 1: a587-3a4d/tyf -> 57c2-84bd/tyf. - /examples/wireless/qos/ -f omnetpp.ini -c MacQosWithoutAggregation -r 0: a4c3-19bf/tyf -> 57cd-2e76/tyf. - /examples/wireless/qos/ -f omnetpp.ini -c MacQosWithRtsCts -r 0: b2d6-1329/tyf -> 8cb9-109e/tyf. - /examples/wireless/qos/ -f omnetpp.ini -c MacQosWithBlockAck -r 0: 08b5-d005/tyf -> 0db4-29ea/tyf. The debug wrapper selects the aggregation, Block Ack, fragmentation, QoS, TXOP, and MAC control directories. The publication record contains its exact filter and results. Later source commits own their additional trajectory changes. Change: tests.fingerprint | behavior.change | - | txop-admission-remaining
Before this commit, the fragmentation policy uses only its configured threshold. HCF needs a complete MPDU bound to prepare legal fragments before it consumes queued sources. After this commit, the bounded operation combines that threshold with the supplied MPDU length. It reports an unfragmented frame, a legal partition, or an impossible partition. Nonfinal fragments retain equal even lengths, and the partition contains at most sixteen fragments. The existing unbounded caller retains its behavior. This implements the policy part of C1 in plan/pending/ieee80211-txop-admission-remaining-paths.md. The later admission commits supply the bound from the selected exchange mode. The migration entry describes the required operation for external policies. Change: src.ieee80211 | behavior.add | test migration | txop-admission-remaining
Before this commit, QoS fragmentation consumes the source before HCF can admit the resulting exchange. A rejected candidate cannot preserve the queue's source identity and service observations. After this commit, the data service owns duplicate fragment previews until commitment. Commitment transfers those same packets under one sequence, allocation, and absolute deadline. A numbered source can become fragments before its first local DATA transmission. The committed-frame owner replaces that source and removes its old ACK entry. Existing transmission dispatch remains unchanged. This implements the service and ownership parts of C1 in plan/pending/ieee80211-txop-admission-remaining-paths.md. Direct preparation tests cover cancellation, commitment, expiry, stale sources, and permission changes. The migration entry describes the service and ACK interface changes. Change: src.ieee80211 | behavior.add | test migration | txop-admission-remaining
Before this commit, recovery selects retry state through each MPDU header. That state cannot carry a complete MSDU count across fragment replacement and fragment ACKs. After this commit, explicit allocation registration selects the applicable retry contract. The modern contract retains one count across associated RTS failures, DATA failures, and fragment ACKs. Basic retains separate 2016 short and long counts. An accepted Basic agreement can select lifetime retention while counters still increase. Existing callers retain their current recovery until the later activation commits register allocations. This implements C2 in plan/pending/ieee80211-txop-admission-remaining-paths.md. Direct recovery tests distinguish the limits, ACK resets, lifetime exemption, and disposal of an unrelated allocation. Change: src.ieee80211 | behavior.add | test | txop-admission-remaining
Before this commit, prepared exchange checks require an accepted Compressed agreement. The later Basic and Normal Ack activations need the same cost, mode, validation, and ownership operations. After this commit, HCF can represent an ordinary frame or a reversible fragment group in the prepared exchange. Shared operations retain selected modes, calculate complete protection and response cost, validate sources, and commit the admitted form. Dispatch still selects the existing accepted Compressed path. Modern MSDU recovery and Basic activation remain disabled in this preparation commit. The source change exceeds 400 lines because every consumer of the prepared exchange must use its cost and ownership state consistently. Cost, validation, commitment, submission, and Duration calculation cannot use different representations in an intermediate commit. This implements C3 in plan/pending/ieee80211-txop-admission-remaining-paths.md. Existing Compressed and A-MPDU fixtures provide the dispatch controls. Change: src.ieee80211 | behavior.add | test | txop-admission-remaining
Before this commit, disabled Block Ack can consume queued QoS DATA before complete exchange admission. Normal Ack outside an agreement has the same gap. The retained one-millisecond reproduction sends a second A-MSDU beyond the TXOP deadline. After this commit, HCF prepares each candidate at one selected DATA mode. A short tail preserves queued sources. A fresh positive TXOP can select legal fragments. An impossible form stops before extraction. Admission commits before RTS, so a CTS failure updates the same MSDU record. A zero limit permits one complete fragment burst. Prepared admission checks local and peer HT capabilities before A-MSDU preparation. It also derives Retry from this hop's ACK state. An MSDU from another hop cannot force Retry on its first local transmission. These choices explain all ten fingerprint rows in this commit: - showcases/wireless/aggregation, Aggregation: the non-HT path sends ordinary MPDUs instead of A-MSDUs. - showcases/wireless/aggregation, VoicePriorityAggregation: the non-HT path sends ordinary MPDUs instead of A-MSDUs. - showcases/wireless/fragmentation, HCFfrag: complete admission defers the next MSDU after the current fragment group. - showcases/wireless/qos, Qos: the non-HT path sends ordinary MPDUs instead of A-MSDUs. - examples/adhoc/qos, MacQos run 0: disabled Block Ack uses prepared admission and excludes non-HT A-MSDUs. - examples/adhoc/qos, MsduAggregation: the non-HT path sends ordinary MPDUs instead of A-MSDUs. - examples/wireless/mactest, MacEdca: a zero-limit TXOP sends the next fragment after SIFS instead of new contention. - examples/wireless/qos, MacQos: the non-HT path sends ordinary MPDUs instead of A-MSDUs. - examples/wireless/qos, MacQosWithoutAggregation: local ACK state clears the previous hop's Retry bit on the first local transmission. - examples/wireless/qos, MacQosWithRtsCts: the protected non-HT path sends ordinary MPDUs instead of A-MSDUs. The user explicitly authorized these baseline updates on 2026-10-19. Each row records the measured C4 values, with graphical values where present. The preceding baseline commit owns inherited graphical drift. C5 owns the later Basic changes. This implements C4 in plan/pending/ieee80211-txop-admission-remaining-paths.md. The debug build and eight selected module fixtures pass. They cover admission, protection, cancellation, collisions, and management traffic. The twenty-five-row comparison separates C3, C4, and C5 effects. The publication evidence records its exact commands and values. Change: src.ieee80211 | behavior.change.fix | test fingerprint whatsnew | txop-admission-remaining
Before this commit, enabled Basic support bypasses prepared admission. The legal non-HT probe records eighteen late DATA completions at 24 Mbit/s under multiple protection. Each violation follows earlier DATA in the same TXOP. After this commit, Basic prepares the complete exchange before source extraction. HCF commits an admitted allocation before RTS. Accepted agreements retain the initial ordinary-MSDU exception. Short and long counters still increase after failures and internal collisions. Under the accepted R1 interpretation, those limits do not discard an MSDU under an accepted Basic agreement. Lifetime expiry removes the complete allocation. Fallback without an agreement retains the 2016 retry limits. Basic preparation excludes A-MSDUs without local and peer HT capabilities. A zero-limit TXOP permits the complete fragment group. Fragment reservations include an ACK exchange only when an immediate ACK exists. These choices explain all five fingerprint rows in this commit: - showcases/wireless/blockack, Fragmentation: the zero-limit Basic sequence sends the next fragment after SIFS instead of new contention. - showcases/wireless/fragmentation, HCFfragblockack: prepared Basic admission and fragment reservations change access for the later BAR. - showcases/wireless/txop, General: prepared Basic admission excludes non-HT A-MSDUs and checks complete exchanges. - examples/adhoc/qos, MacQos run 1: enabled Basic uses prepared admission, legal frame forms, and its 2016 recovery contract. - examples/wireless/qos, MacQosWithBlockAck: prepared Basic admission excludes non-HT A-MSDUs and checks complete exchanges. The user explicitly authorized these baseline updates on 2026-10-19. Each row records the measured C5 values, with graphical values where present. The preceding baseline commit owns inherited graphical drift. C4 owns the Normal Ack changes. This implements C5 in plan/pending/ieee80211-txop-admission-remaining-paths.md. The debug build and five selected module fixtures pass. Non-HT and mixed-peer cases cover both protection classes, forced CTS and ACK loss, collisions, expiry, and fragment Duration fields. The twenty-five-row comparison separates C3, C4, and C5 effects. Agreement negotiation remains outside this commit. Change: src.ieee80211 | behavior.change.fix | test fingerprint whatsnew | txop-admission-remaining
Before this commit, the TXOP admission series has no committed execution record. Reviewers need its timing, ownership, retry contracts, and evidence limits in one place. The reproductions also need a distinction between historical HT Basic traffic and the legal non-HT baseline. After this commit, the plan and execution record explain those contracts and limits. The fingerprint record separates source effects from inherited graphical drift. It lists every approved value and its commit owner. The release note explains the effects for users. The separate peer-permission activation still owns the combined refusal case. The reproduction folder preserves raw console captures by hash. Its local Git attribute preserves whitespace in those captured bytes. The baseline amendments preserve every original source tree and test definition. This completes the local C6 records for plan/pending/ieee80211-txop-admission-remaining-paths.md. This commit changes no production source or recorded test baseline. Change: plan | behavior.add | - | txop-admission-remaining
mgonzalezlopezudc
force-pushed
the
work/ieee80211-txop-admission-remaining
branch
from
October 19, 2026 09:27
67bacef to
9a3f567
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
HCF can exceed a TXOP after it consumes queued QoS DATA. Basic and Normal Ack outside an agreement can reach RTS or DATA without a complete exchange check. A short TXOP tail can therefore transmit a frame whose response completes after the deadline.
This PR checks the complete exchange before source extraction for transmission. The scope covers individually addressed QoS DATA through HCF. HCF retains one selected DATA mode and can use one ordinary MSDU or legal fragments. A refused continuation leaves the queued sources, sequence state, retry state, and absolute deadlines intact. If no permitted form fits a fresh TXOP, HCF stops with a diagnostic before source consumption.
This draft depends on #1364 at
d841dc77db7d0b141bf31e5e215a0de9bb281957. Review the eight new commits after that revision. The upstream comparison also contains the prerequisite series until its merge. The main risks concern fragment ownership, recovery across RTS failure, and external implementations of the changed interfaces. Focused tests cover these paths. The approved fingerprints accompany their causal commits; joint verification with the separate Basic peer-permission activation remains pending.What the admission check controls
An exchange starts with its first holder frame. Its cost includes DATA, required RTS/CTS, the applicable IFS intervals, and an immediate ACK when the policy requires one. DATA with Block Ack policy has no immediate Block Ack response. BAR and its Block Ack response retain their separate admission check.
flowchart TD A["Read the next eligible QoS source<br/>Keep it in the queue"] --> B["Prepare its form<br/>Retain one selected DATA mode"] B --> C["Calculate the complete exchange<br/>RTS / CTS when required, DATA, IFS, immediate response"] C --> D{"Does the form satisfy the TXOP<br/>and applicable reservation checks?"} D -->|Yes| E["Commit the admitted form<br/>Submit the exchange at the retained mode"] D -->|No| F{"Does a permitted smaller form exist?"} F -->|Yes| B F -->|No| G{"Could a permitted form use a fresh TXOP?"} G -->|Yes| H["End this TXOP<br/>Preserve queued sources and counters"] G -->|No| I["Stop with a diagnostic<br/>Preserve sources before extraction"]Positive-limit equality is permitted. The separate TXNAV comparison remains strict. Listed initial and retransmission exceptions retain their own conditions. An accepted Basic agreement can permit the initial ordinary-MSDU exception. An initial A-MSDU cannot use that exception. A zero limit permits all fragments of one MSDU; an unrelated MSDU needs another TXOP.
The legal Basic reproduction uses non-HT peers, production infrastructure association, no aggregation, and a 1024-microsecond limit. At 24 Mbit/s under multiple protection, the old path records eighteen invalid DATA completion boundaries. Each follows earlier DATA in the same TXOP.
All four corrected probe configurations report zero invalid boundaries and deliver all thirty source MSDUs.
Ownership across RTS and CTS
Preparation owns duplicate previews. It borrows the queued source identities. Commitment consumes each source once and transfers the same prepared packets to the committed-frame owner. An allocation identity identifies one numbered MSDU or A-MSDU locally. All fragments from that MSDU share one sequence, that allocation identity, and the source's absolute deadline.
Basic and modern no-agreement recovery need a permanent MSDU identity before an actual RTS attempt. Those paths commit after admission, immediately before RTS. Accepted Compressed preparation retains its existing commitment boundary after CTS.
An internal collision can commit one ordinary source before its channel grant. Recovery assigns its permanent identity and increments the applicable counter. Later fragment replacement retains that identity and count.
sequenceDiagram participant Q as Pending queue participant S as QoS data service participant H as HCF participant F as Committed-frame owner participant P as Peer H->>S: Prepare copies at the retained mode S-->>H: Preview packets and source identities Note over Q,S: Original sources remain queued during admission H->>H: Check the complete exchange alt Admission refusal H->>S: Release the unused preparation Note over Q,F: No extraction, sequence allocation, or retry increment else Basic or modern no-agreement admission H->>S: Commit before RTS S->>Q: Extract the selected source once S->>F: Transfer the admitted packets and deadline H->>P: RTS alt CTS arrives P-->>H: CTS H->>P: DATA at the retained mode else CTS does not arrive H->>F: Retain the committed allocation Note over H,F: Recovery updates that MSDU's counter end else Accepted Compressed admission H->>P: RTS P-->>H: CTS H->>S: Validate and commit before DATA S->>Q: Extract the selected sources S->>F: Transfer the admitted packets H->>P: DATA at the retained mode endThe fragment policy combines its configured threshold with the complete MPDU bound. Nonfinal fragments have equal even lengths, with at most sixteen fragments. A numbered source can become fragments only before its first local DATA transmission. Transmitted bodies and lengths remain fixed for retry. A capability change or expiry can cancel DATA after CTS; it cannot restore an attempted allocation as new queued sources.
Recovery and terminal conditions
The selected profile determines the retry contract. The ACK policy determines the immediate response cost. Normal Ack under an accepted Basic agreement therefore retains Basic's lifetime exemption.
stateDiagram-v2 [*] --> Queued Queued --> Preview: HCF prepares copies Queued --> Committed: Internal collision commits one ordinary source Preview --> Queued: Admission refusal Preview --> Committed: Admission succeeds and service commits Committed --> Committed: RTS or DATA fails / update the applicable counters Committed --> Committed: Internal collision / update the applicable counters Committed --> Committed: Nonfinal fragment succeeds / retain allocation state Committed --> Complete: All members succeed Committed --> Disposed: Lifetime expires or agreement disposes of DATA Committed --> Disposed: Retry limit applies and its count reaches the limit note right of Committed An accepted Basic agreement suppresses retry-limit disposal under the accepted R1 rule. The absolute lifetime deadline remains unchanged. end note Complete --> [*] Disposed --> [*]The Basic interpretation uses IEEE Std 802.11-2016, Clauses 10.22.2.11.1 and 10.24.3. The maintainer explicitly selected lifetime retention for associated RTS failures before and after DATA, and for internal collisions. Modern no-agreement recovery uses IEEE Std 802.11-2024, Clause 10.23.2.12.1.
Commit order and interface changes
The changes remain within IEEE 802.11 MAC contracts, the QoS data service, fragmentation, recovery, frame sequences, and committed-frame ownership. Packet wire formats, NED parameters, and feature descriptors remain unchanged. No sealed source path changes.
External
IFragmentationPolicyimplementations must supply the bounded partition operation. ExternalIOriginatorQosMacDataServiceimplementations must supply fragment preparation, validation, and commitment.IAckHandlernow exposes the existing frame-disposal operation. The migration guide explains those requirements.Evidence and limits
Every source commit builds in debug mode and passes its selected tests. The baseline amendments preserve each original source tree and test definition. The final debug and release builds pass. Release verification covers compilation; behavioral tests use debug assertions. The source-seal check passes. The series checks cover both the eight-commit topic and the complete upstream comparison.
The global architecture, naming, and interface checks return failures with complete output identical to the dependency head. The interface report contains the same fifteen classes; the naming report contains the same twenty-three violations. These global checks remain failed. Clang-tidy covers the seven changed C++ implementation files and reports no warning on an added line.
All three Mermaid diagrams pass syntax checks. The description gate reports no note. These checks do not establish a visual rendering result. The publication record records the per-commit checks and final build hashes.
The final debug campaign passes 31 module fixtures. It includes 96 Normal Ack runs and 36 Basic runs. Four unit fixtures and the legacy fragmentation protocol test also pass. The Basic cases cover both protection classes at 6 and 24 Mbit/s, with seed zero. They check nine forced CTS losses before DATA, nine after DATA, nine ACK losses, internal collisions, expiry, fragments, fallback, and legal mixed peers. Sixteen additional runs pass with Onoe; sixteen pass with AARF. The observers verify one retained DATA decision across RTS/CTS.
The final commands run from the repository root, except the fingerprint wrapper:
The selected fingerprint command runs from
tests/fingerprint:./fingerprinttest -d -t 8 -m '((showcases/wireless/(aggregation|blockack|fragmentation|qos|txop)|examples/(adhoc/qos|wireless/(qos|mactest)))/)'The baseline campaign checks twenty-five related rows, with DCF controls. The dependency passes all twenty-five rows after its graphical updates. C4's ten rows pass against their approved expectations. All twenty-five final rows pass against both updated CSV files, with graphical fingerprints.
Twenty-one CSV rows change. The first commit corrects twenty inherited graphical expectations. The dependency and C3 produce identical values for all twenty-five selected rows. Their event, communication, and packet-data expectations already pass. The earlier cause of the graphical drift is unknown; these values describe the pinned local environment.
C4 changes ten rows from C3. C5 changes five rows from C4. Each source commit contains its measured values and a per-row explanation. Some rows also receive the earlier graphical correction. This table lists every changed CSV row:
showcases/wireless/aggregation/NoAggregation; run 0showcases/wireless/aggregation/Aggregation; run 0showcases/wireless/aggregation/VoicePriorityAggregation; run 0showcases/wireless/blockack/Fragmentation; run 0showcases/wireless/fragmentation/DCFfrag; run 0showcases/wireless/fragmentation/HCFfrag; run 0showcases/wireless/fragmentation/HCFfragblockack; run 0showcases/wireless/qos/NonQos; run 0showcases/wireless/qos/Qos; run 0showcases/wireless/txop/General; run 0examples/adhoc/qos/MacQos; run 0examples/adhoc/qos/MacQos; run 1examples/adhoc/qos/Fragmentationexamples/adhoc/qos/MsduAggregationexamples/wireless/mactest/MacEdca; run 0examples/wireless/mactest/MacDcf; run 0examples/wireless/qos/MacNonQos; run 0examples/wireless/qos/MacQos; run 0examples/wireless/qos/MacQosWithoutAggregation; run 0examples/wireless/qos/MacQosWithRtsCts; run 0examples/wireless/qos/MacQosWithBlockAck; run 0For example, MacQosWithoutAggregation changes packet bytes without a change to event or communication fingerprints. The old AP retains the previous hop's Retry bit for its first local transmission. C4 derives Retry from local ACK state and clears that bit. Paired captures first differ at sequence 16, TID 5, at capture timestamp 1.019021 seconds.
The baseline record contains all values, commands, library hashes, traces, and capture evidence. The execution record gives the broader test map.
Basic negotiation permission remains a separate change. This PR does not enforce rejection of Basic between two HT peers. Joint refusal and cancellation verification remains pending until that activation exists. DCF, HCCA, dynamic fragmentation, new ACK policies, and MAC stop/start remain outside this change.