Il trasferimento del carico del tethering consente ai dispositivi di risparmiare energia e migliorare le prestazioni trasferendo il traffico del tethering (tramite USB, Wi-Fi) all'hardware. Il traffico del tethering viene scaricato fornendo un percorso diretto tra il modem e le periferiche, bypassando il processore dell'app.
Specifiche
A partire da Android 8.1, i dispositivi possono utilizzare il trasferimento tramite tethering per eseguire il trasferimento del forwarding IPv4, IPv6 o IPv4+IPv6 all'hardware.
La funzionalità di offload non deve scaricare tutti i pacchetti. Il framework è in grado di gestire qualsiasi pacchetto in software. I pacchetti di controllo vengono in genere elaborati in software. Poiché le porte IPv4 sono condivise tra il traffico tethered e il traffico del dispositivo, i pacchetti di configurazione/disattivazione della sessione IPv4 (ad es. SYN/SYN+ACK, FIN) devono essere elaborati in software in modo che il kernel possa costruire lo stato del flusso. Il framework fornisce il piano di controllo e le macchine dello stato. Fornisce inoltre all'hardware informazioni su interfacce/prefisso up e down.
Per IPv4, l'hardware consente ai pacchetti di configurazione della sessione di Network Address Translation (NAT) IPv4 di raggiungere la CPU. Il kernel crea voci NAT e l'implementazione HAL osserva le voci dei descrittori file forniti dal framework e gestisce questi flussi in hardware. Ciò significa che l'implementazione di HAL non richiede CAP_NET_*
perché HAL apre socket NF_NETLINK_CONNTRACK
dal framework. Periodicamente, l'hardware invia aggiornamenti dello stato NAT per i flussi attualmente attivi al framework, che aggiorna le voci dello stato del monitoraggio delle connessioni del kernel corrispondenti.
Per IPv6, il framework programma un elenco di prefissi di destinazione IPv6 a cui non deve essere eseguito il offload del traffico. Tutti gli altri pacchetti tethered possono essere trasferiti.
Per la contabilizzazione dell'utilizzo dei dati, i sondaggi sull'utilizzo dei dati NetworkStatsService
inducono il framework a richiedere le statistiche sul traffico dall'hardware. Il framework inoltre
comunica i limiti di utilizzo dei dati all'hardware tramite l'HAL.
Requisiti hardware
Per implementare il trasferimento del tethering, l'hardware deve essere in grado di inoltrare i pacchetti IP tra il modem e il Wi-Fi/USB senza inviare il traffico tramite il processore principale.
Implementazione
Per attivare la funzionalità di offload del tethering, devi implementare i due seguenti
HAL, sia di configurazione (IOffloadConfig
) che di controllo (IOffloadControl
).
HAL di configurazione: IOffloadConfig
L'HAL
IOffloadConfig
avvia l'implementazione del trasferimento dati tramite tethering. Il framework fornisce all'implementazione HAL socket NF_NETLINK_CONNTRACK
preconnessi che l'implementazione può utilizzare per osservare i flussi IPv4. Solo i flussi inoltrati devono essere accelerati.
HAL di controllo: IOffloadControl
L'HAL
IOffloadControl
controlla l'implementazione dell'offload. È necessario implementare i seguenti metodi:
- Avvia/interrompi l'hardware di offload: utilizza
initOffload/stopOffload
ed esenta gli indirizzi IP locali o altre reti dall'offload consetLocalPrefixes
. - Imposta l'interfaccia a monte, l'indirizzo IPv4 e i gateway IPv6: utilizza
setUpstreamParameters
e configura gli intervalli di indirizzi IP a valle conaddDownstream/removeDownstream
. - Contabilità dell'utilizzo dei dati: utilizza
getForwardedStats/setDataLimit
.
L'HAL del fornitore deve anche inviare callback tramite l'interfaccia ITetheringOffloadCallback
, che informa il framework di:
- Eventi asincroni come l'avvio e l'arresto dello sgravio (OffloadCallbackEvent)
- Aggiornamenti del timeout NAT, che devono essere inviati periodicamente per indicare che un flusso IPv4 specifico contiene traffico e non deve essere chiuso dal kernel
Convalida
Per convalidare l'implementazione del trasferimento tramite tethering, utilizza test manuali o automatici per verificare che il tethering e l'hotspot Wi-Fi funzionino come previsto. La Vendor Test Suite (VTS) contiene test per gli HAL di offload del tethering.