Repository navigation
Conversation
The gNB now tells the slot hook which symbols of each slot are uplink (valid_symbol_mask: bit s = symbol s is uplink; DL and guard symbols of a mixed slot are 0; FDD sets all). Carry it to the dApp: - codelet: copy it from jbpf_ran_slot_ctx into e3_slot_desc, which uses 2 of its reserved bytes (same size); - controller: pass it through SlotSample and send it as validSymbolMask (APER) and valid_symbol_mask (JSON), like OAI's L1-KPM SM; - verifier: the slot ctx is now 49 B, not 47. - docs: describe the mask in docs/service-models.md. jbpf_e3_slot_api.h and jbpf_e3_ids.h are byte-identical to the ocudu side, so build the codelets against an ocudu tree with the same change. Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>
e3sm_layer1.asn is now the grammar of the E3SM-L1-KPM specification, version 2 (module E3SM-L1-KPM-IEs), which follows NVIDIA's E3 schema v1.2.0: slot values at the root, cell values in cells[]. - Indications, APER and JSON: timestamp, sfn, slot and n_cells = 1 at the root; iq_samples, n_rx_ant and valid_symbol_mask in cells[0]. n_ue and ues are not sent, since n_ue must count the ues carried. - RAN function data: version 2, one stream descriptor for each of the 80 telemetry identifiers (e3sm_layer1_streams.h). The served ones (1, 4, 5, 6, 8, 10, 1000) are available; ID 1 points at the shared memory region, sized from the config because libe3 asks for this data before init() opens the region. - tests/test_l1_kpm_sm (-DE3C_BUILD_TESTS=ON) round-trips both encodings. Breaking change for dApps: iq_samples, n_rx_ant and valid_symbol_mask moved from the root into cells[0]. Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>
With slot_filter.ue_free_only, the slot codelet skips every slot in
which the gNB expects a PUSCH, PUCCH or SRS reception, using the counts
the hook now passes (n_ue, n_pucch, n_srs_ue; an unknown count is
busy). It decides before the helper converts the grid, so a skipped
slot costs no convert and no row. It still sends a descriptor, flagged
E3_SLOT_FLAG_UE_BUSY, which the controller counts as drop ue_busy.
- YAML: slot_filter {ue_free_only, slots}; slots fills the selector's
slot_mask (empty = every slot).
- The selector carries ue_free_only, the descriptor the three counts.
- Empty uplink slots reach the hook only with the gNB's
expert_phy.allow_request_on_empty_uplink_slot: true.
jbpf_e3_slot_api.h and jbpf_e3_ids.h are byte-identical to the ocudu
side, and the slot ctx is now 52 B: build the codelets against an ocudu
tree with the same change.
Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
slot_filter.ue_free_only: the slot codelet skips every slot with a PUSCH, PUCCH or SRS reception (counts from the gNB hook), before any convert; skipped slots are counted asue_busy.slot_filter.slotspicks slot indices.e3sm_layer1.asnis the E3SM-L1-KPM v2 grammar; indications carrycells[0](iq_samples,n_rx_ant,valid_symbol_mask), the RAN function data lists the 80 stream descriptors. Breaking for dApps: readcells[0].main.Tested (arm64 gNB, RU and phone, over the air):
cells[0].ue_free_only: true: published +ue_busy= all captured UL slots,ue_busymatches the slots with PUSCH/PUCCH in the gNB log, and 0 of ~440k published slots had a PUSCH/PUCCH.test_l1_kpm_sm(new,-DE3C_BUILD_TESTS=ON); codelets verified on x86 and arm64; the v2 commit builds on its own.ue_free_only: falsewith a UE.Known, not from this PR: with 2DS7U at ~130 Mbit/s uplink the gNB rejects ~35 % of UL slots (
UL processor is busy), also without jbpf; those slots are neither published nor counted.Type of change
Linked issue
None.
Twin-repo coordination
Paired PR(s): https://github.com/wineslab/ocudu-e3-private/pull/7 (gNB hook counts, same shared headers). The L1-KPM payload changes for dApps (
cells[0]); the dApp side is not in a PR yet.🤖 Generated with Claude Code