跳到主要内容

OmniSMF

OmniSMF 实现了 5G 核心的 会话管理功能 (SMF)。SMF 拥有 PDU 会话的完整生命周期:UE IP 地址分配、策略关联、用户面编程和拆除。它锚定了面向 UPF 的 N4 (PFCP) 接口、面向 PCF 的 N7 接口、面向 UDM 的 N10 接口、面向 AMF 的 N11 接口,以及面向 CHF 的 N40 (Nchf) 汇聚计费接口,同时还为独立 PGW-C 提供了面向 4G/5G 移动性的内部 N26 互通路径。

每个 PDU 会话由一个动态监督下的专用会话工作进程管理(每会话一个进程模型)。所有会话状态(QoS 流、PFCP 上下文、UE IP、用户面连接状态)由该工作进程拥有,因此一个会话的失败不会影响其他会话。出站 SBI 调用是针对启动时配置的静态 URI;SMF 向 NRF 注册并发送心跳,但不���行基于 NRF 的发现以进行出站调用。

文档

  • 操作指南 - 3GPP 角色、SBI 和 N4 接口,以及关键的 PDU 会话建立、修改、释放、服务请求和 N26 互通程序及其序列图。
  • 配置参考 - 完整的运行时配置参考、参数表、UE IP 池和 PCO/P-CSCF 配置、管理/OAM API 和日志记录。
  • 指标 - PDU 会话、PFCP/UPF、NRF 注册和 BEAM VM 健康的 Prometheus 指标,以及示例 PromQL。
  • 故障排除 - 常见问题及其解决方案。

架构概述

功能概述

  • PDU 会话生命周期:建立、修改、释放,以及 UE 空闲 / 服务请求 UP 重新激活,每个会话由一个专用工作进程拥有。
  • DNN 感知的 UE IP 池,具有精确/正则/默认匹配,每个 DNN 多个 IPv4/IPv6 范围,随机分配、去重,以及在任何工作进程退出时安全释放。
  • 尊重来自 UDM/UDR 的用户静态 IP,并在池中保留。
  • PDU 会话类型协调:来自单一家庭池的双栈请求被标记为该家庭,并具有正确的 5GSM 原因 (#50/#51)。
  • VoNR 的 P-CSCF / PCO:DNS SRV 发现与 SIP OPTIONS 健康检查加静态回退;与 4G PGW-C 的 PCO 对等。
  • 专用 GBR QoS 流 (5QI-1):静态(预配置)和动态(通过 PCF 策略通知驱动的呼叫)路径,以及建立后的 QoS 流修改。
  • N4 / PFCP:建立关联并进行心跳以及完整的会话建立、修改和删除。
  • N40 / Nchf 汇聚计费:作为向 CHF 的计费消费者,在 PDU 会话建立时打开计费数据请求,在会话期间根据 N4 URR 使用报告进行更新,并在释放时关闭。CHF 通过 NRF 发现解析,并具有静态回退 URI。默认禁用,通过配置启用。
  • N26 EPS 互通:在 4G/5G 之间采用/切换/查找并保留 UE IP。
  • 切换状态处理hoState 转换(PREPARING / PREPARED / COMPLETED / CANCELLED),在完成时重新激活用户面。
  • 结构化 JSON 日志记录,具有每会话元数据和 Prometheus 指标导出器。

快速开始

OmniSMF 从 config/runtime.exs 读取其运营商配置,该配置将环境变量映射到 :omnismf 应用程序环境。

import Config

config :omnismf,
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.4"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
udm_uri: System.get_env("UDM_URI", "http://127.0.0.12:7777"),
pcf_uri: System.get_env("PCF_URI", "http://127.0.0.13:7777"),
amf_uri: System.get_env("AMF_URI", "http://127.0.0.5:7777"),
upf_addr: System.get_env("UPF_ADDR", "10.179.1.24"),
upf_pfcp_port: String.to_integer(System.get_env("UPF_PFCP_PORT", "8805")),
pfcp_addr: System.get_env("PFCP_ADDR", "0.0.0.0"),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
ue_ip_pool: [subnet_map: %{default: ["10.45.0.0/16"]}]

config :logger, :default_formatter,
format: {OmniLogger.JsonFormatter, :format},
metadata: :all

sbi_addrpfcp_addr 默认分别为回环 / 所有接口。在任何多主机或容器化部署中,sbi_addr 必须是 AMF/PCF 可以到达的地址,pfcp_addr 必须可以从 UPF 路由,upf_addr 必须指向 UPF 的 PFCP 端点,否则无法建立 PDU 会话。

完整的参数参考,包括每个环境变量和默认值,详见 配置参考