Il sistema operativo Android contiene utilità di rete standard di Linux
ad esempio ifconfig
, ip
e ip6tables
.
Queste utilità risiedono nell'immagine di sistema e consentono
l'intero stack di networking Linux. Sui dispositivi con Android 7.x e versioni precedenti,
del fornitore può chiamare direttamente questi file binari, presentando
i seguenti problemi:
- Poiché le utilità di rete vengono aggiornate nell'immagine di sistema, offrono un'implementazione stabile.
- L'ambito delle utilità di rete è così ampio che è difficile far evolvere dell'immagine di sistema, garantendo un comportamento prevedibile.
Sui dispositivi con Android 8.0 e versioni successive, la partizione del fornitore rimane la stessa mentre la partizione di sistema riceve un aggiornamento. A questo scopo, Android 8.0 consente di definire un'interfaccia stabile con il controllo delle versioni, utilizzando al contempo Restrizioni SELinux per mantenere l'interdipendenza tra fornitore e immagine di sistema noto insieme.
I fornitori possono utilizzare le utilità di configurazione di rete fornite dalla piattaforma
configurare lo stack di rete Linux, ma queste utilità non includono ancora
Wrapper interfaccia HIDL. Per definire questa interfaccia, Android 8.0 include
Strumento netutils-wrapper-1.0
.
Wrapper Netutils
L'utilità wrapper netutils
fornisce un sottoinsieme
configurazione dello stack di rete non interessata dagli aggiornamenti delle partizioni di sistema.
Android 8.0 contiene la versione 1.0 dei wrapper, che consente di passare
gli stessi argomenti delle utilità sottoposte a wrapping, installate nella partizione di sistema
/system/bin
come segue:
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
I link simbolici mostrano le utilità di rete sottoposte a wrapping da netutils
che include:
ip
iptables
ip6tables
ndc
tc
Per utilizzare queste utilità in Android 8.0 e versioni successive, le implementazioni dei fornitori devono rispettare le seguenti regole:
- I processi del fornitore non devono essere eseguiti
/system/bin/netutils-wrapper-1.0
direttamente; tenta di farlo genera un errore. - Tutte le utilità sottoposte a wrapping da
netutils-wrapper-1.0
devono essere avviate usando i loro collegamenti simbolici. Ad esempio, modifica il codice del fornitore che aveva eseguito questa operazione in precedenza (/system/bin/ip <FOO> <BAR>
) per/system/bin/ip-wrapper-1.0 <FOO> <BAR>
. - L'esecuzione di wrapper senza transizione del dominio è vietata nella piattaforma criterio SELinux. Questa regola non deve essere modificata e viene verificata in base al Suite di test di compatibilità Android (CTS).
- Esecuzione diretta delle utilità (ad es.
/system/bin/ip <FOO> <BAR>
) dai processi del fornitore è vietato anche nei criteri per la piattaforma SELinux. Questa regola non deve essere è cambiato e viene testato in base a CTS. - Qualsiasi dominio (processo) del fornitore che deve avviare un wrapper deve aggiungere
seguente regola di transizione del dominio nel criterio SELinux:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
.
Filtri wrapper Netutils
Le utilità con wrapping possono essere utilizzate per configurare quasi tutti gli aspetti dell'ambiente Linux stack di networking. Tuttavia, per garantire che sia possibile mantenere una a riga di comando e consentire gli aggiornamenti della partizione di sistema, solo alcune combinazioni di argomenti della riga di comando sono consentiti; vengono rifiutati tutti gli altri.
Interfacce e catene dei fornitori
Il wrapper presenta il concetto di interfacce dei fornitori. Queste sono le interfacce di solito gestite dal codice del fornitore, come le interfacce dei dati cellulari. In genere, altri tipi di interfacce (come il Wi-Fi) sono gestiti dagli HAL il modello di machine learning. Il wrapper riconosce le interfacce del fornitore per nome (utilizzando una ) e consente al codice del fornitore di eseguire molte operazioni. Attualmente, le interfacce dei fornitori sono:
- Interfacce i cui nomi terminano con "oem" seguito da un numero, ad esempio
oem0
or_oem1234
. - Le interfacce utilizzate dalle attuali implementazioni SOC e OEM, come
rmnet_data[0-9]
.
I nomi delle interfacce generalmente gestite dal framework (come
wlan0
) non sono mai interfacce del fornitore.
Il wrapper ha un concetto simile di catene di fornitori. Vengono utilizzate
nei comandi iptables
e sono riconosciuti anche per nome. Al momento,
catene di fornitori:
- Inizia con
oem_
. - Vengono utilizzati dalle attuali implementazioni SOC e OEM, ad esempio le catene che iniziano tra
nm_
oqcom_
.
Comandi consentiti
Di seguito sono elencati i comandi attualmente consentiti. Le limitazioni vengono implementate tramite
un insieme di espressioni regolari sulle righe di comando eseguite. Per maggiori dettagli, consulta
a system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
.
ip
Il comando ip
viene utilizzato per configurare indirizzi IP, routing, IPsec
crittografia e una serie di altri parametri di rete. Il wrapper consente
seguenti comandi:
- Aggiungi e rimuovi indirizzi IP dalle interfacce gestite dal fornitore.
- Configura la crittografia IPsec.
iptables e ip6tables
I comandi iptables
e ip6tables
vengono utilizzati
configurare firewall, gestione dei pacchetti, NAT e altre elaborazioni per pacchetto.
Il wrapper consente i seguenti comandi:
- Aggiungere ed eliminare catene di fornitori.
- Aggiungere ed eliminare regole in qualsiasi catena che fa riferimento ai pacchetti in
(
-i
) o fuori (-o
) dall'interfaccia di un fornitore. - Passa a una catena di fornitori da qualsiasi punto di qualsiasi altra catena.
ndc
ndc
viene utilizzato per comunicare con il daemon netd
che
esegue la maggior parte delle configurazioni di rete su Android. Il wrapper consente:
:
- Crea ed elimina le reti OEM (
oemXX
). - Aggiungi interfacce gestite dal fornitore alle reti OEM.
- Aggiungi percorsi per le reti OEM.
- Abilita o disabilita l'IP forwarding a livello globale e sulle interfacce dei fornitori.
TC
Il comando tc
viene utilizzato per configurare l'accodamento e la struttura del traffico
sulle interfacce dei fornitori.