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

2023-05-16

    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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【5G核心网】free5GC Path Switch Request源码分析 的相关文章

  • 在 SVG 路径中对 SVG 进行动画处理

    我已经构建了一个路径动画 但 svg 中的锯片有问题 我想要为 Sawblade 制作动画 360 度旋转
  • 为什么使用 $PATH 以及它是什么

    我对编程有点陌生 不是真的 但我仍在学习 我们不是吗 虽然我了解 Java 和 Python 并且了解 C C JS C HTML CSS 等 并且我可以在终端中很好地导航 但我不熟悉终端中的 PATH 是什么 我使用 Linux 终端和
  • Twig 链接到当前路线但更改区域设置

    我会在现有网站中添加一些指向不同区域设置版本的链接 效果很好 但是很丑 li a href img src alt es a li li a href a li
  • Mac OS X 上的 scp 问题:scp 不喜欢文件名中的空格,“\”修复不起作用

    我正在尝试使用 scp 在两台 Mac 操作系统 10 6 8 之间传输文件 但它失败了 因为我的目录 文件名中有空格 我无法更改目录 文件名 当我使用 Mac 在终端中工作时 我经常使用 符号来表示空格 然而 在这种情况下 它不起作用 我
  • 如何使用 Whatsapp Cloud API 发送短信

    我在使用 Whatsapp Cloud API 已于 5 月 22 日向公众发布 时遇到问题 我做了一切在入门 https developers facebook com docs whatsapp cloud api get starte
  • .NET Core 中 Path.TryJoin 相对于 Path.Combine 有什么优势?

    我刚刚开始使用 NET Core 2 1 发现Path TryJoin https learn microsoft com en us dotnet api system io path tryjoin view netcore 2 1 a
  • RSpec 请求 - 如何为所有请求设置 http 授权标头

    我正在使用 rspec 请求来测试 JSON API 该 API 需要在每个请求的标头中包含 api key 我知道我可以这样做 get v1 users janedoe json HTTP AUTHORIZATION gt Token t
  • jQuery JSON 请求得到“200 OK”答案,但没有内容

    我正在使用 jQuery 通过访问者的 IP 地址获取其位置 有一项很棒的服务叫做免费地理IP http freegeoip appspot com 我需要做的就是在 URL 末尾添加 json 或 xml 然后添加 IP 地址 它将返回所
  • 关于 PHP 范围的问题 - 从 Java 程序员的角度来看

    我对 PHP 还很陌生 所以我试图理解 PHP Web 应用程序中的范围概念 在 Java 世界中 Java Web 应用程序 使用 Java Server Pages JSP 及以上 将允许 Java Bean 具有以下级别的范围 Pag
  • 从物理路径获取相对虚拟路径

    如何从asp net中的物理路径获取相对虚拟路径 相反的方法如下 Server MapPath Virtual Path Here 但是上面的方法的逆过程是什么呢 Maybe 这个问题 https stackoverflow com que
  • IE 下的 Http 请求速度变慢

    在我的 javascript 应用程序中工作时 我注意到使用 IE 11 时 相同的 ajax 请求时间最多延长 10 倍 响应大小完全相同 12 6KB 我看到的唯一区别是 IE 添加 Pragma no cache 不是铬 Chrome
  • Python请求响应以utf-8编码但无法解码

    我正在尝试使用 python 抓取我的messenger com facebook Messenger 聊天记录 并且我使用谷歌浏览器开发工具来查看聊天历史记录的 POST 请求 并且我已将整个标头和正文复制为请求可以使用的格式 我得到 H
  • $PATH 中 /usr/bin 和 /usr/local/bin 等的顺序

    在我的 Mac 上 我经常使用 bash 对于我的环境设置 我添加了 usr bin and usr local bin into PATH就像我平常做的那样 虽然我知道什么 usr bin and usr local bin关于 我很好奇
  • 在iframe中显示本地htm文件?

    我使用 MailBee NET 对象以 htm 格式在本地计算机上保存一些电子邮件 例如 使用服务器上的电子邮件 messageID 为每封电子邮件创建一个单独的文件夹 D 电子邮件 GmailId1380ec660e0e656a doc
  • 求任意节点到一个节点的最小公共路径

    我的问题如下 我有一个 backup 节点和其他节点 从这些节点 我需要生成一个到备份节点的最小公共路径 未加权和无向图 我不需要每次都需要解决方案 我如何知道我是否可以生成这条路径 我正在考虑将图分成一些子图并搜索最小的 subpath
  • 规范化 solaris 上的路径名

    在 GNU 系统上我只会使用readlink f SOME PATH 但 Solaris 没有 readlink 我更喜欢在 bash 中运行良好的程序 但如果需要的话其他程序也可以 Edit 到目前为止 我想到的最好的方法是使用 cd 和
  • C# 获取资源文件夹路径

    我的项目中的一些资源很好 并且使用字符串路径可以正常工作 但是如果我将项目移动到另一个目录或另一台计算机 它将停止工作 请我需要在字符串变量中获取项目资源文件夹的路径 像这样的东西 C Users User1 Documents
  • 414 请求 URI 太大错误 Google 地图 v3

    当我调用构造函数来创建具有超过 15 个不同 KMZ 文件的新 KmlLayer 时 似乎会发生此错误 构造函数的调用是 var layer new google maps KmlLayer http 我每次都可以使用 15 个不同的 KM
  • 获取express.js中间件请求中“#”后的url

    我需要获取服务器中间件上的 url 使用express js 我用req url但是当 url 开头时 some urlreq url 返回 与req path 有没有办法获取url之后 在express js中 No URL 中以 符号永
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32

随机推荐