網絡堆棧

Network Stack 是一個可更新的 Mainline 模塊,可確保 Android 能夠適應不斷發展的網絡標準並允許與新實現的互操作性。例如,對強制門戶檢測和登錄代碼的更新允許 Android 與不斷變化的強制門戶模型保持同步,對 APF 的更新允許 Android 在新型數據包變得普遍時節省 Wi-Fi 的電量。

包含的組件

網絡堆棧模塊包含以下組件。在使用該模塊的設備上,這些服務被移動到不同的進程,並通過穩定的 AIDL 接口訪問。

  • 知識產權服務。 IpClient (以前稱為IpManager )是負責 IP 層配置和維護的組件。在Android 9中,它已經被藍牙等組件跨進程使用,Wi-Fi等組件在進程內使用。 DhcpClient從 DHCP 服務器獲取 IP 地址,以便將它們分配給接口。

  • 網絡監視器。 NetworkMonitor組件在連接到新網絡或網絡故障時、檢測強制門戶時以及驗證網絡時測試 Internet 可達性。

  • 強制門戶登錄應用程序。一個預裝的應用程序,負責管理強制門戶上的登錄。自 Android 5.0 以來,這是一個單獨的應用程序,但它與NetworkMonitor交互,將一些用戶選擇轉發給系統。

受影響的路徑

下面列出了通過重構移動到網絡堆棧模塊的路徑。

  • 知識產權服務。frameworks/base/services/net/java/android/net/中:

    • apf
    • dhcp
    • ip
    • netlink
    • util (部分)
  • 強制門戶檢測和登錄。frameworks/base/

    • core/java/android/net/captiveportal/
    • services/core/java/com/android/server/connectivity/NetworkMonitor.java
    • packages/CaptivePortalLogin/*

移動代碼的新位置位於packages/modules/NetworkStackpackages/modules/CaptivePortalLogin和其他一些共享位置。上述路徑指的是文件在為 Mainline 移動之前的位置。 packages/modules/NetworkStackpackages/modules/CaptivePortalLogin中的文件是 Mainline 模塊的一部分,不能修改。

包裝格式

Network Stack 模塊包含以下 APK 格式的組件:

  • 知識產權服務
  • 強制門戶登錄 ( com.google.android.captiveportallogin )

該模塊附帶有 Network Stack Permission Config 模塊,這是一個預安裝的 APK 文件,定義了 Network Stack 組件的必要權限。

依賴關係

網絡堆棧模塊依賴於以下內容:

  • 系統服務器中的特權@hide 方法(例如,在IConnectivityManager.aidl中)。這些 API 已成為@SystemApi並受到適當保護,以便 Mainline 模塊可以訪問它們,但其他特權應用程序無法訪問它們(例如,使用新的簽名權限)。

  • 將 IPC 綁定到netd中定義的INetd.aidl 。此接口已轉換為穩定的 AIDL,並接受一致性測試。