Rmnet 驱动程序¶
1. 简介¶
rmnet 驱动程序用于支持多路复用和聚合协议 (MAP)。 此协议被所有最近使用 Qualcomm Technologies, Inc. 调制解调器的芯片组使用。
此驱动程序可用于在 IP 模式下注册到任何物理网络设备。 物理传输包括 USB、HSIC、PCIe 和 IP 加速器。
多路复用允许创建逻辑网络设备(rmnet 设备)来处理多个私有数据网络 (PDN),如默认互联网、网络共享、多媒体消息服务 (MMS) 或 IP 多媒体子系统 (IMS)。 硬件发送带有 MAP 标头的包到 rmnet。 基于多路复用器 ID,rmnet 在移除 MAP 标头后路由到相应的 PDN。
需要聚合来实现高数据速率。 这涉及到硬件发送聚合的 MAP 帧束。 rmnet 驱动程序将解聚合这些 MAP 帧并将它们发送到相应的 PDN。
2. 包格式¶
MAP 包 v1(数据/控制)
MAP 标头字段采用大端格式。
包格式
Bit 0 1 2-7 8-15 16-31
Function Command / Data Reserved Pad Multiplexer ID Payload length
Bit 32-x
Function Raw bytes
命令 (1)/数据 (0) 位值用于指示包是 MAP 命令还是数据包。 命令包用于传输级流量控制。 数据包是标准 IP 包。
保留位在发送时必须为零,接收时忽略。
填充是要附加到有效负载的字节数,以确保 4 字节对齐。
多路复用器 ID 用于指示数据必须发送到的 PDN。
有效负载长度包括填充长度,但不包括 MAP 标头长度。
Map 包 v4(数据/控制)
MAP 标头字段采用大端格式。
包格式
Bit 0 1 2-7 8-15 16-31
Function Command / Data Reserved Pad Multiplexer ID Payload length
Bit 32-(x-33) (x-32)-x
Function Raw bytes Checksum offload header
命令 (1)/数据 (0) 位值用于指示包是 MAP 命令还是数据包。 命令包用于传输级流量控制。 数据包是标准 IP 包。
保留位在发送时必须为零,接收时忽略。
填充是要附加到有效负载的字节数,以确保 4 字节对齐。
多路复用器 ID 用于指示数据必须发送到的 PDN。
有效负载长度包括填充长度,但不包括 MAP 标头长度。
校验和卸载标头,具有关于硬件完成的校验和处理的信息。校验和卸载标头字段采用大端格式。
包格式
Bit 0-14 15 16-31
Function Reserved Valid Checksum start offset
Bit 31-47 48-64
Function Checksum length Checksum value
保留位在发送时必须为零,接收时忽略。
有效位指示部分校验和是否已计算并且有效。 如果有效,则设置为 1。 否则设置为 0。
填充是要附加到有效负载的字节数,以确保 4 字节对齐。
校验和起始偏移量,指示从 IP 标头开始的字节偏移量,调制解调器从该偏移量计算校验和。
校验和长度是从 CKSUM_START_OFFSET 开始的字节长度,计算校验和。
校验和值,指示计算出的校验和。
MAP 包 v5(数据/控制)
MAP 标头字段采用大端格式。
包格式
Bit 0 1 2-7 8-15 16-31
Function Command / Data Next header Pad Multiplexer ID Payload length
Bit 32-x
Function Raw bytes
命令 (1)/数据 (0) 位值用于指示包是 MAP 命令还是数据包。 命令包用于传输级流量控制。 数据包是标准 IP 包。
下一个标头用于指示是否存在另一个标头,目前仅限于校验和标头。
填充是要附加到有效负载的字节数,以确保 4 字节对齐。
多路复用器 ID 用于指示数据必须发送到的 PDN。
有效负载长度包括填充长度,但不包括 MAP 标头长度。
校验和卸载标头 v5
校验和卸载标头字段采用大端格式。
位 0 - 6 7 8-15 16-31 功能 标头类型 下一个标头 校验和有效 保留
标头类型用于指示标头的类型,这通常设置为 CHECKSUM
标头类型 = ========================================== 0 保留 1 保留 2 校验和标头
校验和有效用于指示标头校验和是否有效。 值 1 表示在此包上计算了校验和并且有效,值 0 表示计算出的包校验和无效。
保留位在发送时必须为零,接收时忽略。
MAP 包 v1/v5(命令特定)
Bit 0 1 2-7 8 - 15 16 - 31 Function Command Reserved Pad Multiplexer ID Payload length Bit 32 - 39 40 - 45 46 - 47 48 - 63 Function Command name Reserved Command Type Reserved Bit 64 - 95 Function Transaction ID Bit 96 - 127 Function Command data
命令 1 表示禁用流量,而 2 表示启用流量
命令类型
0 |
用于 MAP 命令请求 |
1 |
用于确认收到命令 |
2 |
用于不支持的命令 |
3 |
用于命令处理期间的错误 |
聚合
聚合是在单个线性 skb 中传递给 rmnet 的多个 MAP 包(可以是数据或命令)。 rmnet 将处理各个包,并根据需要确认 MAP 命令或将 IP 包传递到网络堆栈
MAP 标头|IP 包|可选填充|MAP 标头|IP 包|可选填充....
MAP 标头|IP 包|可选填充|MAP 标头|命令包|可选填充...
3. 用户空间配置¶
rmnet 用户空间配置通过使用 iproute2 的 netlink 完成 https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/
该驱动程序使用 rtnl_link_ops 进行通信。