跳到主要内容

OmniNSSF 操作指南

概述

OmniNSSF 实现了 5G 核心的网络切片选择功能 (NSSF)。它提供了两个 SBI 服务:Nnssf_NSSelection (TS 29.531),用于回答 AMF 关于 UE 可以使用哪些网络切片的查询,以及 Nnssf_NSSAIAvailability (TS 29.531),用于接受来自 AMF 的 NSSAI 可用性报告并管理对可用性变化通知的订阅。

切片配置 — S-NSSAIs 到 NRF URIs 的映射、每个 PLMN 允许的 NSSAI 和 AMF 集分配 — 在启动时从应用程序配置加载。AMF 报告的 NSSAI 可用性状态在 Agent 中保持处理。可用性变化通知作为火并忘的 HTTP POST 调用发送给订阅者。

架构


3GPP 角色和规范参考

规范相关性
TS 23.501系统架构 — NSSF 角色、网络切片概念、S-NSSAI 定义 (第 5.15 节)
TS 23.502程序 — 注册期间的切片选择 (4.2.3.2)、PDU 会话建立 (4.3.2)
TS 29.531Nnssf_NSSelection 和 Nnssf_NSSAIAvailability APIs
TS 23.003S-NSSAI 结构 (SST, SD)、NSI 定义

SBI 端点

所有端点均在基本 URL {sbi_scheme}://{sbi_addr}:{sbi_port} 下提供。

方法路径服务描述规范
GET/nnssf-nsselection/v2/network-slice-informationNnssf_NSSelection检索 UE 的授权网络切片信息TS 29.531 5.2.1
PUT/nnssf-nssaiavailability/v1/nssai-availability/{nfId}Nnssf_NSSAIAvailability报告或替换 AMF 的 NSSAI 可用性TS 29.531 5.2.2.2
DELETE/nnssf-nssaiavailability/v1/nssai-availability/{nfId}Nnssf_NSSAIAvailability删除 AMF 的 NSSAI 可用性记录TS 29.531 5.2.2.4
POST/nnssf-nssaiavailability/v1/nssai-availability/subscriptionsNnssf_NSSAIAvailability订阅 NSSAI 可用性变化通知TS 29.531 5.2.2.3
DELETE/nnssf-nssaiavailability/v1/nssai-availability/subscriptions/{subscriptionId}Nnssf_NSSAIAvailability取消 NSSAI 可用性订阅TS 29.531 5.2.2.5

请求 / 响应摘要

GET network-slice-information — 必需查询参数:nf-idnf-type。可选:slice-info-request-for-registrationslice-info-request-for-pdu-sessionsnssaitaihome-plmn-idsupported-features。返回 200 OKAuthorizedNetworkSliceInfo

PUT nssai-availability/{nfId} — 请求体:NssaiAvailabilityInfo(必须包含 supportedSnssaiListsupportedNssaiAvailabilityData)。返回 200 OKAuthorizedNssaiAvailabilityInfo。触发对所有当前订阅者的通知。

POST subscriptions — 请求体:NssaiAvailabilitySubscription(必须包含 nfNssaiAvailabilityUri)。返回 201 Created 和订阅对象及 Location 头。


配置参考

配置从应用程序环境键 :omnissf 中读取。

config :omnissf,
sbi_scheme: "http",
sbi_addr: "127.0.0.14",
sbi_port: 7777,
nrf_uri: "http://127.0.0.10:7777",
mcc: "999",
mnc: "70",
heartbeat_interval: 10_000,

nsi_list: [
%{
s_nssai: %{sst: 1, sd: "0x000001"},
nrf_uri: "http://127.0.0.10:7777",
nsi_id: "1"
}
],

allowed_nssai: %{
"999-70" => [
%{sst: 1, sd: "0x000001"}
]
},

amf_set_mapping: %{
"1-0x000001" => ["1"]
},

configured_nssai: %{}

基本参数表

参数类型默认值描述
sbi_scheme字符串"http"SBI 监听套接字的 HTTP 协议 (httphttps)
sbi_addr字符串"127.0.0.14"SBI HTTP 服务器绑定的 IP 地址
sbi_port整数7777SBI HTTP 服务器监听的 TCP 端口
nrf_uri字符串"http://127.0.0.10:7777"NRF 的基本 URI。仅用于 NF 注册和心跳
mcc字符串"999"归属 PLMN 的移动国家代码。作为 home-plmn-id 在选择查询中缺失时的后备 PLMN 键
mnc字符串"70"归属 PLMN 的移动网络代码
heartbeat_interval整数 (毫秒)10000NRF 心跳请求之间的间隔(毫秒)

切片配置参数

nsi_list

网络切片实例 (NSI) 条目的列表。每个条目将 S-NSSAI 绑定到 NRF URI。当 NSSF 接收到切片选择查询时,它会在此列表中查找请求的 S-NSSAI,并在响应的 nsiInformation 字段中返回关联的 NRF URI。

字段类型描述
s_nssai.sst整数切片/服务类型 (1–255)。标准值:1=eMBB,2=URLLC,3=MIoT (TS 23.501 表 5.15.2.2-1)
s_nssai.sd字符串或 nil切片区分符,作为十六进制字符串 (例如,"0x000001")。nil 或缺失匹配给定 SST 的任何 SD (见 NSSF-L5)
nrf_uri字符串负责在此切片实例内进行 NF 发现的 NRF 的基本 URI
nsi_id字符串此 NSI 的不透明标识符,包含在 nsiInformation 响应中

如果没有 nsi_list 条目与请求的 S-NSSAI 匹配,NSSF 将返回 403 Forbidden,原因是 SNSSAI_NOT_FOUND

allowed_nssai

从 PLMN 键 ("{mcc}-{mnc}") 到 S-NSSAI 结构列表的映射。控制哪些切片包含在选择响应的 allowedNssaiList 字段中。如果请求的 PLMN 没有条目,则使用归属 PLMN 的允许 NSSAI 作为后备。

列表中的每个 S-NSSAI:

字段类型描述
sst整数切片/服务类型
sd字符串或 nil切片区分符

amf_set_mapping

从 S-NSSAI 键 ("{sst}-{sd}""{sst}" 当没有 SD 时) 到 AMF 集 ID 字符串列表的映射。当填充时,NSSF 在选择响应中将第一个条目包含为 targetAmfSet(请参见限制 NSSF-L3 — candidateAmfList 未填充)。

configured_nssai

从 S-NSSAI 键到漫游场景的配置 NSSAI 结构的映射。当给定 S-NSSAI 存在时,NSSF 在选择响应中包含 configuredNssai。默认情况下为空。


关键程序

网络切片选择 — 注册 (TS 23.502 第 4.2.3.2 节)

网络切片选择 — PDU 会话 (TS 23.502 第 4.3.2 节)

NSSAI 可用性报告 (TS 29.531 第 5.2.2 节)

NSSAI 可用性订阅 / 通知

S-NSSAI 查找逻辑

NSSF 根据以下规则将请求的 S-NSSAI 与 nsi_list 进行匹配:

  1. SST 必须完全匹配。
  2. SD 匹配:如果 nsi_list 条目具有 sd: nil,则它匹配该 SST 的任何请求 SD(通配符)。如果条目具有特定 SD,则在十六进制规范化后进行不区分大小写的比较。

这意味着具有 sd: nilnsi_list 条目充当其 SST 值的捕获。有关此行为的操作影响,请参见限制 NSSF-L5。


Prometheus 指标

NSSF 指标

指标类型标签描述
omni_nssf.nsselection.requests.count计数器result, nf_typeNS 选择请求
omni_nssf.nssai_availability.update.count计数器nf_idNSSAI 可用性更新
omni_nssf.nssai_availability.delete.count计数器nf_idNSSAI 可用性删除
omni_nssf.nssai_availability.subscribe.count计数器--可用性订阅
omni_nssf.nssai_availability.unsubscribe.count计数器--可用性退订
omni_nssf.ns_selection_requests.total计数器result总网络切片选择请求
omni_nssf.nssai_availability_updates.total计数器--总 NSSAI 可用性更新通知
omni_nssf.nrf.registration.status计量器nf_typeNRF 注册状态 (1=已注册, 0=未注册)

BEAM VM 指标

指标类型描述
beam.memory.total计量器BEAM 总内存(字节)
beam.memory.processes计量器Erlang 进程使用的内存
beam.memory.processes_used计量器进程实际使用的内存
beam.memory.system计量器系统内存
beam.memory.atom计量器总原子内存
beam.memory.atom_used计量器使用的原子内存
beam.memory.binary计量器二进制内存
beam.memory.code计量器代码内存
beam.memory.ets计量器ETS 表内存
beam.processes.count计量器Erlang 进程数量
beam.ports.count计量器Erlang 端口数量
beam.atom.count计量器原子数量
beam.vm.uptime计量器VM 运行时间(秒)

已知限制

ID领域描述
NSSF-M2NSSAI 可用性 PATCH没有 PATCH /nnssf-nssaiavailability/v1/nssai-availability/{nfId} 端点。对 AMF 可用性数据的部分更新不受支持;必须使用 PUT 替换完整记录。
NSSF-M3可用性授权NSSF 对报告的 NSSAI 可用性的授权是直通的。PUT 响应中的 authorizedNssaiAvailabilityData 与提交的 supportedNssaiAvailabilityData 相同。NSSF 不会交叉检查报告的 S-NSSAIs 与配置的 nsi_list
NSSF-L1支持的功能接受 supported-features 查询参数但不处理。AMF 和 NSSF 之间不进行能力协商。
NSSF-L2被拒绝的 NSSAIAuthorizedNetworkSliceInfo 响应不包括 rejectedNssaiInRa(在注册区域被拒绝)或 rejectedNssaiInTa(在跟踪区域被拒绝)字段。请求的 S-NSSAI 在特定 TA 中不可用的 UE 将不会收到明确的拒绝信息。
NSSF-L3候选 AMF 列表选择响应中未填充 candidateAmfList 字段。仅在适用时包含 targetAmfSet(来自 amf_set_mapping 的第一个条目)。未提供 TS 29.531 的完整 AMF 选择协助。
NSSF-L4订阅 PATCH没有 PATCH /nnssf-nssaiavailability/v1/nssai-availability/subscriptions/{subscriptionId} 端点。创建后无法更新订阅参数;必须删除并重新创建订阅。
NSSF-L5SD 通配符匹配nsi_list 条目具有 s_nssai.sd: nil 匹配给定 SST 的任何 SD,而不仅仅是没有 SD 的请求。这意味着通配符条目也将匹配显式 SD 请求。如果多个切片共享一个 SST 但通过 SD 区分,则每个切片必须在 nsi_list 中具有自己的显式 SD 条目,并在任何通配符条目之前排序(第一个匹配胜出)。

故障排除

切片选择返回 403 SNSSAI_NOT_FOUND

nsi_list 中没有条目与请求的 S-NSSAI 匹配。请验证:

  1. 请求中的 SST 精确匹配 nsi_list 条目(整数比较)。
  2. 请求中的 SD 与条目的 SD 匹配,或者条目具有 sd: nil(通配符)。
  3. 在更改后重新加载了 nsi_list 配置 — OmniNSSF 仅在启动时从应用程序环境读取 nsi_list。需要重启以获取更改。

NSSF 日志将显示 NSSelection: Cannot find NSI for S-NSSAI [SST:{sst} SD:{sd}]

切片选择返回 400 MANDATORY_QUERY_PARAM_MISSING

请求中缺少 nf-idnf-type 查询参数。根据 TS 29.531,这两个参数都是必需的。请验证 AMF 是否在其选择请求中包含这些参数。

选择响应中缺少允许的 NSSAI

仅在可以从请��中确定 PLMN 键时,响应中才包含 allowedNssaiList 字段。PLMN 键是从 home-plmn-id 查询参数派生的,或者回退到 NSSF 自身的 MCC/MNC (mcc/mnc 配置)。如果两者都无法解析,则省略该字段。请验证:

  1. mccmnc 为归属 PLMN 正确配置。
  2. allowed_nssai 映射包含键 "{mcc}-{mnc}" 的条目。

基于 TAI 的过滤移除了所有允许的 NSSAI

当提供 tai 参数且没有 AMF 通过 PUT 报告可用性数据时,NSSF 默认允许所有配置的 NSSAIs(空可用性映射 = 无限制)。一旦任何 AMF 报告可用性,仅返回在该可用性数据中匹配 TAI 条目的 S-NSSAIs。如果查询中的 TAI 在任何 AMF 报告的 supportedNssaiAvailabilityData 中未出现,则所有 NSSAIs 将被过滤掉。要诊断,请检查 AMF 是否提交了 PUT 请求,以及这些报告中的 TAC 是否与查询中的 TAC 匹配。

SD 通配符导致选择错误的 NSI

如果 nsi_list 条目具有 sd: nil 列在更具体的条目之前,它将首先匹配任何 SST 请求,而不考虑 SD。确保具体的 SD 条目在 nsi_list 中出现在通配符条目之前。请参见限制 NSSF-L5。

订阅者未收到可用性通知

通知是异步发送的(火并忘),在生成的任务中。交付失败将记录为警告,但不会���试。请验证:

  1. 订阅中的 nfNssaiAvailabilityUri 从 NSSF 主机可达。
  2. 订阅者 NF 在该 URI 接受 POST 请求并返回 2xx 响应。

失败的通知尝试记录为 NSSAIAvailability: notification to {uri} failed: {reason}

AMF 重启后可用性或订阅状态过时

NSSAI 可用性记录和订阅存储在进程中,并不是持久的。它们仅在 Erlang VM 的生命周期内存活。如果 AMF 重启并未通过 PUT 重新注册其可用性,NSSF 将继续为该 AMF 的 NF ID 提供过时(或缺失)的可用性数据。AMF 应在重新连接时重新提交其 NSSAI 可用性。同样,在 NSSF 重启之前创建的订阅必须由订阅者重新创建。

日志关联

NSSAI 选择日志行以 NSSelection: 为前缀,并包含请求的 nf-id。NSSAI 可用性日志行以 NSSAIAvailability: 为前缀,并包含 nfId。订阅通知尝试记录回调 URI。使用 nf-id 值将选择请求与来自同一 AMF 的可用性更新关联。