本文目標:
UDR 是實際儲存 5G Policies 的 Network Function,本篇文章會大致講解 Policy Data 的種類、以及這些資料都被哪些 NF 存取。
Policy Data 涵蓋了三種子類別,分別是:
Access and the Mobility-related Policies (AM Policy) 用於提供 UE 與 AMF 之間的 Registration,AMF 會透過與 PCF(AM-PCF)溝通取得這些資訊。
UE Policy Data 是所有透過 N1/N2 送往至 UE 的資訊集合,而這些資訊同樣也是在 Registration 時由 AMF 向 PCF(UE-PCF) 索取。
URSP (UE Route Selection Policy)
URSP 幫助核心網路理解 Application 與網路切片的關聯性,透過 URSP,終端設備可以為不同的應用選擇不同的網路切片,滿足每個可能的應用場景。
ANDSP
SM Policy Data 存放與 PDU Session 相關的資料(QoS、計費資訊...等等),包含:
這些資訊同樣會由 SMF 在處理相關流程時向 PCF(SM-PCF)索取。
PCC (Policy and Charging Control) 顧名思義就是負責處理計費相關的策略,根據 3GPP TS 23.503 的定義,5G 核網中的 PCF 要能夠:
根據上述內容可以得知,PCF 負責了 PCC 相關的多數內容與工作,為了達到特定的目的(如:實施計費、QoS Control...等等),PCF 需要與其他 Network Functions 合作。
本節會討論 PCF 與其他 NF 的互動(僅考慮 AMF、SMF 與 UDR)。
Npcf 以及 Namf 使 PCF 能夠對 AMF 提供 Access and Mobility Management related policies,相關功能如下:
Npcf 以及 Nsmf 這兩個 SBI 使 PCF 能夠對 SMF 做到 dynamic policy and charging control,簡單來說:PCF 會向 UDR 查詢相關策略,並產生 PCC Rule 提供給 SMF,SMF 會根據這些規則告知 UPF 如何執行 QoS 控制。
Npcf 以及 Nsmf 提供了以下功能:
Nudr interface 使 PCF 能夠存取 UDR 維護的 access policy control related subscription information 以及 application specific information。
Nudr interface 提供以下功能:
補充:與 AF 相關的功能請參考 TS 23.503 clause 5.3.5。
以下程式碼取自 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 以及之前介紹到的複雜功能了!