Skip to content

User Plane (GTP-U / PFCP)

The user plane in 5G and 4G networks carries subscriber data through GTP-U tunnels controlled by PFCP sessions. Telovix monitors both planes on UPF, SMF, SGW, and gNB nodes, using AF_PACKET capture on the network interface plus eBPF instrumentation of the process layer.

Requires: Telecom sensor flavor.


How the sensor monitors the user plane

The sensor uses two capture paths simultaneously:

AF_PACKET capture reads raw packets from the configured monitoring interface. This interface is auto-detected through four steps in order: telecom socket analysis (looking for GTP-U and PFCP bindings), default route interface, first physical interface, then eth0. The monitoring interface can be set explicitly in Console Settings when the auto-detection picks the wrong interface. AF_PACKET capture provides GTP-U header parsing and PFCP message decoding.

eBPF instrumentation tracks process behavior on the same node: which binary owns port 2152 or 8805, what system calls the UPF process makes, and whether any privilege or integrity anomalies occur on the host running user-plane functions.

Both paths contribute data to the same heartbeat payload, so GTP-U anomalies and process-level events appear in the same timeline.


PFCP (Packet Forwarding Control Protocol)

PFCP runs between the SMF and UPF over UDP port 8805. In 5G this is the N4 interface. In 4G EPC, the equivalent interfaces are Sxa (SGW-C to SGW-U) and Sxb (PGW-C to PGW-U).

What the sensor decodes

The sensor decodes the PFCP message header (version, message type, sequence) and extracts Session Establishment Data:

Rule typeContents captured
PDR (Packet Detection Rule)Source interface, destination, precedence order
FAR (Forwarding Action Rule)Action: forward, duplicate, or drop
URR (Usage Reporting Rule)Volume threshold that triggers a usage report

Session tracking

Each PFCP session is tracked by its SEID (Session Endpoint Identifier), which maps to a UE session. The sensor records the full session state transition sequence:

StateMeaning
CreatedSession establishment accepted
ModifiedSession parameters updated
ActiveData plane is live
DeletedSession terminated

Per-session QoS parameters are recorded at session creation: the 5QI (5G QoS Indicator) determines the traffic class and scheduling priority; the AMBR (Aggregate Maximum Bitrate) defines the maximum throughput allowed for this UE session.

PFCP metrics

MetricSLOAnomaly trigger
Session create latency (SMF to UPF)< 100msExceeded
Session modification rate per UPFTracked (baseline)Spike above baseline
Dropped packet count0Any non-zero value

The session create latency SLO (< 100ms) is defined in pfcp_metrics.rs. Exceeding it consistently indicates UPF overload or N4 path degradation.

PFCP anomalies

AnomalyMeaning
Invalid SEIDPacket references a session not in the current table; routing error or potential spoofing
SEID collisionTwo sessions share the same SEID; session hijacking risk
Session churnRapid cycle of create and delete; may indicate attach storm or targeted disruption

PFCP data from the heartbeat is available in the pfcp_session_report, pfcp_msg_report, pfcp_seid_report, and pfcp_metrics_report fields.


GTP-U (GPRS Tunneling Protocol User Plane)

GTP-U carries subscriber IP packets inside tunnels over UDP port 2152. In 5G the relevant interfaces are N3 (gNB to UPF) and N9 (UPF to UPF). In 4G the equivalent is S1-U (eNB to SGW).

What the sensor decodes

From each GTP-U packet the sensor extracts:

  • Version and PT flag (protocol type)
  • E/S/PN flags (extension header, sequence, N-PDU number presence)
  • Message type
  • TEID (Tunnel Endpoint Identifier)
  • Sequence number
  • Inner PDU type (IPv4 or IPv6)

The TEID is mapped to a UE session. The sensor builds and maintains a TEID-to-session table per UPF. When a TEID appears that is not in the table, the sensor flags it as an anomaly.

Endpoint role classification

The sensor assigns an interface role based on the process binding port 2152 and its declared NF role:

NF roleGTP-U interface
UPFN3 (from gNB) and N9 (from peer UPF)
gNBN3 (UE tunnel ingress toward UPF)
SGW or eNBS1-U (4G)

GTP-U anomalies

AnomalyMeaning
TEID ReuseSame TEID reused by different PDN connections; session hijacking risk
Out-of-Order PacketsSequence number discontinuities; congestion or packet reordering attack
Invalid TEIDPacket with TEID not in current session table; routing error or spoofing
Encapsulation LoopGTP-U packet containing another GTP-U packet; stack overflow attack
Payload Size AnomalyInner packet larger than tunnel MTU; fragmentation bypass attempt

GTP-U anomaly data from the heartbeat appears in the gtpu_anomaly_report field. The tunnel inventory is in gtpu_inventory and per-TEID tracking is in gtpu_teid_report.


Visibility gap detection

High-throughput UPF deployments often bypass the kernel packet path using AF_XDP, VFIO, or DPDK. When this happens, the sensor cannot observe GTP-U packets via AF_PACKET. The sensor detects these techniques and flags the gap explicitly:

TechniqueDetection method
AF_XDP (eXpress Data Path)/proc/{pid}/maps checked for xdp_* entries
VFIO (Virtual Function I/O)IOMMU group soft links in /sys/bus/pci
DPDK (Data Plane Development Kit)Hugepage allocations in /proc/meminfo

When AF_XDP or VFIO is detected on GTP-U port 2152, the sensor sets gtp_visibility_gap=true in the heartbeat (visibility_gap_report field). The Console displays a warning on the UPF node: "User plane traffic not visible to eBPF monitoring."

A visibility gap does not stop other monitoring. PFCP control-plane sessions, process behavior, privilege events, file integrity, and network connections remain fully visible. Only the GTP-U encapsulated data plane packets are inaccessible.


UDP listeners

UDP listeners for GTP-U (port 2152) and PFCP (port 8805) are reported from the heartbeat snapshot. These are served separately from TCP listeners because they come from /proc/net/udp rather than /proc/net/tcp.

In the Console, go to Sensors > [sensor] > Network > UDP Listeners. Each record shows the local IP and port, remote address (0.0.0.0 for unconnected), state, UID, inode, drop count, PID, binary path, and interface name (e.g., GTP-U).

The drop count field is particularly useful for user-plane monitoring: a non-zero drop count on port 2152 indicates that UDP receive buffer is saturating, which can be an early indicator of a GTP-U flood attack or UPF overload.


Console views for user plane

User-plane view

In the Console, go to Telco > User Plane. The page shows the current user-plane state across the fleet: PFCP session counts per UPF, active GTP-U tunnel counts, TEID anomaly counts, visibility gap flags, and per-node SLO status.

The User Plane view showing PFCP session counts, GTP-U tunnel inventory, TEID anomaly flags, and visibility gap indicators per UPF node.
The User Plane view showing PFCP session counts, GTP-U tunnel inventory, TEID anomaly flags, and visibility gap indicators per UPF node. Click to enlarge

Filtering runtime events for user-plane roles

In the Console, go to Activity > Runtime Events. Use the NF Role filter to select upf and the time range selector to set the window. Add the Event Kind filter to narrow results to specific event types such as network_connect.

Protocol capture viewer

In the Console, go to Telco > Protocol Capture. The sensor includes a PCAPNG snapshot in the heartbeat payload for telecom nodes. The protocol capture viewer decodes and presents this snapshot for inspection, providing a short-window packet-level record of telecom protocol activity (GTP-U, PFCP, SCTP) at the time of the heartbeat.

AI assistant tools

The AI assistant provides two user-plane tools:

get_pfcp_sessions: Returns the current PFCP session state for a sensor or across the fleet: session count, state distribution, latency distribution, and recent anomalies.

get_gtpu_tunnels: Returns the GTP-U tunnel inventory: TEID count, endpoint roles (N3, N9, S1-U), anomaly flags, and visibility gap state.

Ask the AI assistant: "Show PFCP session state for UPF nodes."


SLO targets

Both UPF and SMF carry five-nines (99.999%) availability targets for user-plane functions:

RoleSLO target
UPF99.999%
SMF99.999%
SGW99.999%
PGW99.999%

Breach detection activates after 300 seconds of observation. Breach alerts are suppressed for 3,600 seconds to prevent re-alert storms.


4G compatibility

For 4G EPC deployments, the user-plane sensor behavior is identical with different interface labels:

5G4G equivalent
N4 (PFCP, SMF to UPF)Sxa (SGW-C to SGW-U), Sxb (PGW-C to PGW-U)
N3 (GTP-U, gNB to UPF)S1-U (GTP-U, eNB to SGW)
N9 (GTP-U, UPF to UPF)S5/S8 (GTP-U, SGW to PGW)

Role values for 4G nodes: sgw, pgw. PFCP anomaly detection applies to Sxa and Sxb the same way it applies to N4.


Operational guidance

Interface selection: If the UPF or SGW has multiple network interfaces, configure the monitoring interface in Console Settings to point to the interface carrying GTP-U and PFCP traffic. Using the wrong interface results in empty gtpu_inventory and pfcp_session_report fields in the heartbeat, with no error logged beyond the absence of data.

Kernel bypass UPFs: For production UPFs running AF_XDP or DPDK, expect gtp_visibility_gap=true on every heartbeat. Set a suppression rule for visibility_gap events on these specific sensors to avoid repeated alerts. The PFCP control-plane metrics remain valid and should still be monitored for session anomalies even when GTP-U visibility is limited.

Session churn threshold: The session churn anomaly fires when create/delete cycling exceeds a rate consistent with the baseline. During planned maintenance windows (bulk UE detach), the churn rate will spike. Use a time-bounded suppression rule to avoid noise during known maintenance windows.

Drop count monitoring: Monitor the drops field on UDP port 2152 listeners. A sustained non-zero drop count on a production UPF indicates receive buffer exhaustion. This is a pre-cursor to GTP-U packet loss that may not yet be visible in PFCP session metrics.


Limitations

  • GTP-U data plane is invisible when kernel bypass is active: When a UPF uses AF_XDP, VFIO, or DPDK, the sensor cannot observe GTP-U encapsulated data packets via AF_PACKET. The sensor detects and flags this as gtp_visibility_gap=true, but the packets themselves are not accessible. PFCP control-plane monitoring and all process-level eBPF collection remain unaffected.
  • PFCP monitoring requires the correct monitoring interface: If the sensor's configured monitoring interface does not carry PFCP traffic, session tracking will not function. There is no error logged when the interface is wrong; the absence of data in pfcp_session_report is the only signal.
  • GTP-U inner packet inspection is not supported: The sensor captures GTP-U tunnel metadata (TEID, endpoint roles, sequence numbers) and detects structural anomalies. It does not inspect or decode the subscriber IP packets carried inside GTP-U tunnels.
  • Short-lived connections may not appear in the PFCP session view: Sessions that open and close between heartbeat cycles (within 15 seconds) may not be captured in the pfcp_session_report snapshot. They may still appear as network_flow events if the sensor's flow tracker captured them.
  • Session churn baseline requires observation time: The session churn anomaly compares against an established baseline. During initial sensor deployment, the baseline is not yet built and the anomaly will not fire. Allow at least 14 days of observation before treating the absence of session churn alerts as meaningful.

Further reading

Released under the Telovix Commercial License.