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 進行通訊。