VisualEther Session — Open5GS 5GC + UERANSIM Control Plane Analysis

PCAP: cp_0804_02.pcap (446 KB, 2272 packets, captured 2022-08-04)  |  Session date: 2026-05-01  |  Tools: VisualEther MCP server

Turn 1 — Generate FXT templates

User
Please generate explore.fxt.xml and sessions.fxt.xml for @cp_0804_02.pcap
Claude

Ran analyze_capture against the PCAP. Detected 7 protocols: NGAP, HTTP/2, MongoDB, SCTP, PFCP, NAS-5GS, TCP.

Recommended template: 5g-attach/explore.fxt.xml (57% coverage). Better fit found in 5g-core-free5gc which covers HTTP/2 SBA + NGAP + NAS-5GS + PFCP + GTP-U.

Action: Copied 5g-core-free5gc/explore.fxt.xml and 5g-core-free5gc/sessions.fxt.xml from the bundled samples into the PCAP directory.

Validated both against the PCAP:

FileTemplatesSession typesCoverage
explore.fxt.xml720681 / 2272 frames matched (30%, control-plane only)
sessions.fxt.xml764 (sba, ngap, pfcp, gtpu)2236 / 2272 frames matched (98%)

All conflicts reported by the validator were "expected first-match-wins" — no errors.

Turn 2 — Generate hosts.txt

User
please generate hosts.txt as well
Claude

Ran extract_endpoints (axis=port) and identified all unique IP:port pairs.

Used HTTP/2 :authority headers (extracted via extract_fields) to confirm 127.0.0.10 and 127.0.1.10 map to NRF (paths under /nnrf-nfm/...).

Mapped remaining IPs using Open5GS default loopback conventions:

127.0.0.4    SMF        127.0.0.13   PCF        192.168.0.111  AMF (N2 38412)
127.0.0.5    AMF        127.0.0.15   BSF        192.168.0.112  UPF/SMF (N4 8805)
127.0.0.9    HSS.PCRF   127.0.0.20   UDR        192.168.0.113  UPF/SMF (N4 8805)
127.0.0.10   NRF        127.0.0.24   NSSF       192.168.0.114  UPF/SMF (N4 8805)
127.0.0.11   AUSF       127.0.1.10   NRF.alt    192.168.0.115  UPF/SMF (N4 8805)
127.0.0.12   UDM        127.0.0.1    MongoDB    192.168.0.131  gNB (UERANSIM)

Saved as hosts.txt (tab-separated IP[:port]<TAB>Name).

Turn 3 — Add emojis

User
Before that let us add emojis to message, parameter and host names
Claude

Audited both FXT files for opcodes/params lacking emoji prefixes. Applied edits via Edit tool with replace_all.

Params updated (both files)

Opcodes updated (sessions.fxt.xml only)

hosts.txt — NF-typed emojis

📋 NRF      📍 AMF      🌐 SMF      🔐 AUSF/UDM    💰 PCF
💼 BSF      🗄️ UDR      🧩 NSSF     📡 gNB.RAN     🔀 UPF1-4
🏛️ HSS.PCRF              🗃️ MongoDB

Re-validated — both FXT files still valid (72 / 76 templates, 0 errors).

Turn 4 — Run explore

User
let us run explore first
Claude

Ran explore with the FXT and hosts file:

input:      cp_0804_02.pcap
fxt_file:   explore.fxt.xml
hosts_file: hosts.txt
output_dir: explore_output/

Result: 681 / 2272 frames matched. Viewer opened at: explore_output/cp_0804_02/cp_0804_02_viewer.html

Turn 5 — Run extract_sessions

User
yes
Claude

Ran extract_sessions with the same hosts file.

Session typeOutcomeCount
5g-ngap-sessionsuccess::context-setup-complete2
5g-ngap-sessionsuccess::context-released1
5g-ngap-sessionincomplete::no-close1
5g-ngap-sessionincomplete::mid-capture1
5g-pfcp-sessionsuccess::session-deleted1
5g-pfcp-sessionincomplete::no-close2
5g-sba-sessionfailure::tcp-reset6
5g-sba-sessionincomplete::no-close28

Navigator opened at sessions_output/cp_0804_02/index.html.

Turn 6 — Analyze 5g-sba-session flows

User
Please analyze the 5g-sba-session sessions. Do you see any differences in the flows?
Claude

Walked the 34 SBA NDJSON files (6 failure + 28 incomplete) and aggregated message labels per session.

Failure (6 sessions) — all identical

All 6 are TCP SYN → RST,ACK to 🏛️ HSS.PCRF on 127.0.0.9:3868 (Diameter). Different ephemeral source ports, all from 127.0.0.1, rejected within microseconds. A 4G Diameter peer is down/unconfigured and a client (likely PCF or SMF probing for legacy interworking) keeps retrying. Harmless for 5G call flow but noisy.

Incomplete (28 sessions) — different shapes per role

#DestinationMsgsFlow signature
15, 16MongoDB :2701737, 69TCP only — FXT has no Mongo templates (subscriber DB reads)
17, 19, 23, 25, 26📋 NRF.alt55–104Pure NF self-registrationnf-instances/<UUID> PUT/PATCH heartbeats + 204
18📋 NRF.alt61Subscription + nf-status-notify — NRF pushing notifications
20, 21, 22, 24📋 NRF.alt89–184Mixed indirect-mode — NRF-registration + AUSF/UDR/UDM service calls multiplexed (SCP-less open5gs)
27📍 AMF27NRF→AMF nf-status-notify (inbound)
28📍 AMF31AMFComm n1-n2-messages (downlink N1/N2)
29📋 NRF522NF management hub — 25 subscription creates, 35 nf-instance ops, all heartbeats land here
30–34📋 NRF21–33Discovery queriesNRFDisc v1 nf-instances200 OK
35💰 PCF52Full policy lifecycle: Create AM Policy + Create SM Policy + delete
36🔐 AUSF455G-AKA: Start UE Auth5g-aka-confirmation (run twice)
37🌐 SMF35PDU session lifecycle: Create SM ContextModifyRelease
38🗄️ UDR86Full subscriber-data fan-out: auth-subscription, auth-status, AMF context, AM/SM data
39🧩 NSSF29Anomalous — SMF-style paths land on NSSF (likely SCP routing or wrong host mapping)
40🔐 UDM21Lonely inbound nf-status-notify
41🔐 UDM88Full UDM run: Generate Auth Data + auth-events + AMF Registration + SDM am-data
42💼 BSF33nbsf-management/pcfBindings create + delete

Key flow differences

  1. Two NRF endpoints behave differently127.0.0.10 is the management hub (heartbeats, discovery), 127.0.1.10 receives per-NF registration PUTs. Same NRF, two service interfaces.
  2. Session 29 is an outlier — 522 messages, 25× the median. The persistent NF-management bus.
  3. Sessions 20–22, 24 carry non-NRF service paths (UDR/AUSF/UDM) inside an NRF.alt connection — open5gs's SCP-less indirect routing.
  4. All "incomplete" sessions are healthy — long-lived persistent HTTP/2 SBI connections that simply outlive the capture; not broken flows.
  5. Per-procedure traceability is excellent for one UE (imsi-001010000000000): session 36 (AKA), 41 (UDM auth+registration), 38 (UDR data), 37 (SM-context lifecycle), 35 (PCF policy), 42 (BSF binding). Together these constitute one complete 5G registration + PDU session establishment + release.
  6. Session 39 (NSSF) is suspicious — SMF-pattern paths arriving at the NSSF address. Either the host mapping for 127.0.0.24 is wrong or NSSF is co-located with an SMF in this open5gs config.

Turn 7 — PFCP success vs incomplete

User
What is the difference between successful and incomplete sessions for 5g-pfcp-session sessions?
Claude

Dumped all 3 PFCP session NDJSON files. There is 1 success and 2 incomplete.

Common skeleton (all PFCP associations)

  1. Association Setup Request (retried up to 3× at ~2.5s — open5gs default before peer responds)
  2. Association Setup Response
  3. Bidirectional Heartbeat Request/Response every ~11s
  4. Session Establishment Request/Response (SEID 0x1) — when a UE PDU session is created
  5. Session Modification Request/Response — gNB-side F-TEID is installed after NGAP PDU Session Resource Setup Response
  6. More heartbeats
  7. Session Deletion Request/Response ← only present in success

Per-session differences

SessionPairMsgsEstablishmentModificationDeletionOutcome
success/00007.112 ↔ .11426success::session-deleted (52.251s)
incomplete/00014.113 ↔ .11529incomplete::no-close
incomplete/00013.115 ↔ .1124incomplete::no-close

What actually distinguishes them

  1. Successful = saw the Deletion handshake. Session 7 ends with Session Deletion RequestResponse (Cause: success). That single exchange is what flips the outcome to success::session-deleted.
  2. Incomplete 14 is functionally identical to success 7 through Modification — both go Assoc → Heartbeat → Establish → Modify. The capture window simply ended before the corresponding NAS PDU Session Release reached this UPF, so no Deletion was observed.
  3. Incomplete 13 is a different shape entirely — 4 heartbeat-only frames. The Association and any PDU session for this pair happened before the capture started; auto-start created a "session" from the first Heartbeat.

Pair-level observation

The capture has two parallel SMF↔UPF associations: (.112↔.114) and (.113↔.115). Only the first carried a PDU session through to release within the capture; the second was still active when the trace ended.

Note on host naming: Based on the Node-IDs inside the PFCP messages, .112/.113 look like SMF instances and .114/.115 look like UPF instances (open5gs typically deploys redundant SMF↔UPF pairs). The current hosts.txt labels all four as UPF — worth correcting if the diagrams will be shared.

Artifacts & findings

Files produced

open5gs_5gc_ueransim/
├── cp_0804_02.pcap                    # input
├── explore.fxt.xml                    # exploration template (72 templates)
├── sessions.fxt.xml                   # session-tracking template (76 templates, 4 session types)
├── hosts.txt                          # IP/port → NF-name mapping with emojis
├── explore_output/
│   └── cp_0804_02/
│       └── cp_0804_02_viewer.html     # combined sequence diagram
└── sessions_output/
    └── cp_0804_02/
        ├── index.html                 # session navigator
        ├── 5g-ngap-session/{success,incomplete}/
        ├── 5g-pfcp-session/{success,incomplete}/
        └── 5g-sba-session/{failure,incomplete}/

Findings summary