【5G核心网】free5GC Path Switch Request源码分析

    Path Switch Request 过程的目的是请求将 NG-U 传输承载的下行链路终结点切换到新的终结点。 

Figure 8.4.4.2-1: Path switch request: successful operation

    NG-RAN 节点通过向 AMF 发送 PATH SWITCH REQUEST 消息来启动该过程。一旦接收到路径切换请求消息,AMF 就应为 PDU 会话 ID IE 中指示的每个 PDU 会话,将路径切换请求传输 IE 透明地传输到与所关注的 PDU 会话相关联的 SMF。

    在 5GC 中成功完成所有必要的更新(包括UP路径切换)后,对于 PATH SWITCH REQUEST 中至少包括的 PDU 会话资源之一,AMF 将向 NG-RAN 节点发送 PATH SWITCH REQUEST ACKNOWLEDGE 消息。

    接受的 QoS 流列表应包括在路径切换请求传输IE内的路径切换请求消息中。 SMF 应按照 TS 23.502 [10]中的规定处理此信息。 对于每个PDU会话,在 PATH SWITCH REQUEST 消息的请求传输 IE 中包括每个 TNL Information IE 中的 DL QoS Flow,SMF 可以使用包含的 UP 传输层信息作为该 PDU 会话在不同隧道中拆分的关联 QoS 流的下行链路终结点。

 

1. NG-RAN 向 AMF 发起 PATH SWITCH REQUEST

    NG-RAN 节点发送此消息,以通知 AMF 新服务的 NG-RAN 节点,并通过 AMF 将一个或多个 PDU 会话资源的一些 NG-U DL 隧道终止点传输到 SMF。 NGAP 消息 Present 为 NGAPPDUPresentInitiatingMessage,initiatingMessage 的 ProcedureCode 设置为 ProcedureCodePathSwitchRequest, Present 设置为 InitiatingMessagePresentPathSwitchRequest

PATH SWITCH REQUEST

    N2 Path Switch Request

  • List of PDU Sessions To Be Switched with N2 SM Information,
  • List of PDU Sessions that failed to be established with the failure cause given in the N2 SM information element, 
  • UE Location Information 
NGAP PathSwitchRequest
9.3.4.8 Path Switch Request Transfer

 

   1.1 AMF 处理 PATH SWITCH REQUEST

// TS 23.502 4.9.1
func HandlePathSwitchRequest(ran *context.AmfRan, message *ngapType.NGAPPDU) {

	var rANUENGAPID *ngapType.RANUENGAPID
	var sourceAMFUENGAPID *ngapType.AMFUENGAPID
	var userLocationInformation *ngapType.UserLocationInformation
	var uESecurityCapabilities *ngapType.UESecurityCapabilities
	var pduSessionResourceToBeSwitchedInDLList *ngapType.PDUSessionResourceToBeSwitchedDLList
	var pduSessionResourceFailedToSetupList *ngapType.PDUSessionResourceFailedToSetupListPSReq

    1.1.1 AMF 向 SMF 发送 UpdateSmContext

    n2SmInfoType 设置为 N2SmInfoType_PATH_SWITCH_REQ

AMF->SMF, Update SM Context

   1.2 SMF 处理 UpdateSmContext

func HandlePDUSessionSMContextUpdate(smContextRef string, body models.UpdateSmContextRequest) *http_wrapper.Response {
	//GSM State
	//PDU Session Modification Reject(Cause Value == 43 || Cause Value != 43)/Complete
	//PDU Session Release Command/Complete
	logger.PduSessLog.Infoln("In HandlePDUSessionSMContextUpdate")
	smContext := smf_context.GetSMContext(smContextRef)

    1.2.1 根据 n2SmInfoType 为 N2SmInfoType_PATH_SWITCH_REQ

switch smContextUpdateData.N2SmInfoType {
case models.N2SmInfoType_PATH_SWITCH_REQ:
	smContext.SMContextState = smf_context.ModificationPending
	logger.CtxLog.Traceln("SMContextState Change State: ", smContext.SMContextState.String())

	if err := smf_context.HandlePathSwitchRequestTransfer(body.BinaryDataN2SmInformation, smContext); err != nil {
		logger.PduSessLog.Errorf("Handle PathSwitchRequestTransfer: %+v", err)
	}

	if n2Buf, err := smf_context.BuildPathSwitchRequestAcknowledgeTransfer(smContext); err != nil {
		logger.PduSessLog.Errorf("Build Path Switch Transfer Error(%+v)", err)
	} else {
		response.BinaryDataN2SmInformation = n2Buf
	}

	response.JsonData.N2SmInfoType = models.N2SmInfoType_PATH_SWITCH_REQ_ACK
	response.JsonData.N2SmInfo = &models.RefToBinaryData{
		ContentId: "PATH_SWITCH_REQ_ACK",
	}

	smContext.PendingUPF = make(smf_context.PendingUPF)
	for _, dataPath := range tunnel.DataPathPool {

		if dataPath.Activated {
			ANUPF := dataPath.FirstDPNode
			DLPDR := ANUPF.DownLinkTunnel.PDR

			pdrList = append(pdrList, DLPDR)
			farList = append(farList, DLPDR.FAR)

			if _, exist := smContext.PendingUPF[ANUPF.GetNodeIP()]; !exist {
				smContext.PendingUPF[ANUPF.GetNodeIP()] = true
			}
		}
	}

	sendPFCPModification = true
	smContext.SMContextState = smf_context.PFCPModification
	logger.CtxLog.Traceln("SMContextState Change State: ", smContext.SMContextState.String())

    HandlePathSwitchRequestTransfer 函数将发来的 PathSwitchRequestTransfer ,根据 gTPTunnel 设置 FAR,更新 N3 RAN 地址

PFCP Sessino Modification request

    BuildPathSwitchRequestAcknowledgeTransfer 函数向 AMF 响应请求

9.3.4.9 Path Switch Request Acknowledge Transfer

2. AMF 向 RAN 发送 PathSwitchRequestAcknowledge

PathSwitchRequestAcknowledge

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值