Policy and Charging Control - ianchen0119/Introduce-to-5GC GitHub Wiki
PCC (Policy and Charging Control) 顧名思義就是負責處理計費相關的策略,根據 3GPP TS 23.503 的定義,5G 核網中的 PCF 要能夠:
- 提供 AM Policy 給 UE,內容包含:
- Access Network Discovery & Selection Policy (ANDSP) UE 可以根據 ANDSP 去選擇 non-3GPP access network。
- UE Route Selection Policy (URSP) UE 可以根據 URSP 決定如何路由傳出流量。流量可以路由到已建立的 PDU Session,也可以 offload 到 PDU Session 外部的 non-3GPP access,或者可以用來觸發新的 PDU Session establishment。
- PCF 必須要能夠過 SBI 與 AMF 進行互動,以提供 Access and Mobility Management related policies 給後者。
- 管理 Packet Flow Descriptions,PFD 可以讓 UPF 用於偵測特定應用的 Packet flow。
- 提供 Gating control 的決策,使 UPF 可以應用在每一個 service data flow。
- 負責提供 QoS profile,讓 SMF 可以對每個 service data flow 套用對應的 QoS 資訊,以達到 QoS Control 的功能。
- SMF 應能夠使用與 QoS Flow 相關的 PCC rule 確定 QoS Flow 的 Authorized QoS。此外,如果無法實現 QoS Flow 的目標,SMF 需要通知 PCF。
- 能夠提供與 IP type、Ethernet type、Unstructured type 的 PDU Session 相關的資訊:
- Session-AMBR
- Default 5QI/ARP
SBI
根據上述內容可以得知,PCF 負責了 PCC 相關的多數內容與工作,為了達到特定的目的(如:實施計費、QoS Control...等等),PCF 需要與其他 Network Functions 合作。 本節會討論 PCF 與其他 NF 的互動(僅考慮 AMF、SMF 與 UDR)。
AMF
Npcf 以及 Namf 使 PCF 能夠對 AMF 提供 Access and Mobility Management related policies,相關功能如下:
- 建立或移除 AM Policy Association(參考 TS 23.502 clause 4.16)。
- 當 Access and Mobility Management 相關的 Policy Control Request Trigger 條件滿足時,PCF 必須提供 AMF 要求的 access and mobility management related policies。
- PCF 提供 access and mobility management decision 給 AMF。
- 通過 AMF 處理從 PCF 到 UE 的 transparent delivery UE access selection 和 PDU Session selection policy。
SMF
Npcf 以及 Nsmf 這兩個 SBI 使 PCF 能夠對 SMF 做到 dynamic policy and charging control,簡單來說:PCF 會向 UDR 查詢相關策略,並產生 PCC Rule 提供給 SMF,SMF 會根據這些規則告知 UPF 如何執行 QoS 控制。 Npcf 以及 Nsmf 提供了以下功能:
- 建立或移除 SM Policy Association(參考 TS 23.502 clause 4.16)。
- 當 Session Management 相關的 Policy Control Request Trigger 條件滿足時,PCF 必須提供 SMF 要求的 policy and charging control decision。
- PCF 提供 policy and charging control decision 給 SMF。
UDR
Nudr interface 使 PCF 能夠存取 UDR 維護的 access policy control related subscription information 以及 application specific information。 Nudr interface 提供以下功能:
- 要求 UDR 提供 policy control related subscription information 以及 application specific information。
- UDR 通知 PCF 與 policy control related subscription information 有關的變動。
補充:與 AF 相關的功能請參考 TS 23.503 clause 5.3.5。
PCC Model
以下程式碼取自 free5GC OpenAPI 專案:
/*
* Npcf_SMPolicyControl
*
* Session Management Policy Control Service
*
* API version: 1.0.1
* Generated by: OpenAPI Generator (https://openapi-generator.tech)
*/
package models
type PccRule struct {
// An array of IP flow packet filter information.
FlowInfos []FlowInformation `json:"flowInfos,omitempty" yaml:"flowInfos" bson:"flowInfos" mapstructure:"FlowInfos"`
// A reference to the application detection filter configured at the UPF.
AppId string `json:"appId,omitempty" yaml:"appId" bson:"appId" mapstructure:"AppId"`
// Represents the content version of some content.
ContVer int32 `json:"contVer,omitempty" yaml:"contVer" bson:"contVer" mapstructure:"ContVer"`
// Univocally identifies the PCC rule within a PDU session.
PccRuleId string `json:"pccRuleId" yaml:"pccRuleId" bson:"pccRuleId" mapstructure:"PccRuleId"`
Precedence int32 `json:"precedence,omitempty" yaml:"precedence" bson:"precedence" mapstructure:"Precedence"`
AfSigProtocol AfSigProtocol `json:"afSigProtocol,omitempty" yaml:"afSigProtocol" bson:"afSigProtocol" mapstructure:"AfSigProtocol"`
// Indication of application relocation possibility.
AppReloc bool `json:"appReloc,omitempty" yaml:"appReloc" bson:"appReloc" mapstructure:"AppReloc"`
// A reference to the QoSData policy type decision type. It is the qosId described in subclause 5.6.2.8. (NOTE)
RefQosData []string `json:"refQosData,omitempty" yaml:"refQosData" bson:"refQosData" mapstructure:"RefQosData"`
// A reference to the TrafficControlData policy decision type. It is the tcId described in subclause 5.6.2.10. (NOTE)
RefTcData []string `json:"refTcData,omitempty" yaml:"refTcData" bson:"refTcData" mapstructure:"RefTcData"`
// A reference to the ChargingData policy decision type. It is the chgId described in subclause 5.6.2.11. (NOTE)
RefChgData []string `json:"refChgData,omitempty" yaml:"refChgData" bson:"refChgData" mapstructure:"RefChgData"`
// A reference to UsageMonitoringData policy decision type. It is the umId described in subclause 5.6.2.12. (NOTE)
RefUmData []string `json:"refUmData,omitempty" yaml:"refUmData" bson:"refUmData" mapstructure:"RefUmData"`
// A reference to the condition data. It is the condId described in subclause 5.6.2.9.
RefCondData string `json:"refCondData,omitempty" yaml:"refCondData" bson:"refCondData" mapstructure:"RefCondData"`
}
在之前的章節中已經向大家介紹 OpenAPI 以及如何使用 OpenAPU Generator 產生 3GPP 定義的 model,從這些 pre-defined 的 model 我們可以清楚地知道 PCC Rule 應該包含什麼資料。
再以其中的 FlowInfos []FlowInformation
為例,如果我們想要知道這個 data type 包含了什麼資料,同樣也能夠在專案內部找到定義:
/*
* Npcf_SMPolicyControl
*
* Session Management Policy Control Service
*
* API version: 1.0.1
* Generated by: OpenAPI Generator (https://openapi-generator.tech)
*/
package models
type FlowInformation struct {
// Defines a packet filter for an IP flow.Refer to subclause 5.4.2 of 3GPP TS 29.212 [23] for encoding.
FlowDescription string `json:"flowDescription,omitempty" yaml:"flowDescription" bson:"flowDescription" mapstructure:"FlowDescription"`
EthFlowDescription *EthFlowDescription `json:"ethFlowDescription,omitempty" yaml:"ethFlowDescription" bson:"ethFlowDescription" mapstructure:"EthFlowDescription"`
// An identifier of packet filter.
PackFiltId string `json:"packFiltId,omitempty" yaml:"packFiltId" bson:"packFiltId" mapstructure:"PackFiltId"`
// The packet shall be sent to the UE.
PacketFilterUsage bool `json:"packetFilterUsage,omitempty" yaml:"packetFilterUsage" bson:"packetFilterUsage" mapstructure:"PacketFilterUsage"`
// Contains the Ipv4 Type-of-Service and mask field or the Ipv6 Traffic-Class field and mask field.
TosTrafficClass string `json:"tosTrafficClass,omitempty" yaml:"tosTrafficClass" bson:"tosTrafficClass" mapstructure:"TosTrafficClass"`
// the security parameter index of the IPSec packet.
Spi string `json:"spi,omitempty" yaml:"spi" bson:"spi" mapstructure:"Spi"`
// the Ipv6 flow label header field.
FlowLabel string `json:"flowLabel,omitempty" yaml:"flowLabel" bson:"flowLabel" mapstructure:"FlowLabel"`
FlowDirection FlowDirectionRm `json:"flowDirection,omitempty" yaml:"flowDirection" bson:"flowDirection" mapstructure:"FlowDirection"`
}
總結
之前的文章已經介紹了各個 Network Function、PDU Session、QoS 以及 5G Polycies,本章節透過 PCC 的介紹將相關的資訊都串聯了起來,現在讀者們就可以從 Top to Bottom 的視角了解整個 5G 核心網路是如何做到 QoS Control 以及之前介紹到的複雜功能了!
References
- 3GPP TS 23.503
- free5GC