Strumenti di configurazione dello stack di rete

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).
di Gemini Advanced.

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 o r_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_ o qcom_.

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.