卸載連線功能可將連線流量 (透過 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 的測試。