跳到主要内容

GMLC & Le 接口操作指南

OmniLCS 包含一个网关移动位置中心(GMLC)功能,向外部 LCS 客户端暴露 Le 接口。这允许公共安全应答点(PSAP)、车队管理系统、合法拦截平台和其他外部方通过 3GPP TS 29.172 中定义的基于 Diameter 的 Le 参考点请求订阅者位置。

GMLC 支持 即时延迟 位置请求。延迟请求包括 周期性位置(定期报告位置)和 触发位置(当订阅者进入、离开或停留在某个地理区域时报告位置)。

GMLC / Le 接口

架构

请求流程

即时位置请求

外部 LCS 客户端通过 Diameter 发送提供位置请求(PLR)。OmniLCS 授权客户端,运行定位引擎,并在提供位置应答(PLA)中返回结果。

周期性位置请求

当 PLR 包含设置了周期位的 Deferred-Location-Type 和分组 AVP 的 Periodic-LDR-Information 时,OmniLCS 创建一个周期会话,在指定的时间间隔内运行位置修正,并通过位置报告请求(LRR)交付每个结果。

触发(地理围栏)位置请求

当 PLR 包含区域事件信息时,OmniLCS 创建一个触发会话,轮询 UE 位置,并在满足触发条件时触发。

配置

GMLC 配置

config :omnilcs, :gmlc,
# 启用/禁用 GMLC Le 接口
enabled: true,

# 允许来自未授权列表中的客户端的请求
allow_unknown_clients: false,

# 授权的外部 LCS 客户端
authorized_clients: [
%{
name: "psap-01",
type: :emergency_services,
allowed_methods: [:cell, :ecid, :gnss, :otdoa],
rate_limit: 100,
description: "主要 PSAP"
},
%{
name: "fleet-mgmt",
type: :value_added_services,
allowed_methods: [:cell, :ecid],
rate_limit: 50,
description: "车队管理系统"
}
],

# 允许延迟(周期性/触发)位置请求
allow_deferred: true,

# 最大并发周期性会话
max_periodic_sessions: 100,

# 最大并发触发(地理围栏)会话
max_triggered_sessions: 50,

# 默认周期性会话的间隔(毫秒)
default_periodic_poll_interval_ms: 60_000,

# 默认触发会话的轮询间隔(毫秒)
default_triggered_poll_interval_ms: 30_000,

# 将所有位置修正记录到 InfluxDB
influx_logging: true

GMLC 参数

参数类型必需默认描述
enabled布尔值false启用 GMLC Le 接口处理程序。当禁用时,所有 PLR 被视为标准 SLg 请求。
allow_unknown_clients布尔值false接受未列在 authorized_clients 中的客户端的请求。在集成测试期间设置为 true 以允许模式。
authorized_clients列表[]授权的外部 LCS 客户端配置列表。请参见下面的 客户端参数
allow_deferred布尔值true接受延迟(周期性和触发)位置请求。当 false 时,仅处理即时请求。
max_periodic_sessions整数100最大并发周期性位置会话数。当超过时返回 Diameter 3004(TOO_BUSY)。
max_triggered_sessions整数50最大并发触发位置会话数。
default_periodic_poll_interval_ms整数60000当 PLR 中未指定时,周期性位置修正之间的默认间隔。
default_triggered_poll_interval_ms整数30000当在 Area-Event-Info AVP 中未指定时,触发会话的默认轮询间隔。
influx_logging布尔值true将 GMLC 会话中的所有位置修正写入 InfluxDB。

客户端参数

每个 authorized_clients 中的条目:

参数类型必需默认描述
name字符串--客户端身份。与 PLR 中的 LCS-EPS-Client-Name 或 LCS-Requestor-ID-String AVP 匹配。
type原子:any预期的 LCS-Client-Type: :emergency_services, :value_added_services, :plmn_operator_services, :lawful_intercept_services, 或 :any
allowed_methods列表[:cell, :ecid, :gnss, :otdoa]此客户端可以请求的位置方法。
rate_limit整数0每分钟的最大请求数。0 表示无限制。
description字符串""控制面板的可读描述。

LCS 客户端类型

根据 3GPP TS 29.172 第 7.4.4 节

类型描述
0紧急服务PSAP,E-CSCF 紧急呼叫路由
1增值服务车队管理、资产跟踪、基于位置的服务
2PLMN 运营商服务运营商内部服务(O&M,网络优化)
3合法拦截服务执法位置请求

延迟位置类型

周期性位置

周期性位置会话在固定的时间间隔内执行可配置数量的位置修正。每个修正是:

  1. 由 E-SMLC 引擎使用请求的位置方法执行
  2. 作为带有会话元数据的 location_fix 测量写入 InfluxDB
  3. 通过标准位置记录器(CSV + ETS)记录
  4. 通过 Diameter LRR 交付给发起的 LCS 客户端

当报告计数耗尽时,会话终止。

使用的 Diameter AVP:

AVP代码描述
Deferred-Location-Type1480设置第 4 位表示周期性 LDR
Periodic-LDR-Information2025包含报告参数的分组 AVP
Reporting-Amount2026要执行的位置修正数量
Reporting-Interval2027修正之间的间隔(秒)

触发(地理围栏)位置

触发位置会话轮询 UE 位置,并将其与一个或多个地理区域进行评估��当满足触发条件时,报告位置。

事件类型:

事件Deferred-Location-Type 位触发条件
进入位 1UE 从区域外过渡到区域内
离开位 2UE 从区域内过渡到区域外
在内位 3UE 在每次轮询时都在区域内

支持的区域定义:

  • 圆形 -- 中心点(纬度,经度)和半径(米)
  • 多边形 -- 定义封闭多边形的顶点列表

地理围栏评估器重用 CAP 警报多边形解析器中的射线投射算法进行多边形包含检查,并使用哈弗辛距离进行圆形区域检查。

InfluxDB 位置记录

所有 GMLC 会话修正都使用 location_fix 测量写入 InfluxDB:

标签:

标签描述
imsi订阅者 IMSI
method使用的位置方法(cell, ecid, gnss, otdoa)
source引擎结果中的位置来源
session_typeperiodic, triggered, 或 immediate
client_name请求的 LCS 客户端的名称

字段:

字段类型描述
latitude浮点数WGS84 纬度(度)
longitude浮点数WGS84 经度(度)
altitude浮点数海拔(米,若可用)
uncertainty浮点数位置不确定��(米)
confidence整数置信水平(0-100)
duration_ms整数执行修正所需的时间

示例 InfluxQL 查询:

-- 订阅者的最新修正
SELECT * FROM location_fix WHERE imsi = '001010000000001' ORDER BY time DESC LIMIT 10

-- 最近一小时的周期性会话跟踪
SELECT latitude, longitude FROM location_fix
WHERE session_type = 'periodic' AND imsi = '001010000000001' AND time > now() - 1h

-- 按方法的修正成功率
SELECT COUNT(*) FROM location_fix WHERE time > now() - 24h GROUP BY method

-- 地理围栏触发事件
SELECT * FROM location_fix WHERE session_type = 'triggered' AND time > now() - 24h

REST API

延迟位置 API 可在 https://<host>:8443/api/deferred_location 访问。

列出活动会话

GET /api/deferred_location

响应:

{
"status": "ok",
"count": 2,
"data": [
{
"session_id": "a1b2c3d4-...",
"type": "periodic",
"imsi": "001010000000001",
"method": "cell",
"client_name": "rest-api",
"status": "active",
"interval_ms": 60000,
"remaining_reports": 7,
"total_reports": 10,
"started_at": "2026-04-09T10:00:00Z",
"last_fix_at": "2026-04-09T10:03:00Z"
}
]
}

创建周期性会话

POST /api/deferred_location
Content-Type: application/json

{
"type": "periodic",
"imsi": "001010000000001",
"method": "cell",
"interval_seconds": 60,
"count": 10
}

创建触发会话

POST /api/deferred_location
Content-Type: application/json

{
"type": "triggered",
"imsi": "001010000000001",
"method": "cell",
"event_type": "entering",
"poll_interval_seconds": 30,
"max_reports": 0,
"areas": [
{
"type": "circle",
"center": {"lat": -33.8688, "lon": 151.2093},
"radius_meters": 500
}
]
}

取消会话

DELETE /api/deferred_location/:session_id

指标

Le 接口请求

指标: omnilcs_gmlc_le_request_total 类型: 计数器 描述: 来自外部 LCS 客户端的总 Le 接口请求 标签:

  • client_type -- LCS 客户端类型(emergency_services, value_added_services 等)
  • result -- 请求结果:received, success, error, unauthorized

指标: omnilcs_gmlc_le_request_duration 类型: 直方图 描述: Le 请求处理时间(毫秒) 标签:

  • client_type -- LCS 客户端类型

位置报告请求

指标: omnilcs_gmlc_lrr_total 类型: 计数器 描述: 发送给外部客户端的总位置报告请求 标签:

  • session_type -- periodictriggered
  • result -- senterror

会话跟踪

指标: omnilcs_gmlc_session_periodic_active 类型: 测量 描述: 活动周期性位置会话的数量

指标: omnilcs_gmlc_session_triggered_active 类型: 测量 描述: 活动触发/地理围栏位置会话的数量

指标: omnilcs_gmlc_session_total 类型: 计数器 描述: 创建的总延迟会话 标签:

  • type -- periodictriggered

地理围栏事件

指标: omnilcs_gmlc_geofence_trigger_total 类型: 计数器 描述: 触发的总地理围栏事件 标签:

  • event_type -- entering, leavingbeing_inside

InfluxDB 写入

指标: omnilcs_gmlc_influx_write_total 类型: 计数器 描述: 来自 GMLC 会话的总 InfluxDB 位置修正写入 标签:

  • result -- successerror

示例 Prometheus 查询:

# Le 请求速率
rate(omnilcs_gmlc_le_request_total[5m])

# 按类型的延迟会话创建速率
rate(omnilcs_gmlc_session_total[5m])

# 地理围栏触发速率
rate(omnilcs_gmlc_geofence_trigger_total[5m])

# LRR 交付错误比例
sum(rate(omnilcs_gmlc_lrr_total{result="error"}[5m]))
/ sum(rate(omnilcs_gmlc_lrr_total[5m]))

故障排除

Le 请求返回 5012 (UNABLE_TO_COMPLY)

症状: 外部 LCS 客户端对所有 PLR 接收到结果代码 5012。

可能原因:

  • 配置中未启用 GMLC (enabled: false)
  • 客户端不在 authorized_clients 中且 allow_unknown_clientsfalse
  • E-SMLC 引擎无法连接到任何 MME(检查 SL 连接状态)

解决方案:

  1. 验证 config :omnilcs, :gmlc, enabled: true 是否已设置
  2. 检查客户端名称是否与 PLR 中的 LCS-EPS-Client-Name AVP 匹配
  3. 验证 SL 连接是否在仪表板或 SL 页面上建立

周期会话未启动

症状: 带有周期性延迟类型的 PLR 返回 3004 (TOO_BUSY)。

可能原因:

  • 达到 max_periodic_sessions 限制
  • 会话监督员未运行

解决方案:

  1. 检查 GMLC 控制面板页面上的活动会话计数
  2. 如有需要,增加 max_periodic_sessions
  3. 验证 OmniLcs.Gmlc.SessionSupervisor 是否在应用页面中运行

位置修正未出现在 InfluxDB 中

症状: 周期/触发会话正在运行,但 InfluxDB 中没有数据。

可能原因:

  • influx_logging 设置为 false
  • InfluxDB 连接中断
  • 数据库不存在

解决方案:

  1. 验证 GMLC 配置中的 influx_logging: true
  2. 检查 InfluxDB 连接(���元同步状态是一个良好的代理)
  3. 直接查询 InfluxDB: SHOW MEASUREMENTS 应包括 location_fix

地理围栏未触发

症状: 触发会话处于活动状态但从未触发。

可能原因:

  • 区域定义对于定位方法的精度过小
  • 错误的事件类型(例如,当订阅者已经在外部时使用 :leaving
  • 定位方法返回 nil 坐标

解决方案:

  1. 检查定位方法的精度 -- 小区 ID 具有公里级的不确定性,可能对于小地理围栏过于粗糙
  2. 对于较小区域,使用更精确的方法(:ecid:gnss
  3. 验证区域坐标是否正确(纬度/经度顺序)