NF Set / Binding Indication / SCP Routing — Preserving Policy Continuity When a PCF Fails¶
Learning objectives¶
After reading this chapter, you will be able to:
- Explain the differences between NF Instance / NF Set / NF Service Instance / NF Service Set (TS 23.501 §5.21.3)
- Explain that the Binding Level expresses "to which scope subsequent requests are bound, and within which scope reselection is allowed on failure"
- Explain the difference between the PCF Binding in the BSF (Nbsf_Management) and the SBI Binding Indication (
3gpp-Sbi-Binding/3gpp-Sbi-Routing-Binding) - Isolate PCF failover in three stages: ① discovery and routing, ② context continuity, ③ binding consistency
- Read the binding-related headers,
Locationand3gpp-Sbi-Target-apiRootin Wireshark and trace "where a request went and who processed it"
Prerequisites¶
- BSF / PCF Binding — how the BSF manages "the PCF in charge of this PDU Session"
- SCP — Direct / Indirect Communication and Models A–D
- NRF — NF Profile registration and Discovery
- Supplementary: PCF / BSF / UDSF (one possible store for shared context) / GUAMI / AMF Region / Set / Pointer (contrast with the AMF Set) / Policy
The focus of this chapter (Level ∞ Deep Dive)
The BSF chapter covered "how to find the PCF in charge." This chapter goes one step further and covers what happens when the PCF in charge goes down. It is not as simple as "forward to another instance in the same PCF Set and it is fixed"; we confirm, at the header and trace level, that continuity is achieved only when routing switchover, policy context continuity and binding consistency all hold.
Why — why "just send it to another PCF" is not enough¶
Consider the following PDU Session.
UE ── AMF ── SMF ── N7 ── PCF-A
│ │
│ └─ Context of the SM Policy Association
└─ UPF
AF ── NEF ── BSF ──────────> PCF-A (binding target)
After PCF-A fails, even if PCF-B of the same type is running, PCF-B cannot necessarily handle the context of that session. Only when PCF-A and PCF-B belong to the same NF Set and share context can PCF-B continue processing the existing SM Policy Association or AF session.
There are three broad conditions:
- Discovery and routing — an alternative PCF can be found and the request can be resent within the scope the specification allows
- Context continuity — the alternative PCF can use the context of the existing Policy Association, etc.
- Binding consistency — the binding in the BSF, the SBI Binding Indication and the PCF instance that actually processed the request do not contradict one another
Analogy: A PCF Set is "a team of counters sharing the same customer ledger." Even if the counter in charge (PCF-A) suddenly closes, another counter on the same team (PCF-B) can look at the shared ledger (context) and continue. But if you are sent to a counter at a different branch (a different set, or a PCF that does not share the ledger), you will be told "I know nothing about that case." And if the ticket (binding) says "counter A only," the usher (SCP) must not send you to another counter at will.
What — the building blocks of NF Set and binding¶
NF Instance / NF Set / NF Service Instance / NF Service Set¶
TS 23.501 §5.21.3 handles NF reliability in units of NF Set and NF Service Set (the NF Set concept was generalized in the Rel-16 SBA enhancements, to be confirmed; the AMF Set has existed since Rel-15). The definitions of each term are in TS 23.501 §3.1 (Definitions) (to be confirmed); §5.21.3 is the functional description.
| Term | Meaning | Example | Reference |
|---|---|---|---|
| NF Instance | An individual NF entity identified by an NF Instance ID (UUID) | PCF-A | TS 23.501 §3.1, §5.21.3 |
| NF Set | A group of interchangeable NF instances of the same NF type, supporting the same services and the same Network Slice(s), and able to access the same context data. They may be geographically distributed | PCF Set X = | TS 23.501 §3.1, §5.21.3 (sub-clause to be confirmed) |
| NF Service Instance | An individual service entity inside an NF instance | Npcf_PolicyAuthorization on PCF-A | TS 23.501 §3.1, §5.21.3 |
| NF Service Set | A group of interchangeable NF service instances of the same service type within one NF instance, able to access the same context data | Npcf_SMPolicyControl × 2 inside PCF-A | TS 23.501 §3.1, §5.21.3 (sub-clause to be confirmed) |
PCF Set X (NF Set)
┌────────────────────────────────────────────────┐
│ PCF-A (NF Instance) PCF-B (NF Instance) │
│ ├─ NF Service Set S1 ├─ NF Service Set S1'│
│ │ ├─ SMPolicyControl #1 │ └─ ... │
│ │ └─ SMPolicyControl #2 │ │
│ └─ PolicyAuthorization #1 └─ ... │
└────────────────────────────────────────────────┘
│
Shared context (UDSF or an implementation-specific DB)
Same NF type ≠ same NF Set
No matter how many PCFs are lined up, they are not interchangeable unless they are configured with the same NF Set ID and can access the same context. Conversely, an NF Set is not synonymous with a Kubernetes cluster or an LB VIP. Which pods / VMs go into the same set and how the context is shared is vendor / operator design (implementation-dependent).
NF Set ID notation¶
TS 23.003 §28.12 defines the NF Set ID as a globally unique string of the following form (NF Service Set ID in §28.13, to be confirmed).
set<Set ID>.<nftype>set.5gc.mnc<MNC>.mcc<MCC>
Example (test PLMN 001-01, PCF): set1.pcfset.5gc.mnc001.mcc001
Only the AMF Set uses a special form, set<AMF Set ID>.region<AMF Region ID>.amfset.5gc.mnc<MNC>.mcc<MCC>, which corresponds to the AMF Region / AMF Set of the GUAMI (see GUAMI). The AMF Set is a kind of NF Set, and the basic ideas in this chapter apply to the AMF as well. However, the AMF has its own specific handling such as the GUAMI, the Backup AMF (backupamfinst) and the planned removal procedure (TS 23.501 §5.21.2 / GUAMI).
How it looks in the NRF¶
Each NF instance publishes the NF Set(s) it belongs to (nfSetIdList) and, per NF service, the NF Service Set(s) (nfServiceSetIdList) in the NF Profile it registers with the NRF (NFProfile / NFService types of TS 29.510; attribute names and clause numbers to be confirmed). Consumers and the SCP search the NRF for "PCFs belonging to this NF Set" to obtain alternative candidates (query parameter target-nf-set-id, to be confirmed).
Binding Level — to "which scope" subsequent requests are bound¶
TS 23.501 §6.3.1.0 (Principles for Binding, Selection and Reselection) describes binding as a mechanism that indicates "to which NF producer instance(s) subsequent requests concerning a specific NF producer resource (context) should be sent," and defines the following four Binding Levels.
| Binding Level | Scope bound to | Normal selection | Reselection when unavailable (conceptual) |
|---|---|---|---|
| NF Service Instance | A specific service instance | The indicated service instance | Within the same NF Service Set, and further within the NF Instance / NF Set if indicated |
| NF Service Set | Group of equivalent service instances | Any within the set | The indicated higher scope (NF Instance / NF Set) |
| NF Instance | A specific NF instance | The indicated NF instance (a service instance within it) | If an NF Set is indicated, another instance within the same NF Set |
| NF Set | Group of equivalent NF instances | Any within the set | Another instance within the same NF Set |
The table is a conceptual summary of the table in TS 23.501 §6.3.1.0 (Binding, selection and reselection). The exact conditions in each cell are to be confirmed against the original text.
NF Instance Level + NF Set indicated is not NF Set Level
At NF Instance Level with an NF Set also indicated, requests are normally sent to the indicated NF instance. Switching to another instance within the same NF Set is limited to reselection when the indicated instance is unavailable. Conversely, at NF Instance Level where the Binding Indication contains no NF Set, the Binding Indication alone does not indicate a scope for reselection. Whether reselection based on the NF Profile in the NRF (nfSetIdList) is allowed is to be confirmed in TS 23.501 §6.3.1.0. "What the Binding Level is and which scopes are indicated alongside it" is the starting point for judging the permissible scope of reselection.
The BSF's PCF Binding and the SBI Binding Indication are different things¶
The names are similar, but the owner, format and users are completely different.
| Item | PCF Binding registered in the BSF | SBI Binding Indication |
|---|---|---|
| Where is it? | Binding resource held by the BSF | HTTP/2 header (3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding) |
| What does it represent? | UE / PDU Session (UE IP, DNN, S-NSSAI, etc.) ↔ PCF in charge (PCF Instance ID, PCF Set ID, Binding Level, etc.) | The scope of producers to which subsequent requests concerning a specific resource (context) should be sent |
| Created by | PCF (Nbsf_Management_Register / Update) | Producer (e.g., in the response to resource creation), or consumer (as the target of notifications / callbacks) |
| Used by | BSF consumers (NEF / AF, PCF for the UE, etc.) | NF consumers, SCP |
| Main specs | TS 23.503 §6.1.1.2.2 (sub-clause to be confirmed), TS 23.501 §6.3.7.1 (to be confirmed), TS 29.521 | TS 23.501 §6.3.1.0, TS 29.500 §5.2.3.2.5 / §5.2.3.2.6 / §6.12 |
| When is it used? | When first finding the PCF in charge | For subsequent requests to the resource after it has been found, and for reselection on failure |
Exceptions to the rule: BSF first, Binding Indication afterwards
The dichotomy above is a rule of thumb. The NEF / AF may build a 3gpp-Sbi-Routing-Binding from the PCF Set ID and Binding Level obtained by BSF Discovery and attach it to the first Npcf_PolicyAuthorization_Create (see the Call Flow below; TS 29.514 / TS 29.521, to be confirmed). There are also configurations in which the SCP performs the BSF Discovery on the consumer's behalf (Delegated Discovery) (see BSF / PCF Binding).
The BSF's PCF Binding can also contain the PCF Set ID and the Binding Level (NF Instance / NF Set) (PcfBinding type of TS 29.521, pcfId / pcfSetId / bindLevel; attribute names to be confirmed). Note that the Binding Levels handled in the BSF's PCF Binding are NF Instance and NF Set, a different scope from the NF Service Instance / NF Service Set levels defined for the SBI in general (TS 23.503 §6.1.1.2.2, to be confirmed).
Two headers — 3gpp-Sbi-Binding and 3gpp-Sbi-Routing-Binding¶
| Header | Who adds it | Purpose | Reference |
|---|---|---|---|
3gpp-Sbi-Binding |
Producer (e.g., response to resource creation) / consumer (e.g., request indicating the target of notifications / callbacks). Inclusion is optional (may) | Conveys binding information to the peer ("from now on, please send requests for this resource to this scope") | TS 29.500 §5.2.3.2.6 |
3gpp-Sbi-Routing-Binding |
Consumer (mainly subsequent requests via the SCP) | Tells the SCP where to carry this request (used for SCP routing and reselection) | TS 29.500 §5.2.3.2.5 |
3gpp-Sbi-Target-apiRoot |
Consumer (Indirect Communication) | When going via the SCP, indicates the apiRoot of the target producer chosen by the consumer (may also be used on SCP-to-SCP hops) | TS 29.500 §5.2.3.2.4 (to be confirmed) |
3gpp-Sbi-Producer-Id |
Carried in the response (whether the SCP or the producer itself adds it, and when, is to be confirmed) | Indicates the NF Instance ID etc. of the producer that actually processed the request (important on reselection) | TS 29.500 §5.2.3.2.8 (sub-clause, who adds it, and inclusion conditions to be confirmed) |
PCF ── 201 Created + 3gpp-Sbi-Binding (optional) ──> Consumer (NEF / SMF)
│ stores the binding
▼ subsequent request
Consumer ── 3gpp-Sbi-Routing-Binding ──> SCP ──> PCF (an instance within the binding scope)
Main parameters (ABNF in TS 29.500 §5.2.3.2.6)¶
| Parameter | Meaning |
|---|---|
bl |
Binding Level (NF Instance / NF Set / NF Service Instance / NF Service Set). The exact spelling of the values (e.g., nfinstance / nfset / nfserviceinstance / nfserviceset) is to be confirmed in the ABNF |
nfinst |
NF Instance ID |
nfset |
NF Set ID |
nfservinst |
NF Service Instance ID (to be confirmed) |
nfserviceset |
NF Service Set ID (spelling may be nfservset; to be confirmed) |
servname |
Service name (e.g., when indicating the target of notifications / callbacks; to be confirmed) |
scope |
Scope to which the Binding Indication applies (e.g., applicability to other services, for callbacks; values to be confirmed) |
backupamfinst |
Backup AMF instance when the AMF is the receiver (to be confirmed) |
The above is an excerpt of the main parameters; parameters have been added across Releases (not exhaustive).
Reading the header (schematic examples)¶
The following are schematic examples showing how to read the header; the IDs are illustrative. They do not mean that this header is mandatory in every request.
:method: POST
:path: /npcf-policyauthorization/v1/app-sessions
3gpp-Sbi-Routing-Binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001
bl=nfset: the Binding Level is NF Set (spelling to be confirmed)nfset=...: the target NF Set ID:path: the API resource being invoked
A schematic example at NF Instance Level:
3gpp-Sbi-Routing-Binding: bl=nfinstance; nfinst=54804518-4191-46b3-955c-ac631f953ed8; nfset=set1.pcfset.5gc.mnc001.mcc001
nfinst identifies a specific NF instance. Even if nfset is also present, bl=nfinstance is not treated as bl=nfset (see the warning above).
How — behavior on PCF failure¶
Call Flow (via the SCP, conceptual)¶
sequenceDiagram
participant SMF
participant NEF
participant BSF
participant SCP
participant PCFA as PCF-A
participant PCFB as PCF-B
SMF->>SCP: Npcf_SMPolicyControl_Create
SCP->>PCFA: Forward (selects an instance in the PCF Set)
PCFA-->>SMF: 201 Created + Location + 3gpp-Sbi-Binding (optional, via SCP)
PCFA->>BSF: Nbsf_Management_Register (pcfId, pcfSetId, bindLevel)
NEF->>BSF: Nbsf_Management_Discovery (UE IP, DNN, S-NSSAI)
BSF-->>NEF: 200 OK (PCF Binding)
NEF->>SCP: Npcf_PolicyAuthorization_Create + 3gpp-Sbi-Routing-Binding
SCP-xPCFA: Forwarding fails (PCF-A failure)
Note over SCP: Reselects an alternative in the same PCF Set
within the scope the Binding Level allows
SCP->>PCFB: Forward
Note over PCFB: Looks up the SM Policy Association
from the shared context
PCFB-->>NEF: 201 Created + Location + 3gpp-Sbi-Binding (optional, via SCP)
PCFB->>SMF: Npcf_SMPolicyControl_UpdateNotify (PCC Rule update)
opt When required
PCFB->>BSF: Nbsf_Management_Update (reflect the new instance)
end
This is a conceptual diagram for understanding. The actual reselection conditions, error responses, retry counts and how context is taken over depend on the procedures in the specifications and on the implementation and configuration. Going through the SCP does not automatically recover from every failure.
Signal Flow¶
| # | Direction | Message (HTTP) | Binding-related points | Reference |
|---|---|---|---|---|
| 1 | SMF → PCF | Npcf_SMPolicyControl_Create (POST /npcf-smpolicycontrol/v1/sm-policies) |
The SMF may indicate the binding for its own notification target with 3gpp-Sbi-Binding |
TS 29.512, TS 29.500 §5.2.3.2.6 |
| 2 | PCF → SMF | 201 Created (Location, 3gpp-Sbi-Binding) |
The PCF may return the binding of the SM Policy resource it created (optional) | TS 29.500 §6.12 (sub-clause to be confirmed) |
| 3 | PCF → BSF | Nbsf_Management_Register (POST /nbsf-management/v1/pcfBindings) |
Registers PCF Instance ID / PCF Set ID / Binding Level | TS 29.521 §4.2.2 (to be confirmed) |
| 4 | NEF → BSF | Nbsf_Management_Discovery (GET /nbsf-management/v1/pcfBindings?...) |
Obtains the PCF in charge, PCF Set and Binding Level | TS 29.521 §4.2.4 (sub-clause to be confirmed) |
| 5 | NEF → SCP → PCF | Npcf_PolicyAuthorization_Create (POST /npcf-policyauthorization/v1/app-sessions) |
Indicates the target scope to the SCP with 3gpp-Sbi-Routing-Binding / 3gpp-Sbi-Target-apiRoot |
TS 29.514, TS 29.500 §5.2.3.2.5 |
| 6 | SCP → PCF-B | (forwarded after reselection) | Reselection within the scope allowed by the Binding Level. The response may reveal which producer processed it (Producer-Id / Location; inclusion conditions to be confirmed) | TS 23.501 §6.3.1.0, TS 29.500 §6.10 (to be confirmed) |
| 7 | PCF → SMF | Npcf_SMPolicyControl_UpdateNotify (POST {notificationUri}/update) |
The notification is delivered based on the SMF's binding (step 1) | TS 29.512 |
| 8 | PCF → BSF | Nbsf_Management_Update (PATCH) | Updates the binding, e.g., when a new PCF instance has been selected | TS 23.503 §6.1.1.2.2 / TS 29.521 §4.2.5 (to be confirmed) |
What happens to the resource URI after reselection¶
A producer's resource URI has the form {apiRoot}/{apiName}/{apiVersion}/{resource} (TS 29.501 §4.4.1, to be confirmed). For reselection within an NF Set, the approach is to replace the apiRoot part with that of the alternative instance and keep the rest of the path when sending subsequent requests (TS 29.500 §6.12; sub-clause and conditions to be confirmed). If the alternative instance has taken over the resource, the updated target may be returned in the response's Location or in a new 3gpp-Sbi-Binding, and the consumer is expected to use that value from then on (consumer-side rules to be confirmed in TS 29.500 §6.12).
Old: https://pcf-a.example/npcf-policyauthorization/v1/app-sessions/as-123
New: https://pcf-b.example/npcf-policyauthorization/v1/app-sessions/as-123
└ only the apiRoot changes ┘└─────────── same path ──────────────┘
At this point, even with the same path, processing fails if PCF-B cannot retrieve the context (as-123). This is why "switching routing" and "continuing the context" are separate problems.
Thinking about PCF failover in three stages¶
flowchart TD
F["PCF-A failure"] --> A1
subgraph SA["Stage A: discovery and routing (specified by 3GPP)"]
A1["Check Binding Level and indicated scopes"] --> A2["Check instances of the same PCF Set in the NRF
NF Status / Service / Endpoint"]
A2 --> A3["Consumer or SCP reselects
within the permitted scope"]
end
A3 --> B1
subgraph SB["Stage B: context continuity (mainly implementation-dependent)"]
B1["Can the alternative PCF access the SM Policy Association
AF session / PCC Rules"]
end
B1 --> C1
subgraph SC["Stage C: binding consistency"]
C1["PCF Binding in the BSF"] --- C2["SBI Binding Indication"]
C2 --- C3["PCF instance that actually processed it"]
end
Stage A: can the route be switched?
PCF-A failure
↓
Check the Binding Level (NF Set Level, or NF Instance Level + NF Set indicated)
↓
Check the NF Profile in the NRF (nfSetIdList / Status / Service / Endpoint)
↓
Consumer (Direct) or SCP (Indirect) reselects within the permitted scope
Stage B: can the alternative PCF handle the context?
PCF-B
├─ Can it access the context of the SM Policy Association?
├─ Can it keep the association between the AF session and the PCC Rules?
└─ Is context sharing (UDSF / implementation-specific DB) or synchronization complete?
The very definition of an NF Set presupposes that its members "can access the same context data" (TS 23.501 §5.21.3). Some configurations use UDSF (storage of unstructured data) as the place to keep the context, but the concrete sharing, replication and recovery methods are vendor implementation-dependent.
Stage C: is the binding consistent?
PCF Binding in the BSF
↕
SBI Binding Indication (value stored by the consumer / Routing-Binding)
↕
PCF instance that actually processed the request (3gpp-Sbi-Producer-Id / Location)
There are scenarios in which the BSF binding must be updated with Nbsf_Management_Update when a new PCF instance is selected (TS 23.503 §6.1.1.2.2; applicability conditions to be confirmed). If the binding is registered in the BSF at NF Set level, a change of instance within the set is less likely to contradict the BSF entry; if it is registered at NF Instance level, the entry may keep pointing to the old instance.
The Direct Communication case¶
In Direct Communication without the SCP (Models A / B), the consumer itself may reselect using the Binding Indication and the NF Set information obtained from the NRF. In Indirect Communication (Models C / D), the SCP can reselect based on the 3gpp-Sbi-Routing-Binding etc. added by the consumer. In either case, the Binding Level (and the scopes indicated with it) is the basis for the judgment (TS 23.501 §6.3.1.0). The overall communication models are covered in SBI Communication Model A–D.
Packet Analysis (Wireshark)¶
Display Filter¶
| Filter | Purpose |
|---|---|
http2 |
All SBI traffic (decryption needed if TLS is used) |
http2.header.name contains "3gpp-sbi" |
Frames containing 3GPP custom headers (Binding / Routing-Binding / Target-apiRoot / Producer-Id, etc.) |
http2.header.value contains "pcfset" |
Headers containing a PCF Set ID |
http2.header.name == "location" |
Location in resource-creation responses (which instance created the resource) |
http2.headers.path contains "npcf-policyauthorization" |
Npcf_PolicyAuthorization |
http2.headers.path contains "nbsf-management" |
Nbsf_Management (Register / Discovery / Update) |
http2.headers.path contains "nnrf-disc" |
NRF Discovery (search for alternative candidates) |
Field names (http2.header.name / http2.headers.path, etc.) may differ between Wireshark versions (to be confirmed). In HTTP/2, header names are carried in lowercase (RFC 9113 §8.2.1).
Decode example (conceptual)¶
The following is a conceptual representation of the display structure; the values are fictitious (capture required).
HyperText Transfer Protocol 2
└─ Stream: HEADERS, Stream ID: 7
├─ :method: POST
├─ :scheme: https
├─ :authority: scp.example:443
├─ :path: /npcf-policyauthorization/v1/app-sessions
├─ 3gpp-sbi-target-apiroot: https://pcf-a.example:443
└─ 3gpp-sbi-routing-binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001
HyperText Transfer Protocol 2
└─ Stream: HEADERS, Stream ID: 7
├─ :status: 201
├─ location: https://pcf-b.example:443/npcf-policyauthorization/v1/app-sessions/as-123
├─ 3gpp-sbi-binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001
└─ 3gpp-sbi-producer-id: <NF Instance ID of PCF-B>
In this example, the consumer sent the request toward PCF-A (Target-apiRoot), but the response's Location and Producer-Id point to PCF-B. This is the typical reading that indicates the SCP reselected within the NF Set (whether the SCP or the producer adds Producer-Id, and its inclusion conditions, are to be confirmed).
Order of inspection¶
flowchart LR
A["① BSF Discovery response
pcfId / pcfSetId / bindLevel"] --> B["② Subsequent request headers
Routing-Binding / Target-apiRoot"]
B --> C["③ Where the SCP forwarded
capture of the SCP⇔PCF leg"]
C --> D["④ Response
status / Location / Binding / Producer-Id"]
D --> E["⑤ Downstream processing
UpdateNotify / PFCP"]
- Match requests and responses by Stream ID (Stream IDs are per HTTP/2 connection, so the consumer⇔SCP leg and the SCP⇔PCF leg have different IDs).
- If TLS is used, rely on decryptable traces (key logs, etc.) or each NF's SBI logs. Do not conclude that a header was not sent just because it is not visible in the capture.
- For reading HTTP/2 / ProblemDetails, see N7 SBI Analysis; for general tips, see Packet Analysis Tips.
Trouble Shooting¶
Case 1: PCF-A is down and PCF-B is healthy, yet requests fail¶
Order of investigation:
- Check the PCF Instance ID / PCF Set ID / Binding Level in the BSF Discovery response
- Check
3gpp-Sbi-Routing-Bindingin subsequent requests (bland the indicated scopes) - Check that PCF-B is registered in the NRF with the same NF Set ID and offers the required NF services
- Check whether the SCP (or the consumer, in Direct mode) reselected PCF-B within the scope the specification permits
- Check whether PCF-B has, or can access, the relevant context
Case 2: the BSF returns PCF-B, but requests go to PCF-A¶
Compare three things: the BSF response, the subsequent request headers and the SCP's actual forwarding destination. After PolicyAuthorization Create, the NEF/AF sends subsequent requests using the resource URI and Binding Indication it stored at creation, so it does not necessarily consult the latest BSF value every time. In an ongoing service session, the Binding Indication received from the producer may take precedence (TS 23.501 §6.3.1.0; applicability conditions to be confirmed). It is important not to conclude misrouting by looking only at the BSF value.
Case 3: HTTP/2 succeeded, but the policy is not applied¶
NEF → SCP → PCF-B HTTP 201/204 success
│
├─ Did PCF-B associate it with the correct Policy Association context?
├─ Was UpdateNotify from PCF-B to the SMF sent? Is the target SMF correct?
└─ Did the PFCP Session Modification from SMF to UPF succeed?
HTTP success and end-to-end policy success are different things. If the SMF is also made redundant with an NF Set, notifications from the PCF are delivered according to the binding indicated by the SMF (step 1). For the PFCP side, see PFCP Rules.
By symptom¶
| Symptom | Likely cause | What to check | Logs | Packet | Resolution |
|---|---|---|---|---|---|
| Requests keep failing after PCF-A failure (5xx from the SCP) | Binding Level is NF Instance with no NF Set indicated / the SCP did not receive Routing-Binding | bl and presence of nfset in 3gpp-Sbi-Routing-Binding |
SCP routing / reselection logs | http2.header.name contains "3gpp-sbi" |
Check the PCF setting that returns an NF Set Level binding (or one with NF Set indicated) (implementation-dependent) |
| The SCP cannot find an alternative candidate | PCF-B registered in the NRF with a different NF Set ID / required service not registered | NF Profile in the NRF (nfSetIdList, NFService) |
NRF and PCF-B registration logs | http2.headers.path contains "nnrf" |
Align NF Set ID and service registration |
| Forwarded to PCF-B but fails with 404 etc. | PCF-B cannot access the context (sharing / replication delay or not configured) | PCF-B's context lookup result, state of the shared DB / UDSF | PCF-B application logs | http2 (:status, ProblemDetails) |
Check the context sharing method (implementation-dependent, needs verification) |
| The SCP returns 504 | Target producer unreachable / timeout while waiting for failure detection / retries before reselection | SCP response (e.g., 504 + cause TARGET_NF_NOT_REACHABLE; to be confirmed in TS 29.500 §5.2.7.2, including how it differs from TIMED_OUT_REQUEST, which indicates a response timeout) |
SCP logs | http2.headers.status == "504" (field name to be confirmed) |
Review failure detection time and retry settings (implementation-dependent) |
| The BSF says PCF-B, but subsequent requests go to PCF-A | The consumer uses an old stored resource URI / binding | :authority / 3gpp-Sbi-Target-apiRoot of subsequent requests |
NEF/AF logs | http2 |
Check whether the consumer reflects updates via the response's Location / 3gpp-Sbi-Binding |
| Another AF request goes to the old PCF via the BSF | The BSF binding was not updated (registered at NF Instance Level) | pcfId / bindLevel in the BSF |
BSF and PCF logs | http2.headers.path contains "nbsf-management" |
Check the conditions for issuing Nbsf_Management_Update |
| HTTP succeeded but QoS does not change | UpdateNotify not sent or sent to the wrong target / PFCP failure | PCF→SMF notification, SMF→UPF PFCP | PCF, SMF and UPF logs | http2 / pfcp |
Check the downstream procedures in order |
Boundary between 3GPP specifications and vendor implementations¶
| Defined by 3GPP | To be checked in vendor / operational design |
|---|---|
| Definitions of NF Set / NF Service Set and the idea of interchangeability within a set | Pod / VM placement, inter-site redundancy, which instances go into the same set |
| Principles of Binding Level and selection / reselection (TS 23.501 §6.3.1.0) | The SCP's actual routing policy, retry count, failure detection time |
Headers such as 3gpp-Sbi-Binding / 3gpp-Sbi-Routing-Binding / 3gpp-Sbi-Target-apiRoot |
Pass-through or rewriting of headers by proxies / service meshes / LBs |
| BSF Register / Discovery / Update and the content of PcfBinding | Replication of the binding DB, cache retention time |
| The premise that instances in an NF Set can access the same context | Concrete sharing, synchronization and recovery methods for PCF context (including whether UDSF is used) |
Configuring an NF Set alone does not guarantee hitless failover
Verification must cover context availability, the target APIs, failure detection time, retry / reselection and the downstream policy processing (UpdateNotify, PFCP). How far OSS implementations (Open5GS / free5GC, etc.) support the headers and reselection in this chapter is also version-dependent and to be confirmed.
Comparison with EPC (4G)¶
| Item | 4G EPC | 5GC |
|---|---|---|
| Mechanism to steer one session to the same policy decision point | PCRF binding by the DRA (Diameter Routing Agent) (TS 29.213, clause number to be confirmed) | BSF (PCF Binding) + SBI Binding Indication |
| Unit of redundancy | PCRF (mostly vendor-specific cluster designs); MME Pool for the MME | NF Set / NF Service Set (a concept common to all NFs); AMF Set for the AMF |
| Pinning the destination of subsequent messages | Diameter Session-Id and Destination-Host | Location (resource URI) + 3gpp-Sbi-Binding |
| Rerouting at an intermediate node | DRA / DEA | SCP (Indirect Communication) |
In 4G, much of PCRF redundancy was left to vendor-specific cluster designs, whereas in 5G the principles of NF Set, Binding Level and reselection via the SCP are specified by 3GPP — a major difference (although the context sharing method remains implementation-dependent).
3GPP Specification¶
| Spec | Clause | Content |
|---|---|---|
| TS 23.501 | §5.21.3 | Reliability support with NF Sets / NF Service Sets (definitions of NF Set and NF Service Set; allocation of sub-clauses §5.21.3.1–§5.21.3.4 to be confirmed) |
| TS 23.501 | §6.3.1.0 | Principles for binding, selection and reselection (Binding Level table) |
| TS 23.501 | Annex E | Communication models for NF / NF service interaction (Direct / Indirect, Models A–D) |
| TS 23.503 | §6.1.1.2.2 | BSF and PCF binding (including Update when a new PCF instance is selected; sub-clause to be confirmed) |
| TS 23.501 | §6.3.7.1 | PCF discovery and selection (to be confirmed) |
| TS 23.501 | §3.1 / §5.21.2 | Definitions of NF Set, NF Service Set, etc. (§3.1 to be confirmed) / AMF Management (AMF-specific handling) |
| TS 23.003 | §28.12 / §28.13 | Format of NF Set ID / NF Service Set ID (§28.13 to be confirmed) |
| TS 29.500 | §5.2.3.2.5 | 3gpp-Sbi-Routing-Binding |
| TS 29.500 | §5.2.3.2.6 | 3gpp-Sbi-Binding |
| TS 29.500 | §5.2.3.2.4 / §5.2.3.2.8 | 3gpp-Sbi-Target-apiRoot / 3gpp-Sbi-Producer-Id (sub-clauses to be confirmed) |
| TS 29.500 | §5.2.7.2 | ProblemDetails causes (TARGET_NF_NOT_REACHABLE, etc.; to be confirmed) |
| TS 29.500 | §6.10 | Support of Indirect Communication (to be confirmed) |
| TS 29.500 | §6.12 | Binding for NF service resources (sub-clauses to be confirmed) |
| TS 29.501 | §4.4.1 | Resource URI structure (apiRoot / apiName / apiVersion; to be confirmed) |
| TS 29.510 | §to be confirmed | NRF NFProfile / NFService (nfSetIdList / nfServiceSetIdList) |
| TS 29.521 | §4.2.2 / §4.2.4 / §4.2.5 | Nbsf_Management Register / Discovery / Update (sub-clauses to be confirmed) |
| TS 29.512 / TS 29.514 | — | Npcf_SMPolicyControl / Npcf_PolicyAuthorization |
| RFC 9113 | §8.2.1 | HTTP/2 header field names (lowercase) |
Summary¶
- An NF Instance is an individual NF entity; an NF Set is a group of interchangeable NF instances that can access the same context. An NF Service Set is a group of service instances within one NF instance
- The Binding Level is the scope to which subsequent requests are bound, and is the starting point for judging the permitted scope of reselection on failure. NF Instance Level + NF Set indicated means the indicated instance normally, and reselection within the set only when it is unavailable
- The BSF's PCF Binding is mainly the ledger used to "first find the PCF in charge"; the SBI Binding Indication (
3gpp-Sbi-Binding/3gpp-Sbi-Routing-Binding) is the header that says "where to carry subsequent requests". A producer's inclusion of3gpp-Sbi-Bindingis optional - The SCP can reselect in Indirect Communication based on Routing-Binding, but that alone does not recover from every failure
- On PCF failure, isolate in three stages: ① discovery and routing, ② context continuity, ③ binding consistency. Switching routing and continuing the policy context are separate problems
Check your understanding¶
Q1. PCF-A and PCF-B belong to the same PCF Set, and the NEF's request carries 3gpp-Sbi-Routing-Binding: bl=nfset; nfset=set1.pcfset.5gc.mnc001.mcc001. Which is the most appropriate description when PCF-A fails? A. Because it is NF Set Level, processing always continues even if PCF-B does not have the context / B. NF Set Level means pinning to PCF-A only, so reselection of PCF-B is prohibited / C. Because it is NF Set Level, PCF-B in the same set can be reselected if the conditions are met, but it must also be able to handle the existing policy context / D. This header specifies the QFI of N3 GTP-U
Answer: C. With an NF Set Level binding, another instance within the same NF Set can be selected or reselected (TS 23.501 §6.3.1.0). However, reselection is a routing matter; if PCF-B cannot access the existing Policy Association context, processing cannot continue (A is wrong). B confuses this with NF Instance Level. D confuses an SBI header with the user-plane QoS Flow identifier.
Q2. Explain the difference between the BSF's PCF Binding and the SBI 3gpp-Sbi-Binding header in terms of who creates them and what they are used for.
The BSF's PCF Binding is the "UE / PDU Session ↔ PCF in charge" mapping that the PCF registers with Nbsf_Management_Register; the NEF / AF etc. discover it to first find the PCF in charge. 3gpp-Sbi-Binding is an HTTP header added by a producer (e.g., the PCF that created a resource) or by a consumer indicating its notification target (e.g., the SMF), and tells the peer to which scope of instances subsequent requests and notifications concerning a specific resource should be sent. The former is a ledger inside an NF called the BSF; the latter is information carried in messages.
Q3. The Routing-Binding is bl=nfinstance; nfinst=(ID of PCF-A); nfset=(ID of the PCF Set). While PCF-A is healthy, may the SCP forward to the less loaded PCF-B in the set?
No. At NF Instance Level, requests are normally sent to the indicated NF instance (PCF-A). The indicated NF Set shows the scope for reselection when the indicated instance is unavailable; it does not mean you may reinterpret it as bl=nfset and load-balance (TS 23.501 §6.3.1.0; details of the table to be confirmed in the original text).
Q4. In a request via the SCP, the consumer specified PCF-A in Target-apiRoot, but the Location in the 201 response pointed to the host of PCF-B. What likely happened, and what should the consumer do from then on?
PCF-A was likely unavailable and the SCP reselected PCF-B within the same PCF Set, within the scope permitted by the binding (if 3gpp-Sbi-Producer-Id is present, it shows which producer processed the request; inclusion conditions to be confirmed). The consumer is expected to store the returned Location and any new 3gpp-Sbi-Binding (if present) and send subsequent requests based on them. At the same time, check that the BSF binding does not contradict the new instance (and whether Nbsf_Management_Update was performed if needed).
Next Step¶
- Compare the communication models that use the SCP with packet captures → SBI Communication Model A–D / SCP / SCP
- Details of the ledger used to find the PCF in charge → BSF / PCF Binding / BSF
- Basics of the PCF and Policy Associations → PCF / SM Policy Association / PCC Rule / PCF
- Reading SBI HTTP/2 and ProblemDetails → N7 SBI Analysis
- Requests from the AF / NEF side → AF / N5 / Application Session / NEF / N33 / Event Exposure
- Contrast with the AMF Set → GUAMI / AMF Region / Set / Pointer
- Where shared context is stored → UDSF / NRF