(PCO) 操作的 MB 协议配置选项
概述
(PCO) 的协议配置选项的目的是将与数据包数据协议关联的外部网络协议选项传输 (PDP) 上下文激活。 PCO 值的 Windows NDIS 定义通常是泛型的,以便将来从调制解调器和网络接收完整的 PCO 值。 但是,从Windows 10版本 1709 开始,某些调制解调器只能将特定于操作员的 PCO 元素传递给 OS。 本主题定义当前运算符专用 PCO 实现的行为。
流
在三种情况下,PCO 值将传递给主机:
- 当激活的连接上到达新的 PCO 值时
- 当应用或服务从调制解调器查询最新的 PCO 值时
- 首次桥接或激活连接且调制解调器中已存在 PCO 值时
对于第一种方案,调制解调器应向 OS 发送 一条NDIS_STATUS_WWAN_PCO_STATUS 通知,指示每当从网络收到新的 PCO 值时,新的 PCO 值会发生更改,并使用相应的 NDIS 端口号来表示相应的 PDN。 为了避免不必要的耗尽电池,调制解调器应避免干扰通知,如 选择性挂起和连接待机的调制解调器行为中所述。
对于第二种情况,当应用或服务在激活的 PDN 连接上从调制解调器查询 PCO 值时,主机将向调制解调器发送 OID_WWAN_PCO 查询请求,以读取调制解调器中的最新缓存 PCO 值。
对于第三种情况,当主机上激活或桥接连接时,当主机请求的已激活或桥接连接的调制解调器中已存在 PCO 值时,调制解调器应发送 NDIS_STATUS_WWAN_PCO_STATUS 通知。 通知应从 PDN 的相应 NDIS 端口号传递。
下图显示了方案流:
选择性挂起和连接待机的调制解调器行为
启用选择性挂起后,调制解调器可以在从网络接收 PCO 数据结构时通知 OS。 但是,调制解调器应避免不必要的设备唤醒。 否则,来自网络的干扰 PCO 通知会频繁唤醒设备并不必要的耗尽电池。
启用连接待机后,调制解调器不应在从网络接收 PCO 数据结构时通知 OS,因为它不仅会唤醒设备,而且还会唤醒 OS,这是不必要的。 相反,调制解调器应缓存数据结构中的所有最新 PCO 元素,并在 OS 退出连接待机后通知 OS。 对于 MBIM 调制解调器,它应缓存所有 PCO 数据结构,并且仅在主机订阅后向 OS 发送 PCO 通知。 当系统电源在退出连接待机后已恢复为满电时,将使用 MBIM_CID_DEVICE_SERVICE_SUBSCRIBE_LIST CID 完成此操作。
基于 PCO 值重置调制解调器
根据从网络接收的 PCO 值,调制解调器将在以下情况下重置:
- 用户从网络收到 PCO = 5 后完成了自我激活。 新的 PCO 值 (3、0 或任何移动运营商应用可以识别) 将发送到 OS,操作系统会将它传递给移动运营商应用。
- 收到 PCO = 3 后,用户向其帐户添加了更多额度。 新的 PCO 值 (0,或者移动运营商应用可以识别的任何内容,) 将发送到 OS,操作系统会将它传递给移动运营商应用。
主机不知道正在重置调制解调器,因此不会停用来自主机的已激活连接,并且调制解调器应在重置后自动重新建立与这些 PDN 的连接。 建立连接并从网络接收新的传入 PCO 值后,调制解调器将向主机提供未经请求 的NDIS_STATUS_WWAN_PCO_STATUS 通知。
下图演示了其中一种情况发生时调制解调器的重置流,其中 Verizon Wireless 作为示例 MO:
调制解调器的 NDIS 接口
若要查询从运营商网络接收的调制解调器的 PCO 值的状态和有效负载,请参阅 OID_WWAN_PCO。 OID_WWAN_PCO 使用 NDIS_WWAN_PCO_STATUS 结构,该结构又包含表示来自网络的 PCO 信息有效负载 的WWAN_PCO_VALUE 结构。
有关调制解调器微型端口驱动程序发送的状态通知,以通知操作系统调制解调器中的当前 PCO 状态,请参阅 NDIS_STATUS_WWAN_PCO_STATUS。
将 MB CID 连接到调制解调器
服务 = MBB_UUID_BASIC_CONNECT_EXT_CONSTANT
服务 UUID = 3d01dcc5-fef5-4d05-0d3a-bef7058e9aaf
为 PCO 定义了以下 CID:
CID | 命令代码 | 最低操作系统版本 |
---|---|---|
MBIM_CID_PCO | 9 | Windows 10 版本 1709 |
MBIM_CID_PCO
此命令用于查询从移动运营商网络在调制解调器中缓存的 PCO 数据。
查询
InformationBuffer 包含 一个MBIM_PCO_VALUE ,其中唯一的相关字段是 SessionId。 SessionId 保留供将来使用,在 Windows 10 版本 1709 中始终为 0。 查询中的 SessionId 指示函数将返回哪个 IP 数据流的 PCO 值。
设置
不适用。
未经请求的事件
未经请求的事件包含MBIM_PCO_VALUE,并在激活的连接上到达新的 PCO 值时发送。
参数
Operation | 设置 | 查询 | 通知 |
---|---|---|---|
命令 | 不适用 | MBIM_PCO_VALUE | 不适用 |
响应 | 不适用 | MBIM_PCO_VALUE | MBIM_PCO_VALUE |
数据结构
MBIM_PCO_TYPE
类型 | 值 | 说明 |
---|---|---|
MBIMPcoTypeComplete | 0 | 指定完整的 PCO 结构将按从网络接收的方式传递,标头以八进制形式真实反映 3GPP TS24.008 规范中定义的 PCO 结构的八进制数 3 的协议。 |
MBIMPcoTypePartial | 1 | 指定调制解调器将仅传递从网络接收的 PCO 结构的子集。 标头与 3GPP TS24.008 规范中定义的 PCO 结构匹配,但八进制数 3 的“配置协议”可能无效。 |
MBIM-PCO-TYPE
Offset | 大小 | 字段 | 类型 | 说明 |
---|---|---|---|---|
0 | 4 | SessionId | UINT32 | 查询中的 SessionId 指示函数将返回哪个 IP 数据流的 PCO 值。 |
4 | 4 | PcoDataSize | UINT32 | PcoData 的长度,从 0 到 256。 查询中的此值将为 0。 |
8 | 4 | PcoDataType | UINT32 | PCO 数据类型。 有关详细信息,请参阅 MBIM_PCO_TYPE。 |
12 | PcoDataBuffer | DATABUFFER | 3GPP TS24.008 规范中的 PCO 结构。 |
状态代码
此 CID 仅使用泛型状态代码。
硬件实验室工具包 (HLK) 测试
请参阅 安装 HLK 的步骤。
在 HLK Studio 中,连接到设备手机网络调制解调器驱动程序并运行测试: TestPco。