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