Please analyze the sessions.fxt.xml runs and explain how each session progressed. Do you [see] something unusual in any of the 5G-NR protocol interactions?
Ran extract_sessions against all three PCAPs in one batch with the existing sessions.fxt.xml and hosts.txt. Five session types are defined (rrc-connection, pdcp-bearer, rlc-bearer, mac-ue, nas-5gs) — all keyed by C-RNTI or bearer-id, all auto-start, all terminating as incomplete::mid-capture because the FXT intentionally has no session-stop on RRC Release (the inline comment explains why: Release gets RLC-retransmitted many times, which would create spurious session boundaries under multi-match).
| PCAP | rrc-connection | nas-5gs | pdcp-bearer | rlc-bearer | mac-ue |
|---|---|---|---|---|---|
| moto_edge_30_pro | 1 | 1 | 2 | 2 | 1 |
| pixel_6a | 1 | 1 | 1 | 1 | 1 |
| simcom-sim8262e-m2 | 1 | 1 | 1 | 2 | 1 |
Walked the three rrc-connection NDJSON files; each is one full RRC procedure from Setup Request through Release (or capture end).
moto_edge_30_pro (frames 1–69, ~5.5 s). Msg3/4/5 with mo-Data and a NAS Registration Request carrying a 5G-GUTI (0xc0002333) — UE had prior context. AS Security Mode Cmd/Complete at frames 5–6 (NEA0 / NIA2). Several DL/UL Information Transfer NAS round-trips. UE Capability Enquiry → Information (PowerClass pc2 reported six times — multiple band combos). RRC Reconfiguration adds DRB1 (PDCP-SN 12-bit, ROHC off, default DRB, QFI 1, PDU session 1) → Reconfiguration Complete. ~4 s idle, two more NAS round-trips, then RRC Release.
pixel_6a (frames 1–28, ~32 s). Msg3/4/5 with mo-Signalling and a NAS Registration Request carrying a SUCI (concealed IMSI — true first attach). Two NAS round-trips (Identity / Authentication) before AS security activates. AS Security Mode Cmd/Complete at frames 12–13 (NEA0 / NIA2). UE Capability Enquiry → Information. RRC Reconfiguration → Complete (Reconfiguration Complete and a piggybacked NAS UL InfoTransfer share frame 18). Three further UL/DL NAS exchanges spread over ~32 s, then RRC Release.
simcom-sim8262e-m2 (frames 1–57, ~32 s). Msg3/4/5 with mo-Signalling and a NAS Registration Request carrying a 5G-GUTI (0xfa003e0f). AS Security Mode Cmd/Complete immediately at frames 5–6 (NEA0 / NIA2) — no auth round-trip first. Six NAS DL/UL Information Transfers with two long pauses (~16 s and ~3 s). UE Capability Enquiry → Information (PowerClass pc2, just one entry — a much simpler IoT module). RRC Reconfiguration adds DRB1 with PDCP-SN 18-bit for PDU Session 2 → Reconfiguration Complete. Capture ends mid-NAS exchange — no RRC Release was seen.
Cipher: nea0 with Integrity: nia2. AS traffic is integrity-protected but not encrypted. Fine for a test network (the Test network 001/01 PLMN gives this away — open5gs / srsRAN lab), but it would be a serious red flag in production.7e02307ec4b18c7e…) over ~290 ms, while the UE only acks twice. That's the AMF re-firing the same NAS message — likely a T35xx timer expiry waiting for the UE response. Either the UE was slow to respond or RLC was dropping uplink.Are all RLC sessions in AM mode? What is the frequency of RLC Status PDUs? Did we see any RLC retransmissions?
Cross-checked the NDJSON sessions against the raw PCAPs (tshark with mac_nr_udp heuristic enabled per visualether.toml).
Every RLC entity in all three captures is Acknowledged Mode, on SRB1 (always) and on the DRB at LCID 4 (where one was configured — moto and simcom). No UM or TM bearers appear anywhere. Mildly unusual: many real networks use UM for low-latency user-plane DRBs (voice/IMS), but this lab gNB runs everything over AM.
Per RLC entity, computed from session start to last seen frame:
| PCAP | Bearer | Data PDUs | Status PDUs | Span | Status freq |
|---|---|---|---|---|---|
| moto_edge_30_pro | SRB1 (id 1) | 34 | 16 | 5.45 s | 2.9 /s |
| moto_edge_30_pro | DRB1 (id 4) | 19 | 7 | 3.06 s | 2.3 /s |
| pixel_6a | SRB1 (id 1) | 19 | 15 | 32.3 s | 0.46 /s |
| simcom-sim8262e-m2 | SRB1 (id 1) | 21 | 17 | 32.2 s | 0.53 /s |
| simcom-sim8262e-m2 | DRB1 (id 4) | 0 | 28 | 10.2 s | 2.7 /s |
The simcom DRB row is the odd one — 28 status PDUs all advertising the same ACK_SN=128 with no NACKs and zero data PDUs in the session window. That's the receiver polling/keepaliving an idle bearer (the 128 SDUs were delivered earlier; nothing new is flowing, but t-StatusProhibit / Poll bits keep firing status reports).
Bursty when data flows (~2–3 /s during signaling exchanges), drops to ~0.5 /s when the bearer is idle — consistent with the configured t-StatusProhibit (ms0–ms10) and the Poll-bit-on-every-data-PDU pattern visible in the FXT params.
Yes — but none were NACK-driven. Every Status PDU across all five sessions reports zero NACKs (no NACK SN field present anywhere). The retransmissions that did happen are poll-timer-driven re-sends (sender resending the same SN because no Status arrived before t-PollRetransmit expired):
| PCAP / Bearer | Direction | SN | Retx count |
|---|---|---|---|
| moto SRB1 | DL | 1 | 2 |
| moto SRB1 | UL | 2 | 2 |
| moto SRB1 | DL | 2 | 4 |
| moto SRB1 | DL | 3 | 2 |
| moto SRB1 | UL | 4 | 2 |
| moto SRB1 | DL | 4 | 2 |
| moto SRB1 | DL | 6 | 12 ← RRC Release storm |
| moto DRB1 | UL | 2 / 9 / 12 | 2 each |
| pixel SRB1 | — | — | none — pristine |
| simcom SRB1 | DL | 1 / 3 / 6 | 2 each |
Headline numbers: moto's downlink SRB1 retransmits a lot (and DL SN=6 sent 12 times is the RRC Release storm noted in Turn 1). Pixel has zero RLC retransmissions in either direction — cleanest radio of the three. Simcom has a handful of DL retransmissions on SRB1, no UL retx visible.
Net: AM is doing its job — no NACKs because the receiver never had to ask for anything; whatever was lost (or whose Status PDU was late) was repaired silently by t-PollRetransmit.
check the PDCP sessions next
Walked the four pdcp-bearer NDJSON files.
| PCAP | Bearer | Plane | UL | DL | Span | Distinct dup-SN events |
|---|---|---|---|---|---|---|
| moto_edge_30_pro | 1 (SRB1) | Signalling | 9 | 23 | 5.45 s | 5 SNs duplicated (DL SN=2 ×4, DL SN=6 ×12, …) |
| moto_edge_30_pro | 4 (DRB1) | Signalling | 16 | 0 | 3.03 s | 0 |
| pixel_6a | 1 (SRB1) | Signalling | 12 | 7 | 32.3 s | 0 |
| simcom-sim8262e-m2 | 1 (SRB1) | Signalling | 10 | 8 | 32.1 s | 0 |
Plane: Signalling. Even moto bearer 4 (= DRB1, LCID 4) is labeled Signalling. The PCAPs don't carry an explicit DRB-PDCP binding for the dissector, so it defaults to the SRB plane — which means the MAC-I and SN-size we see for bearer 4 should not be trusted as DRB ground truth.0x22020101 and outright 0x00000000 on different SNs. With the dissector treating these as Signalling but the real bearer being a DRB (which under this config has no integrity protection), the four bytes the FXT prints as "MAC-I" are actually trailing payload bytes, not a real authentication code. Diagnostic noise rather than a security issue.↪️ Prev frame: $1 annotation is just Wireshark's back-pointer for bearer-level navigation and shows up on nearly every PDU, so it should not be confused with a retransmission marker.check the MAC-UE sessions next
One mac-ue session per UE (keyed by C-RNTI 0x4601). Tallied LCID distributions, control-element cadence, and pulled raw Power Headroom values from tshark to interpret the link quality.
| PCAP | Frames | UL | DL | Span | UL:DL ratio |
|---|---|---|---|---|---|
| moto_edge_30_pro | 237 | 155 | 82 | 5.56 s | 1.9 |
| pixel_6a | 114 | 80 | 34 | 32.3 s | 2.4 |
| simcom-sim8262e-m2 | 274 | 231 | 43 | 32.3 s | 5.4 |
| LCID | Meaning | moto | pixel | simcom |
|---|---|---|---|---|
| UL 52 | CCCH 48-bit (Msg3) | 1 | 1 | 1 |
| DL 0 | CCCH (Msg4 RRC Setup) | 1 | 1 | 1 |
| DL 62 | UE Contention Resolution Identity | 1 | 1 | 1 |
| UL/DL 1 | SRB1 | 17 / 33 | 18 / 16 | 17 / 21 |
| UL/DL 4 | DRB1 | 19 / 7 | 0 / 0 | 27 / 1 |
| UL 57 | Single-Entry PHR | 22 | 12 | 37 |
| UL 61 | Short BSR | 21 | 12 | 37 |
| UL 62 | Long Truncated BSR | 7 | 0 | 0 |
| UL 63 | Padding | 25 | 13 | 38 |
| DL 63 | Padding | 39 | 15 | 18 |
periodicBSR-Timer from RRC Setup: moto (sf10) → ~4 PHR/s and ~3.8 BSR/s; pixel (sf20) → ~0.37 of each per second; simcom (sf10) → ~1.15 of each per second. Cadence tracks the configured periodicity.mac-nr.control.se-phr.ph index, where 32 ≈ 0 dB and 63 ≈ +38 dB):
| UE | PH index range | Translated PH |
|---|---|---|
| moto_edge_30_pro | 24–31 | −8 to −1 dB (power-limited) |
| pixel_6a | 42 / 62 / 63 | +10 to +31 dB (excellent) |
| simcom-sim8262e-m2 | 44 / 49 / 50 | +12 to +18 dB (good) |
(Short BSR LCG ID=0 BS=0) (PHR PH=44 PCMAX_f_c=40) in one UL-SCH PDU. The session view collapses both control elements onto a single line, which is why PHR and BSR counts come out identical for each UE.Trace the moto RRC Release storm across all five session types — show how the same incident surfaces at MAC, RLC, PDCP, RRC, and how the radio context (PHR) explains it.
Pulled frames 58–69 from every */moto_edge_30_pro/*/incomplete/*.ndjson and joined them on frame.number. The result is the same single PDU (the gNB's RRC Release for C-RNTI 0x4601) re-transmitted 12 times in 414 ms, visible at every layer:
| Frame | Δt (ms) | MAC LCID / HARQ | RLC AM | PDCP | RRC |
|---|---|---|---|---|---|
| 58 | 0 | DL LCID 1, HARQ 0 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 59 | +47 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 60 | +93 | DL LCID 1, HARQ 0 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 61 | +139 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 62 | +185 | DL LCID 1, HARQ 0 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 63 | +231 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 64 | +277 | DL LCID 1, HARQ 2 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 65 | +323 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 66 | +369 | DL LCID 1, HARQ 2 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 67 | +415 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 68 | +461 | DL LCID 1, HARQ 1 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
| 69 | +507 | DL LCID 1, HARQ 0 | Data SN=6, Poll set | DL PDCP SN=6 | 🛑 RRC Release |
t-PollRetransmit: ms45 from RRC Setup, plus one slot of scheduling jitter.The MAC-layer Power Headroom for this UE was index 24–31 (−8 to −1 dB) — the moto was transmitting at or beyond Pcmax with no margin to boost UL coding. When the gNB sent the Release and polled for Status, the UE's UL response either never made it onto the air or arrived corrupted. The gNB's t-PollRetransmit fired, RLC re-handed-down the same SDU, MAC picked a free HARQ process and resent — and the loop ran 12 times in 414 ms before the capture ended.
Five session types, one root cause: a power-limited UE losing its uplink at exactly the moment the gNB needed an acknowledgement. That's a story you'd ordinarily reconstruct from four separate Wireshark windows; here it falls out of joining five extract_sessions outputs on frame.number.
Walk the NAS-5GS sessions next.
Each capture produces one nas-5gs session (keyed by C-RNTI). The interesting axis isn't message count — it's how many messages the dissector can actually read in cleartext before NAS-layer ciphering kicks in. That depends entirely on whether the UE presented a SUCI or a 5G-GUTI in the initial Registration Request.
| PCAP | Total NAS msgs | Plaintext | Ciphered | Notes |
|---|---|---|---|---|
| moto_edge_30_pro | 14 | 1 | 13 | Reg Request only; everything else ciphered |
| pixel_6a | 13 | 4 | 9 | Reg Request + Authentication Request + Auth Response + NAS SMC all readable |
| simcom-sim8262e-m2 | 13 | 1 | 12 | Reg Request only; 16 s idle gap mid-session |
fr 3 16:24:22.478 📱 UE → 🌐 AMF 📡 NAS Registration Request (SUCI)
fr 5 16:24:22.482 🌐 AMF → 📱 UE 🔐 NAS Authentication Request
fr 7 16:24:22.558 📱 UE → 🌐 AMF 🔐 NAS Authentication Response
fr 9 16:24:22.562 🌐 AMF → 📱 UE 🔐 NAS Security Mode Command
fr 10+ ──────────── ciphered NAS from here on (Reg Accept, PDU Session, etc.)
The whole pre-security NAS exchange — challenge, response, algorithm negotiation — happens in 84 ms (frames 5–9). Only after the AMF's Security Mode Command does the inner mm.message_type become unreadable; the lavender Ciphered-NAS template kicks in and surfaces just the security envelope (sequence number + MAC-I).
Both UEs present a 5G-GUTI (cached identity from a prior attach), so the AMF skips Authentication entirely and resumes the existing security context. Result: the very first message after Registration Request is already integrity-protected and ciphered, so we see exactly one dissectable NAS message per capture and then a wall of 🔒 DL/UL Ciphered NAS rows. The lavender template surfaces the security header type, MAC-I, and sequence number — enough to confirm that NAS security is on, but nothing about the payload type.
K_NAS_enc from the test network or to correlate with AMF-side logs.MAC-I and SEQ fields are still useful: a missing or non-incrementing sequence number would indicate replay/gap, and a constant MAC-I across distinct frames would indicate a broken cipher state. None of those red flags appears in any of the three captures.5g-nr-radio/
├── moto_edge_30_pro.pcap # input
├── pixel_6a.pcap # input
├── simcom-sim8262e-m2.pcap # input
├── explore.fxt.xml # (pre-existing) exploration template
├── sessions.fxt.xml # (pre-existing) session-tracking template
├── hosts.txt # (pre-existing) host alias file
├── session.md # this report (Markdown)
├── session.html # this report (styled HTML)
└── output/
└── sessions/
├── moto_edge_30_pro/{rrc-connection,nas-5gs,pdcp-bearer,rlc-bearer,mac-ue}/incomplete/*.ndjson
├── pixel_6a/{rrc-connection,nas-5gs,pdcp-bearer,rlc-bearer,mac-ue}/incomplete/*.ndjson
└── simcom-sim8262e-m2/{rrc-connection,nas-5gs,pdcp-bearer,rlc-bearer,mac-ue}/incomplete/*.ndjson
RRC_CONNECTED with DRB1 set up; moto and pixel additionally observed an RRC Release, simcom capture cut off mid-procedure.001/01 test PLMN, but unacceptable in production.periodicBSR-Timer cleanly; all BSRs are buffer-index 0 (empty-buffer keepalives). Pixel never used DRB1 at the MAC layer in the 32 s window.t-PollRetransmit cadence. The power-limited UL is the root cause; five session views point at one radio condition.