網絡共享

Tethering 模塊與其他連接的客戶端設備共享 Android 設備的 Internet 連接,這些客戶端設備可以通過 Wi-Fi、USB、藍牙或以太網連接到 Tethering 設備。該模塊包括網絡共享組件(USB、Wi-Fi 接入點、藍牙等)及其依賴項(與網絡共享權利、 IpServeroffloadController的交互)。此模塊是可更新的,這意味著它可以接收正常 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 模塊的功能。