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. 包格式

  1. 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 標頭長度。

  1. 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 開始的位元組長度,計算校驗和。

校驗和值,指示計算出的校驗和。

  1. 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 標頭長度。

  1. 校驗和解除安裝標頭 v5

校驗和解除安裝標頭欄位採用大端格式。

位 0 - 6 7 8-15 16-31 功能 標頭型別 下一個標頭 校驗和有效 保留

標頭型別用於指示標頭的型別,這通常設定為 CHECKSUM

標頭型別 = ========================================== 0 保留 1 保留 2 校驗和標頭

校驗和有效用於指示標頭校驗和是否有效。 值 1 表示在此包上計算了校驗和並且有效,值 0 表示計算出的包校驗和無效。

保留位在傳送時必須為零,接收時忽略。

  1. 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

用於命令處理期間的錯誤

  1. 聚合

聚合是在單個線性 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 進行通訊。