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 di stato. Fornisce inoltre all'hardware informazioni su interfacce/prefisso up- e downstream.
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
gli attuali flussi attivi al framework, che aggiorna le voci dello stato di 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.