網路堆疊設定工具

Android 作業系統包含標準的 Linux 網路公用程式 例如 ifconfigipip6tables 這些公用程式位於系統映像檔上,並會啟用 整個 Linux 網路堆疊在搭載 Android 7.x 以下版本的裝置上, 供應商程式碼可直接呼叫這些二進位檔,這會呈現 下列問題:

  • 由於系統映像檔中的網路公用程式已更新,因此 並提供穩定的實作項目
  • 網路公用程式的範圍相當廣泛,要改進並不容易 並保證可預測的行為

在搭載 Android 8.0 以上版本的裝置上,供應商分區會保持不變 系統分區接收更新時為此,Android 8.0 可讓您定義穩定版的介面 SELinux 限制以將廠商和系統映像檔的依附元件

供應商可以使用平台提供的網路設定公用程式 設定 Linux 網路堆疊,但這些公用程式尚未包含 HIDL 介麵包裝函式。為了定義這類介面,Android 8.0 包含 netutils-wrapper-1.0 工具。

Netutils 包裝函式

netutils 包裝函式公用程式會提供 Linux 的子集 不受系統分區更新影響的網路堆疊設定。 Android 8.0 包含 1.0 版的包裝函式,用來傳遞 與已包裝公用程式相同的引數,安裝在系統分區中 /system/bin,如下所示:

u:object_r:system_file:s0           /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0

符號連結顯示了由 netutils 包裝的網路公用程式 包裝函式,包括:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

如要在 Android 8.0 以上版本中使用這些公用程式,供應商必須實作 請遵守下列規則:

  • 供應商程序不得執行 /system/bin/netutils-wrapper-1.0;嘗試這麼做 則會發生錯誤
  • 必須啟動所有 netutils-wrapper-1.0 包裝的公用程式 透過他們的符號連結例如,變更先前執行過的供應商程式碼 (/system/bin/ip <FOO> <BAR>) 變更為 /system/bin/ip-wrapper-1.0 <FOO> <BAR>
  • 平台不允許在不進行網域轉換的情況下執行包裝函式 SELinux 政策。這項規則不可變更,且會在 Android Compatibility Test Suite (CTS)
  • 直接執行公用程式 (例如 /system/bin/ip <FOO> <BAR>) 來自供應商的流程 也禁止在平台 SELinux 政策中提及。這項規則不得 並在 CTS 中進行測試
  • 凡是需要啟動包裝函式的供應商網域 (程序),都必須將 SELinux 政策的網域轉換規則: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
,瞭解如何調查及移除這項存取權。

Netutils 包裝函式篩選器

包裝公用程式可用於設定 Linux 幾乎所有層面 在網路堆疊中但為了確保能穩定運作 並允許更新系統分區 允許使用指令列引數;也會遭到拒絕

供應商介面和鏈結

包裝函式具有「供應商介面」的概念。這些是介面 通常由廠商程式碼管理,例如行動數據介面。一般而言, 其他類型的介面 (例如 Wi-Fi) 均由 HAL 和 這個架構的重點在於包裝函式會按照名稱 (使用一般 運算式),並允許供應商程式碼在這些運算式上執行多項作業。 目前的供應商介面如下:

  • 名稱結尾為「oem」的介面後面是數字,例如 oem0r_oem1234
  • 目前 SOC 和原始設備製造商 (OEM) 實作中使用的介面,例如 rmnet_data[0-9]

通常由此架構管理的介面名稱 (例如 wlan0) 一律不是供應商介面。

包裝函式具有類似的「供應商鏈」概念。用途 ,且系統也能由名稱辨識。iptables目前, 供應商連鎖店:

  • 先從 oem_ 開始。
  • 用於目前的 SOC 和原始設備製造商 (OEM) 實作,例如從 nm_qcom_

允許的指令

以下列出目前允許的指令。限制的實施方式 一組規則運算式。詳情請參閱 至 system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp

ip

ip 指令的用途是設定 IP 位址、轉送、IPsec 加密 及一些其他網路參數包裝函式允許 以下指令:

  • 從供應商管理的介面中新增及移除 IP 位址。
  • 設定 IPsec 加密。

iptable 和 ip6tables

iptablesip6tables 指令是用來 設定防火牆、封包管理、NAT 和其他每個封包的處理設定。 包裝函式允許下列指令:

  • 新增及刪除供應商連鎖店。
  • 針對參照封包的任何鏈結新增及刪除規則 (-i) 或擷取 (-o) 供應商介面。
  • 從任何其他連鎖店的任一點跳至供應商連鎖店。

ndc

ndc 的用途是與 netd Daemon 通訊 可執行大部分的網路設定包裝函式允許 指令:

  • 建立並銷毀原始設備製造商 (OEM) 網路 (oemXX)。
  • 將供應商管理的介面新增至原始設備製造商 (OEM) 網路。
  • 新增路徑到原始設備製造商 (OEM) 網路的路徑。
  • 啟用或停用全域及供應商介面的 IP 轉送功能。

傑出貢獻者

tc 指令是用來設定流量佇列和形狀 。