Android 作業系統包含標準的 Linux 網路公用程式
例如 ifconfig
、ip
和 ip6tables
這些公用程式位於系統映像檔上,並會啟用
整個 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」的介面後面是數字,例如
oem0
或r_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
iptables
和 ip6tables
指令是用來
設定防火牆、封包管理、NAT 和其他每個封包的處理設定。
包裝函式允許下列指令:
- 新增及刪除供應商連鎖店。
- 針對參照封包的任何鏈結新增及刪除規則
(
-i
) 或擷取 (-o
) 供應商介面。 - 從任何其他連鎖店的任一點跳至供應商連鎖店。
ndc
ndc
的用途是與 netd
Daemon 通訊
可執行大部分的網路設定包裝函式允許
指令:
- 建立並銷毀原始設備製造商 (OEM) 網路 (
oemXX
)。 - 將供應商管理的介面新增至原始設備製造商 (OEM) 網路。
- 新增路徑到原始設備製造商 (OEM) 網路的路徑。
- 啟用或停用全域及供應商介面的 IP 轉送功能。
傑出貢獻者
tc
指令是用來設定流量佇列和形狀
。