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 功能 头部类型 下一个头部 校验和有效 保留
头部类型用于指示头部类型,通常设置为校验和。
头部类型 = ========================================== 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 将处理各个报文,并根据需要 ACK MAP 命令或将 IP 报文传递到网络堆栈
MAP 头部|IP 报文|可选填充|MAP 头部|IP 报文|可选填充....
MAP 头部|IP 报文|可选填充|MAP 头部|命令报文|可选填充...
3. 用户空间配置¶
rmnet 用户空间配置通过 netlink 使用 iproute2 完成 https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/
驱动程序使用 rtnl_link_ops 进行通信。