網路共用硬體卸載

卸載連線功能可將連線流量 (透過 USB、Wi-Fi) 卸載至硬體,讓裝置節省電力並提升效能。透過在數據機和周邊裝置之間提供直接路徑,繞過應用程式處理器,卸載網路共用流量。

規格

自 Android 8.1 起,裝置可使用網路共用卸載功能,將 IPv4、IPv6 或 IPv4+IPv6 轉送卸載至硬體。

卸載功能不需要卸載所有封包。這個架構能夠處理軟體中的任何封包。控制封包通常會在軟體中處理。由於 IPv4 連接埠會在連線流量和裝置流量之間共用,因此必須在軟體中處理 IPv4 工作階段設定/終止封包 (例如 SYN/SYN+ACK、FIN),核心才能建構流程狀態。這個架構提供控制層和狀態機器。此外,這項服務也會提供上游和下游介面/前置字元資訊給硬體。

如果是 IPv4,硬體會允許 IPv4 網路位址轉譯 (NAT) 工作階段設定封包傳送至 CPU。核心會建立 NAT 項目,而 HAL 實作會觀察架構提供的檔案描述元中的項目,並在硬體中處理這些流程。也就是說,HAL 實作不需要 CAP_NET_*,因為 HAL 會從架構取得 NF_NETLINK_CONNTRACK 插槽。硬體會定期將目前有效流程的 NAT 狀態更新傳送至架構,架構則會重新整理對應的核心連線追蹤狀態項目。

如果是 IPv6,架構會編寫一份 IPv6 目的地前置字元清單,流量不得卸載至這些前置字元。其他所有連線封包都可以卸載。

為進行資料用量會計,NetworkStatsService 資料用量輪詢會導致架構向硬體要求流量統計資料。架構也會透過 HAL 將資料用量限制傳達給硬體。

硬體需求

如要實作卸載連線功能,硬體必須能夠在數據機和 Wi-Fi/USB 之間轉送 IP 封包,而不會透過主要處理器傳送流量。

實作

如要啟用卸載網路共用功能,您必須實作下列兩個 HAL:設定 HAL (IOffloadConfig) 和控制 HAL (IOffloadControl)。

設定 HAL:IOffloadConfig

IOffloadConfig HAL 會啟動卸載網路共用實作。架構會提供預先連線的 NF_NETLINK_CONNTRACK 插座給 HAL 實作項目,實作項目可使用這些插座觀察 IPv4 流程。只有轉送的流程必須加速。

控制 HAL:IOffloadControl

IOffloadControl HAL 可控制卸載實作作業。必須實作下列方法:

  • 開始/停止卸載硬體:使用 initOffload/stopOffload,並使用 setLocalPrefixes 免除本機 IP 位址或其他網路的卸載作業。
  • 設定上游介面、IPv4 位址和 IPv6 閘道:使用 setUpstreamParameters,並透過 addDownstream/removeDownstream 設定下游 IP 位址範圍。
  • 資料用量會計:使用 getForwardedStats/setDataLimit

供應商 HAL 也必須透過 ITetheringOffloadCallback 介面傳送回呼,將下列資訊告知架構:

  • 非同步事件,例如開始和停止卸載 (OffloadCallbackEvent)
  • NAT 超時更新,必須定期傳送,指出特定 IPv4 流程包含流量,且不得由核心關閉

驗證

如要驗證網際網路共用卸載的實作情形,請使用手動或自動化測試,確認網際網路共用和 Wi-Fi 無線基地台功能是否正常運作。供應商測試套件 (VTS) 包含繫結卸載 HAL 的測試。