裝置可透過硬體卸載共用網路流量 (透過 USB、Wi-Fi),進而節省電力並提升效能。透過在數據機和周邊裝置之間提供直接路徑,可略過應用程式處理器,藉此卸載 Tethering 流量。
規格
自 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 會啟動 Tethering Offload 實作。此架構會為 HAL 實作提供預先連線的 NF_NETLINK_CONNTRACK
通訊端,讓實作程序可用於觀察 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) 包含用於測試 Tethering Offload HAL 的測試。