OmniBSF 操作指南
概述
OmniBSF 实现了 5G 核心的绑定支持功能 (BSF)。BSF 维护一个 PCF 绑定的注册表:对于每个 PDU 会话,它存储 UE 身份 (IPv4 地址、IPv6 前缀、MAC 地址或 SUPI) 以及 DNN 和 S-NSSAI 与服务该会话策略的 PCF 实例之间的映射。其他网络功能 - AF/NEF、SMF 或另一个 PCF - 查询 BSF 以发现哪个 PCF 负责给定会话,以便该会话的所有策略信令都指向同一 PCF 实例。
OmniBSF 在 SBI 基础路径 /nbsf-management/v1 下公开 Nbsf_Management 服务 (3GPP TS 29.521)。绑定完全保存在 ETS 表中并在内存中进行索引,以实现并发和低延迟查找。绑定具有可配置的生存时间 (TTL);后台清理程序定期删除过期条目。OmniBSF 在启动时向 NRF 注册其 NF 配置文件,并定期发送心跳。
内部数据存储
绑定在运行时保存在六个 ETS 表中:主绑定表和五个专用查找索引。所有数据都在内存中,并且在进程重启后不会保留。
| ETS 表 | 类型 | 键 | 值 |
|---|---|---|---|
bsf_bindings | :set | binding_id (UUID 字符串) | 完整绑定映射 |
bsf_ipv4_index | :set | UE IPv4 地址 (字符串) | binding_id |
bsf_ipv6_index | :set | UE IPv6 前缀 (字符串) | binding_id |
bsf_supi_index | :bag | SUPI (字符串) | binding_id |
bsf_mac_index | :set | UE MAC 地址 (小写字符串) | binding_id |
bsf_dnn_snssai_index | :bag | {dnn, sst} | binding_id |
每个查找键由其自己的索引提供服务,因此发现不会扫描主绑定表。macAddr48 查找通过 bsf_mac_index 解析(键被小写以便匹配不区分大小写),而 DNN+S-NSSAI 查找通过 bsf_dnn_snssai_index 解析,键为 {dnn, sst}(小匹配桶随后根据可选的 S-NSSAI sd 进行过滤)。
bsf_supi_index 是一个 :bag:单个 SUPI 可以持有 多个并发绑定(例如,多个不同 DNN 的 PDU 会话),因此一个 SUPI 可以映射到多个绑定 ID。通过 supi 的发现每次返回一个 PcfBinding,根据 TS 29.521,因此返回第一个匹配的绑定。
3GPP 角色和规范参考
| 规范 | 相关性 |
|---|---|
| TS 23.501 | 系统架构 - BSF 网络功能角色 |
| TS 23.503 | 策略和计费控制框架 - 策略关联的会话绑定上下文 |
| TS 29.521 | Nbsf_Management 服务 API (PCF 绑定注册/发现/更新/注销)、PcfBinding 数据模型、支持的特性协商 |
| TS 29.500 | 5G SBI 通用框架 (ProblemDetails, HTTP 语义) |
| TS 29.510 | NF 注册和与 NRF 的心跳 |
当 PCF 部署为多个实例(或作为 PCF 集合)时,BSF 变得相关。它的角色是会话绑定:记录哪个 PCF 服务每个 PDU 会话,以便后续的策略交互(来自 AF 通过 NEF,或来自 SMF)到达正确的 PCF。
SBI 端点
所有端点都在基础 URL {sbi_scheme}://{sbi_addr}:{sbi_port} 下提供,基础路径为 /nbsf-management/v1。
| 方法 | 路径 | 描述 | 成功 | 错误 |
|---|---|---|---|---|
POST | /pcfBindings | 为 PDU 会话注册 PCF 绑定。返回指向创建的绑定的 Location 头。 | 201 Created | 400 (缺少 dnn/snssai/PCF 地址);403 (UE IP 已存在绑定) |
GET | /pcfBindings | 发现与提供的查询参数匹配的 PCF 绑定。 | 200 OK,带 PcfBinding,如果没有匹配则返回 204 No Content | - |
PATCH | /pcfBindings/{bindingId} | 更新现有绑定 (UpdateIndPCFBinding)。主体必须是 application/merge-patch+json。 | 200 OK,带��新的 PcfBinding | 404 (未知 ID);415 (错误的内容类型) |
DELETE | /pcfBindings/{bindingId} | 通过其 ID 注销 PCF 绑定。 | 204 No Content | 404 Not Found |
任何其他路径返回 404,并带有 ProblemDetails 主体。
GET 查询参数
发现端点使用第一个匹配参数解析绑定,优先顺序如下:
| 优先级 | 参数 | 类型 | 查找 | 描述 |
|---|---|---|---|---|
| 1 | ipv4Addr | 字符串 | 索引 | UE IPv4 地址(精确匹配) |
| 2 | ipv6Prefix | 字符串 | 索引 | UE IPv6 前缀(精确匹配) |
| 3 | macAddr48 | 字符串 | 索引 | UE MAC 地址(通过 bsf_mac_index 不区分大小写匹配) |
| 4 | supi | 字符串 | 索引 | 订阅者永久标识符(如果多个并发绑定共享 SUPI,则返回第一个匹配) |
| 5 | dnn + snssai | 字符串 / JSON | 索引 | DNN 和 S-NSSAI 一起,通过 bsf_dnn_snssai_index 解析,键为 {dnn, sst}(sst 必须匹配;提供时匹配 sd) |
当提供时,pcfSetId、pcfRegionId 和 bindLevel 查询参数进一步缩小结果范围,根据 TS 29.521:存储值不匹配提供的过滤器的候选项不会返回。查询中缺少的过滤器将被忽略。
POST 请求主体 - 字段
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
dnn | 字符串 | 是 | 数据网络名称 |
snssai | 对象 | 是 | S-NSSAI (sst 整数,选填 sd 字符串) |
pcfFqdn | 字符串 | 有条件 | PCF FQDN - 如果缺少 pcfIpEndPoints 则必填 |
pcfIpEndPoints | 数组 | 有条件 | PCF IP 端点列表 - 如果缺少 pcfFqdn 则必填 |
ipv4Addr | 字符串 | 否 | UE IPv4 地址(已索引;也用于驱动重复检测) |
ipv6Prefix | 字符串 | 否 | UE IPv6 前缀(已索引;也用于驱动重复检测) |
macAddr48 | 字符串 | 否 | UE MAC 地址 |
supi | 字符串 | 否 | 订阅者永久标识符(已索引) |
gpsi | 字符串 | 否 | 通用公共订阅标识符 |
ipv4FrameRouteList | 数组 | 否 | IPv4 帧路由 |
ipv6FrameRouteList | 数组 | 否 | IPv6 帧路由 |
pcfSetId | 字符串 | 否 | PCF 集标识符。存储在绑定中,并在作为查询过滤器提供时用于缩小发现范围。 |
pcfRegionId | 字符串 | 否 | PCF 区域标识符。存储在绑定中,并在作为查询过滤器提供时用于缩小发现范围。 |
bindLevel | 字符串 | 否 | 绑定级别。存储在绑定中,并在作为查询过滤器提供时用于缩小发现范围。 |
suppFeat | 字符串 (十六进制) | 否 | 支持的特性位图;通过与特性 0x01 (BindingUpdate) 的���位与协商 |
对重复注册的 403 响应携带 ExtProblemDetails 主体 (cause = EXISTING_BINDING_INFO_FOUND),并在顶层内联现有 PCF 的 pcfSmFqdn / pcfSmIpEndPoints,根据 TS 29.521。
运营商管理 API
除了 SBI 监听器,OmniBSF 还公开了一个运营商管理 (OAM) REST 接口,用于查看统计信息、检查/清除绑定、在运行时调整 NRF 配置文件容量/优先级和日志级别,以及强制 NRF 重新注册。有关完整的端点参考,请参见 管理 API。
关键程序
PCF 绑定注册 (POST)
PCF 绑定发现 (GET)
PCF 绑定更新 (PATCH)
Merge-patch 仅适用于字段 ipv4Addr、ipv6Prefix、macAddr48、pcfFqdn 和 pcfIpEndPoints;因为 IPv4/IPv6/SUPI/MAC 和 DNN+S-NSSAI 索引基于绑定内容,旧记录及其索引条目将被删除,更新的绑定将被重新插入,以保持索引一致性。PATCH 还会从 binding_ttl_seconds 刷新绑定的 expires_at,因此它充当保持活动的机制,延长绑定的生命周期。请参见 绑定生命周期调整。
PCF 绑定注销 (DELETE)
NRF 注册和心跳
在启动时,OmniBSF 向 NRF 注册一个 BSF NF 配置文件(来自 nrf_uri),广告其 SBI 地址/端口/方案、配置的 PLMN (mcc/mnc) 和 nbsf-management v1 服务。然后,它每 heartbeat_interval 毫秒发送定期的 NFUpdate 心跳。可以通过管理 API 随时强制注册。