PFCP and PDR / FAR / QER / URR — How Does the UPF Classify and Forward Packets?¶
Learning objectives¶
After reading this chapter, you will be able to:
- Explain that PFCP is not a protocol for carrying User Packets, but a Control Protocol for configuring UPF processing rules
- Explain the reference relationships PDR → FAR / QER / URR (the PDR identifies "which Packet," while the others specify "how to handle it")
- Explain why PDR matching criteria differ between UL and DL (F-TEID / UE IP Address / SDF Filter)
- Explain the relationship between FAR Apply Action (FORW / DROP / BUFF / NOCP) and Paging for a CM-IDLE UE
- Follow PDR → FAR ID → FAR in a PFCP capture and identify issues such as a TEID mismatch
- Explain the difference between the N2 SM Information the SMF sends toward the gNB and the N4 (PFCP) rules it sends to the UPF
Prerequisites¶
- PDU Session Establishment Deep Dive — how the SMF configures the UPF through PFCP Establishment → Modification
- Paging / Service Request / CM-IDLE / CM-CONNECTED and Service Request — procedures beginning when DL Data arrives for a CM-IDLE UE
- Supplementary: N4 / N3 / N6 / QoS / Charging
The focus of this chapter (Level ∞ Deep Dive)
In the previous chapter, we saw when the SMF "installs rules" in the UPF over N4. This chapter digs into the contents of those rules and the order in which the UPF makes decisions from receiving a Packet to sending it out.
The details of PDR matching conditions (PDI / F-TEID / SDF Filter / Precedence) are covered in the next chapter, PDR / PDI / F-TEID / SDF Filter / Precedence. This chapter focuses on the relationships among the rules and the behavior of the FAR.
Why — The UPF is not just a "box that sends traffic to the Internet"¶
For each Packet it receives, the UPF decides the following:
A Packet arrives
↓ Which PDU Session and which Traffic does this Packet belong to? ← PDR
↓ Forward it? Drop it? Buffer it? Where to? ← FAR
↓ Which bandwidth / QoS should apply? ← QER
↓ How much has been used? ← URR
Send it (N3 / N6 / N9)
The SMF configures these decision rules on the UPF, using PFCP (Packet Forwarding Control Protocol) (TS 29.244 Clause 4.1 / Clause 5.1, to be confirmed).
Analogy: The UPF is a "sorting center." A PDR is the condition for reading a shipping label, a FAR is the destination and instruction to "store / discard," a QER is the speed limit for the delivery truck, and a URR is the handling-volume ledger. The SMF writes and hands over the rulebook for sorting.
What — Where PFCP fits¶
Control Plane User Plane
SMF ════════ UPF gNB ════════ UPF ════════ DN
N4 / PFCP N3 / GTP-U N6
(configures rules) (the UE's Packets themselves)
- PFCP is the Control Protocol on N4 (SMF ⇔ UPF) (TS 29.244 Clause 4.1 / Clause 5.1, to be confirmed). It does not carry the UE's User Packets themselves. Even when User Packets are forwarded between the UPF and SMF for SMF buffering, an N4 GTP-U Tunnel, not PFCP, is used (TS 29.244 Clause 5.3, TS 23.501 Clause 5.8.3, to be confirmed).
- UE Data is carried over N3 using GTP-U (TS 29.281 Clause 5, to be confirmed) and over N6 using the DN's protocol.
- PFCP runs over UDP (the registered PFCP port is UDP 8805; TS 29.244 Clause 4.2.2, to be confirmed) and has node-level procedures (Association Setup / Heartbeat, etc.) and session-level procedures (Session Establishment / Modification / Deletion / Report) (TS 29.244 Clause 6 / Clause 7, to be confirmed).
- Session-level procedures require that a PFCP Association has already been established between the SMF and the UPF (TS 29.244 Clause 6.2.6, to be confirmed).
Do not confuse N2 SM Information with N4 (PFCP)¶
For a single PDU Session, the SMF creates three kinds of information with different destinations.
SMF ──N1 SM info──► AMF ──NAS (N1)──► UE … for the UE (PDU Session Establishment Accept, etc.)
SMF ──N2 SM info──► AMF ──NGAP (N2)─► gNB … for the RAN (UPF's N3 F-TEID, QoS Flow setup, etc.)
SMF ──N4 / PFCP─────────────────────► UPF … for the UPF (PDR / FAR / QER / URR)
gNB ══N3 / GTP-U════════════════════► UPF … the UE's User Packets themselves
| Information | Destination | Path | Example contents | Specification |
|---|---|---|---|---|
| N1 SM information | UE | SMF → AMF (Namf_Communication_N1N2MessageTransfer) → NAS | PDU Session Establishment Accept (QoS Rules, PDU Address, etc.) | TS 23.502 Clause 4.3.2.2.1, TS 24.501 Clause 6.4.1 (to be confirmed) |
| N2 SM information | gNB | SMF → AMF (same as above) → NGAP | PDU Session Resource Setup Request Transfer (UL NG-U UP TNL Information = UPF-side N3 F-TEID, QoS Flow information) | TS 23.502 Clause 4.3.2.2.1, TS 38.413 Clause 9.3.4.1 (to be confirmed) |
| N4 rules | UPF | SMF → UPF (PFCP, not via the AMF) | Create PDR / FAR / QER / URR | TS 29.244 Clause 7.5.2 (to be confirmed) |
PFCP and N2 SM information work as two wheels that hand F-TEIDs back and forth. The UPF-side N3 F-TEID is either allocated by the SMF (written in Create PDR) or allocated by the UPF (CH flag → returned in Created PDR); either way it is fixed over PFCP and delivered to the gNB in N2 SM information. Conversely, the gNB-side F-TEID returns to the SMF in N2 SM information (Response Transfer) and is installed in the UPF's FAR by PFCP Session Modification.
Analogy: N2 SM information is "a letter addressed to the branch office (gNB)," while PFCP is "a work order addressed to the warehouse (UPF)." Headquarters (the SMF) writes both, but the recipients and delivery routes differ.
What — Packet Forwarding Model¶
TS 29.244 defines the following model for Packet processing within the UPF (TS 29.244 Clause 5.2.1, to be confirmed).
flowchart LR
P[Incoming Packet] --> PDR{"PDR lookup
(PDI and Precedence)"}
PDR -- "FAR ID" --> FAR["FAR
Apply Action / Forwarding Parameters"]
PDR -- "QER ID(s)" --> QER["QER
Gate / MBR / GBR / QFI"]
PDR -- "URR ID(s)" --> URR["URR
Volume / Time / Event measurement"]
FAR -- "BAR ID (optional)" --> BAR["BAR
Buffering"]
FAR --> OUT["N3 / N6 / N9 / CP-function"]
Figure: A simplified conceptual view of the Packet Forwarding Model in TS 29.244 (TS 29.244 Clause 5.2.1, to be confirmed). Incoming Packet → PDR lookup shows the processing flow, while the arrows from the PDR to each rule represent references by ID (not chronological processing order). The BAR is referenced by the FAR's BAR ID and is meaningful when the FAR is BUFF. The CP-function destination covers cases such as buffering at the SMF, where packets are sent to the SMF over a GTP-U tunnel on N4.
| Rule | Full name | In a nutshell | Reference from PDR |
|---|---|---|---|
| PDR | Packet Detection Rule | Which Packet? (WHO / WHAT) | — |
| FAR | Forwarding Action Rule | What to do, and where (ACTION / WHERE) | Usually one (FAR ID. Excludes use of Predefined Rules and use of MAR ID (ATSSS). TS 29.244 Clause 7.5.2.2, to be confirmed) |
| QER | QoS Enforcement Rule | At what QoS? (HOW FAST) | Zero or more (QER ID) |
| URR | Usage Reporting Rule | How much was used? (HOW MUCH) | Zero or more (URR ID) |
| BAR | Buffering Action Rule | How to handle buffering | Referenced from FAR (optional) |
Other rules have been added in later Releases, such as MAR (Multi-Access Rule) for ATSSS (not covered in this chapter). Parameters for each rule in 5GS are also organized in TS 23.501 Clause 5.8.2.11 (sub-clause to be confirmed).
What — PDR (Packet Detection Rule)¶
A PDR is a rule that determines which PDU Session and which Traffic a received Packet belongs to.
Main contents of a PDR¶
Create PDR
├─ PDR ID
├─ Precedence ← Priority when multiple rules match
├─ PDI (Packet Detection Information)
│ ├─ Source Interface ← Access (N3 side) / Core (N6 side), etc.
│ ├─ Local F-TEID ← Primarily used for UL matching
│ ├─ Network Instance
│ ├─ UE IP Address ← Primarily used for DL matching
│ ├─ SDF Filter ← e.g. 5-tuple
│ └─ QFI
├─ Outer Header Removal (optional) ← Remove GTP-U/UDP/IP on UL
├─ FAR ID
├─ URR ID (zero or more)
└─ QER ID (zero or more)
(IE composition: TS 29.244 Clause 7.5.2.2, to be confirmed)
Who decides the Local F-TEID? — the CHOOSE (CH) flag¶
The Local F-TEID used for UL matching (UPF-side N3 IP + TEID) can be allocated by the SMF or allocated by the UPF (TS 23.501 Clause 5.8.2.3, to be confirmed).
- To let the UPF allocate it, the SMF sets the CHOOSE (CH) flag in the F-TEID IE in the PDI of Create PDR and sends it without a concrete TEID / IP (TS 29.244 Clause 8.2.3, to be confirmed).
- The UPF returns the allocated value in the Created PDR IE of the Session Establishment Response (TS 29.244 Clause 7.5.3.2, to be confirmed). The SMF puts this value into N2 SM information (UL NG-U UP TNL Information) and passes it to the gNB.
- To have the same F-TEID allocated to multiple PDRs, specify the same value with CHOOSE ID (CHID). The UPF allocates the same F-TEID to PDRs with the same Choose ID (TS 29.244 Clause 8.2.3, to be confirmed).
Which approach is used depends on SMF / UPF capabilities and configuration (UPF-side support is indicated by FTUP in UP Function Features during PFCP Association; TS 29.244 Clause 8.2.25, to be confirmed).
PDI details are in the next chapter
Each PDI IE (Source Interface / Network Instance / UE IP Address / SDF Filter / QFI), how to use the F-TEID CH / CHID flags, SDF Filter syntax, and Precedence design are covered in detail in the next chapter, PDR / PDI / F-TEID / SDF Filter / Precedence. This chapter covers them only as far as needed to understand "how a PDR references FAR / QER / URR."
UL and DL use different matching clues¶
| Direction | How the Packet arrives | Source Interface | Main matching condition |
|---|---|---|---|
| UL (UE → DN) | Arrives from the gNB in N3 GTP-U | Access | Local F-TEID (UPF-side IP + TEID) + QFI / SDF Filter as needed |
| DL (DN → UE) | (For a PSA UPF and IP-type PDU Session) arrives from the DN over N6 as plain IP. There is no TEID (for an I-UPF via N9, match on GTP-U Local F-TEID) | Core | UE IP Address (destination) + SDF Filter as needed |
UL: gNB ──GTP-U (TEID=0x00000101)──► UPF
PDR #1: Source=Access, F-TEID=198.51.100.20/0x00000101 → MATCH
Outer Header Removal: GTP-U/UDP/IPv4 → inner IP goes to N6
DL: DN ──IP (dst=10.45.0.3)──► UPF
PDR #2: Source=Core, UE IP=10.45.0.3 (destination) → MATCH
FAR → encapsulate in GTP-U with Outer Header Creation and send to gNB
Precedence — when multiple PDRs match¶
Since multiple PDRs may match the same Packet, PDRs have Precedence. The UPF selects the matching PDR with the smallest Precedence value (i.e. the highest priority) (TS 29.244 Clause 5.2.1 / Clause 8.2.11, to be confirmed).
DL Packet (dst=10.45.0.3, dst port=5060)
├─ PDR #2 Precedence=255 UE IP=10.45.0.3 → match
└─ PDR #3 Precedence=100 UE IP=10.45.0.3 + SDF(port 5060) → match
↓ Smaller value has priority
Apply PDR #3 (e.g. to a separate QoS Flow for IMS)
In multiple QoS Flow and Traffic Steering scenarios, it is important to check whether the selected PDR is the intended one. How Precedence values are assigned is not uniformly specified and is SMF-implementation / operations-dependent. For design considerations, see the next chapter.
What — FAR (Forwarding Action Rule)¶
The FAR determines what to do with a Packet matched by a PDR. Its central IE is Apply Action (TS 29.244 Clause 8.2.26, to be confirmed).
| Apply Action | Meaning |
|---|---|
| FORW | Forward (according to Forwarding Parameters) |
| DROP | Discard |
| BUFF | Buffer (according to BAR) |
| NOCP | Notify the CP-function (SMF) when the first DL Packet arrives (may only be set when BUFF is set; TS 29.244 Clause 8.2.26, to be confirmed) |
| DUPL | Duplicate. The duplication destination is specified by the FAR's Duplicating Parameters (Destination Interface, etc.) (TS 29.244 Clause 7.5.2.3, to be confirmed) |
Apply Action is a set of bit flags that are combined (e.g. BUFF + NOCP, FORW + DUPL). However, only one of DROP / FORW / BUFF (including IPMA / IPMD / MBSU etc. depending on the Release) shall be set (TS 29.244 Clause 8.2.26, to be confirmed).
An example of the intended use of DUPL in the specification is Lawful Interception (TS 29.244 Clause 7.5.2.3, to be confirmed). The LI architecture in 5GC is outside the scope of this chapter, and details of duplication destinations and methods include implementation-dependent parts.
Other flags, such as those related to IP multicast and control of DL Data notifications, have been added in some Releases (to be confirmed).
Forwarding Parameters¶
Create FAR
├─ FAR ID
├─ Apply Action = FORW
└─ Forwarding Parameters
├─ Destination Interface ← Access (to N3) / Core (to N6), etc.
├─ Network Instance
└─ Outer Header Creation (used for DL)
├─ Description = GTP-U/UDP/IPv4
├─ TEID = 0x12345678 ← gNB-side TEID
└─ IPv4 Address = 192.0.2.10 ← gNB-side N3 IP
Outer Header Creation — encapsulation in GTP-U for DL¶
DL Packets arriving from the DN are plain IP. To send them to the gNB, the UPF must encapsulate them in GTP-U, which requires the destination IP and TEID in the FAR's Outer Header Creation (TS 29.244 Clause 8.2.56, to be confirmed).
Inner: IP(dst=UE IP) | payload
↓ Outer Header Creation
Outer: IP(dst=gNB N3 IP) | UDP(2152) | GTP-U(TEID=gNB-side) | IP(dst=UE IP) | payload
The GTP-U UDP port 2152 is specified in TS 29.281 Clause 4.4.2 (to be confirmed).
This value is returned by the gNB in NGAP PDU Session Resource Setup Response (DL QoS Flow per TNL Information in the Response Transfer; TS 38.413 Clause 8.2.1 / Clause 9.3.4.2, to be confirmed). In the previous chapter, the SMF applied the gNB F-TEID to the UPF in PFCP Session Modification to populate this Outer Header Creation.
Note that DL GTP-U received by the gNB has a PDU Session Container extension header carrying the QFI (TS 38.415 Clause 5.5.2.1, TS 29.281 Clause 5.2.2.7, to be confirmed).
How — The connection between BUFF / NOCP and Paging¶
When the N3 tunnel is released by AN Release (TS 23.502 Clause 4.2.6, to be confirmed) or by deactivation of the UP connection, the UPF has no DL destination (gNB F-TEID). In this case, the SMF can set the DL FAR to BUFF + NOCP (when buffering at the UPF; TS 23.501 Clause 5.8.3, to be confirmed).
sequenceDiagram
participant DN
participant UPF
participant SMF
participant AMF
participant gNB
participant UE
DN->>UPF: DL Packet
Note over UPF: DL PDR match → FAR: BUFF + NOCP
UPF->>SMF: PFCP Session Report Request (Downlink Data Report)
SMF-->>UPF: PFCP Session Report Response
SMF->>AMF: Namf_Communication_N1N2MessageTransfer
AMF->>gNB: NGAP Paging
gNB->>UE: Paging
UE->>AMF: Service Request
Note over AMF,SMF: New gNB F-TEID arrives at SMF in N2 SM information
SMF->>UPF: PFCP Session Modification (FAR: FORW + new Outer Header Creation)
UPF->>gNB: Send buffered DL Packet
Figure: A simplified view extracting the PFCP-related parts of the Network Triggered Service Request (TS 23.502 Clause 4.2.3.3), for buffering at the UPF. The N1N2MessageTransfer response, the AMF's Paging decision, Nsmf_PDUSession_UpdateSMContext between the AMF and SMF during the Service Request, PDU Session Resource Setup with the gNB, and so on are omitted. For buffering at the SMF, the DL FAR destination becomes the CP-function, and the DL Packets themselves are sent to the SMF over GTP-U on N4 (TS 23.501 Clause 5.8.3, to be confirmed).
- There are two buffering approaches: at the UPF and at the SMF. The SMF decides which to use (TS 23.501 Clause 5.8.3, to be confirmed).
- The overall procedure from DL Data arrival to Paging is TS 23.502 Clause 4.2.3.3 (Network Triggered Service Request).
- In a Service Request (reactivation of the UP connection) or Handover, a new DL F-TEID is notified by the gNB (TS 23.502 Clause 4.2.3.2 / Clause 4.9.1, to be confirmed), so the SMF updates the FAR's Outer Header Creation using PFCP Session Modification.
In other words, at the start of Paging there is a DL PDR → FAR (BUFF + NOCP) inside the UPF.
What — QER (QoS Enforcement Rule)¶
A QER applies QoS to matched traffic (QER handling under TS 29.244 Clause 5.2 / Clause 7.5.2.5; sub-clause to be confirmed).
Create QER
├─ QER ID
├─ Gate Status ← OPEN / CLOSED independently for UL / DL
├─ MBR ← Maximum Bit Rate (UL / DL)
├─ GBR (optional) ← Guaranteed Bit Rate
├─ QFI (optional) ← QFI to add to the GTP-U header for DL
└─ RQI (optional) ← Reflective QoS
- One PDR can refer to multiple QERs; for example, QoS Flow-level MBR and PDU Session-level Session-AMBR can be represented by separate QERs (mapping in 5GS: TS 23.501 Clause 5.8.2.11, to be confirmed).
- If Gate Status = CLOSED, the traffic does not pass even if the FAR is FORW (TS 29.244 Clause 8.2.7 Gate Status, to be confirmed). Suspect the QER when "it does not flow despite FORW."
- The specific rate-control method (e.g. Token Bucket) and hardware implementation are vendor-dependent.
For QoS Flow / 5QI / AMBR concepts, see QoS.
What — URR (Usage Reporting Rule)¶
A URR measures usage and reports it to the SMF when conditions are met (TS 29.244 Clause 5.2.2 / Clause 7.5.2.4, to be confirmed).
Create URR
├─ URR ID
├─ Measurement Method ← VOLUM (bytes) / DURAT (time) / EVENT
├─ Reporting Triggers ← threshold reached, quota consumed, periodic, etc.
├─ Volume Threshold / Volume Quota (optional)
└─ Time Threshold / Time Quota (optional)
Usage Reports are returned to the SMF in PFCP Session Report Request (UPF-initiated), Session Modification Response, Session Deletion Response, etc. (TS 29.244 Clause 7.5.8 / Clause 7.5.5 / Clause 7.5.7, to be confirmed).
URR is not Charging itself
A URR is a measurement and reporting rule in the UPF. How the SMF uses the result with Converged Charging (Nchf, CHF) is a separate layer (TS 32.255 Clause 5 / TS 32.290 Clause 5, clauses to be confirmed). For details, see Charging.
How — PFCP Session procedures¶
| Procedure | Direction | Main use | Specification |
|---|---|---|---|
| Session Establishment | SMF → UPF | Create PDR / FAR / QER / URR when starting a PDU Session | TS 29.244 Clause 7.5.2 / Clause 7.5.3 |
| Session Modification | SMF → UPF | Apply gNB F-TEID, Service Request / Handover, QoS change (Create / Update / Remove) | TS 29.244 Clause 7.5.4 / Clause 7.5.5 |
| Session Deletion | SMF → UPF | PDU Session Release. Receive the final Usage Report | TS 29.244 Clause 7.5.6 / Clause 7.5.7 |
| Session Report | UPF → SMF | Downlink Data Report, Usage Report, Error Indication Report, etc. | TS 29.244 Clause 7.5.8 / Clause 7.5.9 |
SMF UPF
│ Session Establishment Request │
│ Create PDR #1 (UL) → FAR #1 │
│ Create PDR #2 (DL) → FAR #2 │
│ Create FAR #1: FORW → Core │
│ Create FAR #2: (no gNB F-TEID) │
│ Create QER / URR │
│─────────────────────────────────►│
│◄─────────────────────────────────│ Response: Created PDR (Local F-TEID)
│ │
│ Session Modification Request │
│ Update FAR #2: FORW + │
│ Outer Header Creation (gNB) │
│─────────────────────────────────►│
Figure: A conceptual view of the typical order in which PFCP is sent during PDU Session Establishment (TS 23.502 Clause 4.3.2.2.1) in the previous chapter. The Local F-TEID appears in the Created PDR of the Response when the UPF allocates the F-TEID (CH flag). ID values and the number of rules are SMF-implementation-dependent.
How the DL FAR's Apply Action is configured at Establishment time (e.g. BUFF / DROP until the gNB F-TEID arrives) is SMF-implementation-dependent.
It is helpful to think of PDU Session establishment as the SMF programming the UPF's Packet Processing Pipeline.
Typical situations that require Session Modification¶
If the gNB-side tunnel changes in the middle of a PDU Session, the UPF's DL FAR must follow.
UE under gNB-A : DL FAR Outer Header Creation = gNB-A IP / TEID=0xAAAA0001
↓ Handover, or CM-IDLE → Service Request via gNB-B
UE under gNB-B : DL FAR Outer Header Creation = gNB-B IP / TEID=0xBBBB0001
↑ The SMF rewrites it with PFCP Session Modification (Update FAR)
| Situation | Main change to the UPF | Specification |
|---|---|---|
| AN Release (to CM-IDLE) | DL FAR to BUFF + NOCP, etc. (or remove N3 tunnel information) | TS 23.502 Clause 4.2.6 (to be confirmed) |
| Service Request (UP reactivation) | DL FAR to FORW + new Outer Header Creation | TS 23.502 Clause 4.2.3.2 / Clause 4.2.3.3 |
| Handover | DL FAR Outer Header Creation to the Target gNB's F-TEID | TS 23.502 Clause 4.9.1 (to be confirmed) |
| PDU Session Modification (adding / changing QoS Flows) | Create / Update / Remove of PDR / QER etc. (and FAR / URR as needed) | TS 23.502 Clause 4.3.3 (to be confirmed) |
TEID and IP values are fictitious examples. For the overall Handover flow, see Handover.
Packet Analysis (Wireshark)¶
Display Filter¶
| Filter | Use |
|---|---|
pfcp |
All N4 traffic |
udp.port == 8805 |
Narrow down by the PFCP UDP port (for checking when the dissector does not recognize PFCP; TS 29.244 Clause 4.2.2, to be confirmed) |
gtp |
N3 GTP-U (Wireshark also displays GTPv1-U as gtp) |
ngap |
For comparison with the gNB F-TEID (PDU Session Resource Setup Response) |
Field names vary by Wireshark version and are not asserted here (to be confirmed).
Decode example (conceptual) — follow PDR → FAR ID → FAR¶
The following is a conceptual representation of the display structure (display labels differ by Wireshark version).
PFCP Session Establishment Request
├─ Create PDR
│ ├─ PDR ID: 2
│ ├─ Precedence: 255
│ ├─ PDI
│ │ ├─ Source Interface: Core
│ │ └─ UE IP Address: 10.45.0.3 (destination)
│ ├─ FAR ID: 2 ─────┐
│ └─ QER ID: 1 │
└─ Create FAR │
├─ FAR ID: 2 ◄─────┘
└─ Apply Action: ...
PFCP Session Establishment Response
├─ Cause: Request accepted
└─ Created PDR
├─ PDR ID: 1
└─ Local F-TEID: TEID 0x00000101, 198.51.100.20 ← value allocated by the UPF for the UL PDR (CH case)
PFCP Session Modification Request
└─ Update FAR
├─ FAR ID: 2
├─ Apply Action: FORW
└─ Update Forwarding Parameters
├─ Destination Interface: Access
└─ Outer Header Creation: GTP-U/UDP/IPv4, TEID 0x12345678, 192.0.2.10
(Values are fictitious examples. not an actual capture)
In Wireshark, the basic approach is to link the FAR ID in the PDR to the FAR ID in the FAR. Always check the Cause in the PFCP Response as well (e.g. Request accepted) (TS 29.244 Clause 8.2.1, to be confirmed).
Order of inspection¶
flowchart LR
A["① PFCP Association
Setup / Heartbeat"] --> B["② Establishment Request
Create PDR / FAR / QER / URR"]
B --> C["③ Establishment Response
Cause / Created PDR"]
C --> D["④ NGAP Setup Response
gNB DL F-TEID"]
D --> E["⑤ Modification Request
Update FAR Outer Header Creation"]
E --> F["⑥ GTP-U
actual TEID / IP"]
Without ①, session procedures cannot succeed. Compare the Local F-TEID in ③ with the TEID in UL GTP-U in ⑥, and the gNB F-TEID in ④ with the TEID in ⑤ and in DL GTP-U in ⑥, and check that each pair matches.
Trouble Shooting — PFCP succeeds, but Ping does not work¶
"Request accepted" for PFCP Session Establishment / Modification alone is not enough. Check the following in order.
① Is there a UL PDR? (Source Interface = Access)
② Does the UL PDR's Local F-TEID match the TEID actually used by the gNB?
③ Is the reference from the UL PDR to the FAR (FAR ID) correct?
④ Is the UL FAR FORW? Destination Interface = Core?
⑤ Does the DL PDR match the UE IP Address? (Does it match the assigned UE IP?)
⑥ Is the DL FAR FORW? Has it been left as BUFF / DROP?
⑦ Is the gNB IP in the DL FAR's Outer Header Creation correct?
⑧ Does the DL FAR's TEID match the value reported by the gNB?
⑨ Is the QER Gate Status CLOSED, or is the MBR extremely low?
⑩ Is IP Routing on N3 / N6 working?
| Symptom | Possible cause | Check point | Log | Packet | Resolution |
|---|---|---|---|---|---|
| Session Establishment fails | PFCP Association not established, missing mandatory IE, the UPF cannot create the rules | Cause in the Response (e.g. Mandatory IE missing / No established PFCP Association / Rule creation/modification Failure; TS 29.244 Clause 8.2.1), Offending IE / Failed Rule ID (clause of each IE to be confirmed) | SMF / UPF PFCP logs (implementation-dependent) | pfcp |
Establish the Association first; check the SMF's IE generation and the UPF's supported features |
| All sessions fail from a certain point | Loss of the PFCP Association due to Heartbeat failure, UPF restart | Heartbeat Request / Response, change in Recovery Time Stamp (TS 29.244 Clause 6.2.2, to be confirmed) | SMF / UPF logs | pfcp / udp.port == 8805 |
Restore the N4 path. The SMF's handling of UPF failure / restart (release or re-establishment of sessions, etc.) is specified in TS 23.527 (clause to be confirmed); the concrete re-establishment method and timing include implementation- and operation-dependent aspects |
| UL only fails | Mismatch between UL PDR F-TEID and the gNB's destination TEID; Outer Header Removal configuration | Created PDR Local F-TEID and the UL NG-U UP TNL Information in the NGAP PDU Session Resource Setup Request Transfer built by the SMF (TS 38.413 Clause 9.3.4.1, to be confirmed) | UPF "no PDR match" logs (implementation-dependent) | pfcp / ngap / gtp |
Make the F-TEID the SMF puts in N2 SM information match the UPF's allocated value |
| DL only fails | DL FAR remains BUFF / DROP; incorrect TEID / IP in Outer Header Creation (TEID mismatch) | Update FAR in the Modification Request and the DL F-TEID in the NGAP Response | SMF logs (whether Modification was sent) | pfcp / ngap / gtp |
Correctly apply the gNB's DL F-TEID to Update FAR |
| Only a specific application fails | PDR match is unintended due to a Precedence design error; Gate CLOSED | PDR Precedence / SDF Filter, QER (details in the next chapter) | UPF rule display (implementation-dependent) | pfcp |
Fix Precedence / SDF Filter / Gate Status |
| No incoming traffic to a CM-IDLE UE | NOCP missing from DL FAR; Session Report not handled by the SMF | FAR Apply Action, Session Report Request / Response | SMF / AMF logs | pfcp / ngap (Paging) |
Set the DL FAR to BUFF + NOCP; check the SMF → AMF notification |
| Charging volume is incorrect | URR Measurement Method / Trigger configuration; missing association between PDR and URR | Create URR and URR ID in PDR, Usage Report values | SMF / CHF logs | pfcp |
Fix the URR configuration and the PDR reference |
Find a TEID mismatch¶
NGAP PDU Session Resource Setup Response → gNB: DL TEID = 0x12345678
PFCP Session Modification (Update FAR) → UPF: DL TEID = 0x87654321
→ mismatch
The most efficient approach is to compare the Tunnel information reported by the gNB in NGAP with the PFCP FAR / Outer Header Creation.
Boundary between 3GPP specifications and vendor implementations¶
| Defined by 3GPP | Decided by vendor / operations |
|---|---|
| PFCP messages and IEs (PDR / FAR / QER / URR / BAR, PDI, Apply Action, Outer Header Creation, etc.) | CLIs such as show upf session / show pdr / show far |
| Packet Forwarding Model (PDR selection and Precedence, references between rules) | Hardware Flow Table, DPDK Worker, offload to SmartNIC / ASIC |
| Usage Reporting measurement methods, triggers, and reporting procedures | Internal Packet Pipeline implementation, rate-control algorithm |
| Buffering method (UPF / SMF) and DL Data notification; buffering hints via the BAR (Suggested Buffering Packets Count, etc.; TS 29.244 Clause 7.5.2.6, to be confirmed) | Actual buffer capacity and discard policy on overflow, PDR and Precedence numbering policy |
For example, 3GPP does not specify whether a FAR is programmed into the Linux kernel, DPDK, SmartNIC, or ASIC.
Comparison with EPC (4G)¶
| Item | 4G EPC (CUPS) | 5GC |
|---|---|---|
| CP / UP separation | SGW-C / PGW-C ⇔ SGW-U / PGW-U (Sxa / Sxb) | SMF ⇔ UPF (N4) |
| Protocol | PFCP (TS 29.244) | PFCP (TS 29.244, same specification) |
| QoS unit | EPS Bearer (TFT) | QoS Flow (QFI) represented by QER / PDR |
| DL GTP-U | Bearer-level TEID | PDU Session-level N3 Tunnel + QFI (PDU Session Container) |
PFCP was introduced with Rel-14 CUPS (TS 23.214 Clause 4 / TS 29.244 Clause 4.1, to be confirmed) and is used as-is on N4 in 5GC.
3GPP Specification¶
| Spec | Clause | Content |
|---|---|---|
| TS 29.244 | Clause 5.2.1 | Packet Forwarding Model / PDR selection (to be confirmed) |
| TS 29.244 | Clause 5.2.2 / under Clause 5.2 | Usage Reporting / QoS Enforcement (sub-clauses to be confirmed) |
| TS 29.244 | Clause 6 / Clause 7 | PFCP procedures / messages (to be confirmed) |
| TS 29.244 | Clause 7.5.2 / Clause 7.5.3 | Session Establishment Request / Response |
| TS 29.244 | Clause 7.5.2.2 / Clause 7.5.2.4 / Clause 7.5.2.5 | Create PDR / Create URR / Create QER (to be confirmed) |
| TS 29.244 | Clause 7.5.4 / Clause 7.5.5 | Session Modification Request / Response |
| TS 29.244 | Clause 7.5.6 / Clause 7.5.7 | Session Deletion Request / Response |
| TS 29.244 | Clause 7.5.8 / Clause 7.5.9 | Session Report Request / Response |
| TS 29.244 | Clause 8.2.1 / Clause 8.2.11 / Clause 8.2.26 / Clause 8.2.56 | Cause / Precedence / Apply Action / Outer Header Creation (to be confirmed) |
| TS 23.501 | Clause 5.8.2.11 | N4 Session parameters (PDR / FAR / QER / URR, etc.; sub-clause to be confirmed) |
| TS 23.501 | Clause 5.8.3 | Buffering (UPF / SMF, to be confirmed) |
| TS 23.502 | Clause 4.2.3.3 | Network Triggered Service Request |
| TS 23.527 | Clause 4 (to be confirmed) | Restoration Procedures (handling of UPF failure / restart) |
| TS 29.281 | Clause 4.4.2 / Clause 5 / Clause 5.2.2.7 | GTP-U (UDP port / header / PDU Session Container extension header, to be confirmed) |
| TS 38.415 | Clause 5.5.2.1 | PDU Session Container (QFI, to be confirmed) |
| TS 32.255 / TS 32.290 | Clause 5 | 5G Data Connectivity Charging / Converged Charging (clauses to be confirmed) |
| TS 23.214 | Clause 4 | EPC CUPS (introduction of PFCP, to be confirmed) |
| TS 23.502 | Clause 4.2.3.2 / Clause 4.9.1 | UE Triggered Service Request / Handover (to be confirmed) |
| TS 29.244 | Clause 4.1 / Clause 5.1 / Clause 5.3 | PFCP overview / User Plane forwarding over N4 (to be confirmed) |
| TS 38.413 | Clause 8.2.1 / Clause 9.3.4.1 / Clause 9.3.4.2 | PDU Session Resource Setup / Request Transfer (UL NG-U UP TNL Information) / Response Transfer (DL QoS Flow per TNL Information) (to be confirmed) |
| TS 29.244 | Clause 4.2.2 | PFCP UDP port (8805, to be confirmed) |
| TS 29.244 | Clause 6.2.2 / Clause 6.2.6 | Heartbeat / PFCP Association Setup (to be confirmed) |
| TS 29.244 | Clause 7.5.2.3 | Create FAR (including Duplicating Parameters, to be confirmed) |
| TS 29.244 | Clause 8.2.3 / Clause 8.2.25 | F-TEID (CH / CHID flags) / UP Function Features (to be confirmed) |
| TS 23.501 | Clause 5.8.2.3 | CN Tunnel Info allocation (SMF / UPF, to be confirmed) |
| TS 23.502 | Clause 4.2.6 / Clause 4.3.2.2.1 / Clause 4.3.3 | AN Release / PDU Session Establishment / PDU Session Modification (partly to be confirmed) |
| TS 24.501 | Clause 6.4.1 | UE-requested PDU Session Establishment (N1 SM, to be confirmed) |
Summary¶
- PFCP is the Control Protocol used by the SMF to configure Packet processing rules on the UPF over N4. User Packets flow over N3 using GTP-U
- PDR = which Packet; FAR = what to do / where to send it; QER = QoS; URR = usage measurement. The PDR references FAR / QER / URR by ID
- UL PDRs primarily match on Local F-TEID, and DL PDRs primarily on UE IP Address. If multiple rules match, the one with the smallest Precedence wins
- Outer Header Creation in the FAR specifies the DL destination (gNB IP / TEID). That is why the SMF applies the gNB F-TEID to the UPF using PFCP Modification
- For a CM-IDLE UE, the DL FAR can be set to BUFF + NOCP, leading to Session Report → Paging
- Even if PFCP returns Request accepted, the User Plane may not work. Compare the NGAP F-TEID with the PFCP value
- N2 SM information (for the gNB) and PFCP (for the UPF) are different things. F-TEIDs travel between them to complete the UL / DL tunnels
- Apply Action is a combination of flags (BUFF + NOCP, FORW + DUPL, etc.). To let the UPF allocate the F-TEID, use the CH flag; the result is returned in Created PDR
How this connects to the surrounding chapters¶
CM-IDLE / Paging DL Packet arrives → DL FAR (BUFF + NOCP) → Session Report → Paging
Service Request New gNB F-TEID → PFCP Modification sets DL FAR to FORW
PDU Session setup PFCP Establishment creates PDR / FAR / QER / URR
This chapter The UPF processes Packets according to PDR → FAR / QER / URR
Next chapter What a PDR "looks at" to match (PDI / F-TEID / SDF Filter / Precedence)
Comprehension check¶
Q1. The UPF receives an Uplink GTP-U Packet from N3. After it matches an appropriate PDR, that PDR references FAR ID = 20. What is the FAR's main role? A. Detect which PDU Session / Traffic the Packet belongs to / B. Measure Packet usage and generate a Usage Report / C. Decide how to handle the matched Packet, such as Forward, Drop, or Buffer / D. Select the NAS Integrity Algorithm between the UE and AMF
Answer: C. Apply Action (FORW / DROP / BUFF / NOCP, etc.) and Forwarding Parameters in the FAR determine "what to do and where" (TS 29.244 Clause 5.2.1 / Clause 8.2.26, to be confirmed). A is the role of a PDR; B is the role of a URR. D concerns NAS Security and is unrelated to PFCP.
Q2. A DL Packet has no GTP-U TEID. What does the UPF inspect to match it to a DL PDR?
Primarily the PDI's UE IP Address (destination IP) and Source Interface = Core, and, as needed, the SDF Filter. Matching on Local F-TEID as for UL applies to Packets arriving over N3 using GTP-U.
Q3. Both PDR #2 (Precedence 255) and PDR #3 (Precedence 100) match the same DL Packet. Which one is applied?
PDR #3. A smaller Precedence value means higher priority, and the UPF applies the highest-priority matching PDR (TS 29.244 Clause 5.2.1 / Clause 8.2.11, to be confirmed).
Q4. A DL Packet for a CM-IDLE UE reaches the UPF, but Paging does not start. What do you check in PFCP?
Check whether the DL FAR Apply Action has BUFF and NOCP configured (when buffering at the UPF), whether the UPF sends a PFCP Session Report Request (Downlink Data Report) to the SMF, whether the SMF returns a Response, and whether it then sends Namf_Communication_N1N2MessageTransfer. For SMF buffering, check whether the DL FAR destination is CP-function (TS 23.501 Clause 5.8.3, to be confirmed).
Q5. PFCP Session Establishment / Modification both returned Request accepted, but DL does not arrive. What is the most efficient check?
Compare the DL IP / TEID reported by the gNB in the NGAP PDU Session Resource Setup Response with the IP / TEID in Outer Header Creation of the PFCP Update FAR. Also check that the DL FAR Apply Action is FORW and that the QER Gate Status is not CLOSED.
Q6. Which best describes the role of N2 SM Information? A. The SMF configures PDRs / FARs on the UPF / B. Information the SMF passes to the gNB via the AMF, needed to establish PDU Session Resources and the N3 tunnel / C. The UPF returns a Usage Report to the SMF / D. The gNB carries User Packets to the UPF
Answer: B. N2 SM information is created by the SMF and reaches the gNB via the AMF (Namf_Communication_N1N2MessageTransfer) and NGAP (TS 23.502 Clause 4.3.2.2.1). It contains the UPF-side N3 F-TEID (UL NG-U UP TNL Information) and QoS Flow information (TS 38.413 Clause 9.3.4.1, to be confirmed). A is N4 (PFCP), C is a PFCP Usage Report, and D is N3 (GTP-U).
Q7. The PFCP Session Establishment Response contained a Created PDR (with a Local F-TEID). What does this mean, and how does the SMF use the value?
It means the SMF set the CHOOSE (CH) flag in the F-TEID of Create PDR and left F-TEID allocation to the UPF (TS 29.244 Clause 8.2.3 / Clause 7.5.3.2, to be confirmed). The SMF puts this UPF-side N3 F-TEID into N2 SM information (UL NG-U UP TNL Information) and passes it to the gNB, which then sends UL GTP-U to that TEID. If this goes wrong, the result is "UL only fails."
Next Step¶
- Next chapter: What a PDR looks at to match (details of PDI / F-TEID / SDF Filter / Precedence) → PDR / PDI / F-TEID / SDF Filter / Precedence
- When PFCP is sent → PDU Session Establishment Deep Dive
- Paging / Service Request triggered by DL Data → CM-IDLE / CM-CONNECTED and Service Request / Paging / Service Request
- QER QFI and QoS Flows → QoS Flow / QFI / 5QI / QoS
- The big picture of the UPF / SMF → UPF / SMF
- Where usage data goes → Charging
- Messages and IEs → PFCP Dictionary / N4