Tethering 模塊與其他連接的客戶端設備共享 Android 設備的 Internet 連接,這些客戶端設備可以通過 Wi-Fi、USB、藍牙或以太網連接到 Tethering 設備。該模塊包括網絡共享組件(USB、Wi-Fi 接入點、藍牙等)及其依賴項(與網絡共享權利、 IpServer
和offloadController
的交互)。此模塊是可更新的,這意味著它可以接收正常 Android 發布週期之外的功能更新。
Tethering 模塊使整個 Android 生態系統中的 OEM 能夠使用具有以下優勢的單一標準參考實現。
最終用戶在 Android 設備上獲得一致的體驗,並通過模塊更新修復互操作性問題。
OEM 可以滿足運營商的要求,同時還可以降低個性化定制的成本(因為他們不需要以不同的方式對相同的要求進行不同的實現)。
eBPF 網絡共享卸載
為了在不回复硬件卸載的情況下提供高速網絡共享,Android 11 提供了一種名為 eBPF 網絡共享卸載的網絡共享軟件卸載解決方案,用於 IPv6 下載(流量流向網絡設備)。
從 Android 12 開始,此功能(包括 eBPF 程序代碼)完全由 Tethering 模塊提供,該模塊支持以下功能:
- IPv6 下載(流向系留設備的流量)
- IPv6 上傳(來自連接設備的流量)
- IPv4 TCP/UDP 上傳和下游(流量流入/流出綁定設備)
- eBPF 卸載
此功能默認啟用,用戶可以通過 RRO 將config_tether_enable_bpf_offload
配置覆蓋為 false。有關詳細信息,請參閱自定義。
IPv4 和 IPv6 支持
Tethering 模塊支持 IPv4 和 IPv6 雙協議棧。
對於 IPv4 網絡,模塊設置網絡地址轉換 (NAT),並採用動態主機配置協議 (DHCP) 進行 IP 地址分配。
對於 IPv6 網絡,模塊採用 IPv6 無狀態地址自動配置 (SLAAC) 進行 IP 地址分配。
模塊邊界
對於 Android 12 及更高版本, packages/modules/Connectivity
下的所有文件/文件夾都在 Tethering 模塊範圍內。
對於 Android 11 及更低版本,Tethering 模塊在packages/modules/Tethering
中有以下 Android 10 文件。
-
frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
-
frameworks/base/services/core/java/com/android/server/connectivity/tethering/
-
frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
-
frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
-
frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
-
frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
-
frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
-
frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
-
frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
-
frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
-
frameworks/base/core/java/android/os/INetworkManagementService.aidl
-
frameworks/base/core/java/android/bluetooth/BluetoothPan.java
-
frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
-
packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
-
packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java
模塊格式
Tethering 模塊 ( com.google.android.tethering
) 採用 APEX 格式,可用於運行 Android 11 或更高版本的設備。
包括連接服務
從 Android 12 開始,實現 L3+ 連接的中心組件的ConnectivityService
代碼被添加到 Tethering APEX。網絡共享的範圍擴展到連接模塊。
模塊依賴
Tethering 模塊具有以下依賴項:
- 系統服務器中的公共和系統 API 方法
- 穩定的 AIDL IPC 與系統服務器接口
tetheroffload
HIDL(在hardware/interfaces/tetheroffload/
中定義)- DHCP 服務器(網絡堆棧模塊的一部分)
定制
Tethering 模塊不支持自定義。
測試
Android 兼容性測試套件 (CTS) 驗證 Tethering 模塊的功能。