Il trasferimento del carico del tethering consente ai dispositivi di risparmiare energia e migliorare le prestazioni trasferendo il traffico di tethering (tramite USB, Wi-Fi) all'hardware. Il traffico di 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 l'offload del tethering per eseguire l'offload dell'inoltro 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 nel software. I pacchetti di controllo vengono in genere elaborati nel software. Poiché le porte IPv4 sono condivise tra il traffico tethering e il traffico del dispositivo, i pacchetti di configurazione/interruzione della sessione IPv4 (ad esempio SYN/SYN+ACK, FIN) devono essere elaborati nel software in modo che il kernel possa costruire lo stato del flusso. Il framework fornisce il piano di controllo e le macchine statali. Fornisce inoltre all'hardware informazioni su interfacce/prefissi upstream e downstream.
Per IPv4, l'hardware consente ai pacchetti di configurazione della sessione Network Address Translation (NAT) IPv4 di raggiungere la CPU. Il kernel crea voci NAT e l'implementazione HAL
osserva le voci dai descrittori di file forniti dal framework
e gestisce questi flussi nell'hardware. Ciò significa che l'implementazione HAL non
richiede CAP_NET_*
perché HAL apre i 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 di stato di monitoraggio della connessione del kernel corrispondenti.
Per IPv6, il framework programma un elenco di prefissi di destinazione IPv6 a cui il traffico non deve essere scaricato. Tutti gli altri pacchetti tethered possono essere scaricati.
Per la contabilizzazione dell'utilizzo dei dati, i sondaggi sull'utilizzo dei dati NetworkStatsService
fanno sì che il framework richieda statistiche sul traffico all'hardware. Il framework comunica anche
i limiti di utilizzo dei dati all'hardware tramite l'HAL.
Requisiti hardware
Per implementare l'offload del tethering, l'hardware deve essere in grado di inoltrare 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 sia un HAL di configurazione (IOffloadConfig
) sia un HAL di controllo (IOffloadControl
).
Config HAL: IOffloadConfig
L'IOffloadConfig
HAL avvia l'implementazione dell'offload del tethering. Il framework fornisce l'implementazione HAL con socket NF_NETLINK_CONNTRACK
pre-connessi che l'implementazione può utilizzare per osservare i flussi IPv4. Solo i flussi inoltrati devono essere
accelerati.
Control HAL: IOffloadControl
L'IOffloadControl
HAL controlla l'implementazione dell'offload. Devono essere implementati i seguenti metodi:
- Avvia/interrompi l'offload hardware: utilizza
initOffload/stopOffload
ed esenta gli indirizzi IP locali o altre reti dall'offload consetLocalPrefixes
. - Imposta l'interfaccia upstream, l'indirizzo IPv4 e i gateway IPv6: utilizza
setUpstreamParameters
e configura gli intervalli di indirizzi IP downstream conaddDownstream/removeDownstream
. - Contabilizzazione 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 dell'offload (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 dell'offload del tethering, utilizza test manuali o automatizzati per verificare che il tethering e l'hotspot Wi-Fi funzionino come previsto. La Vendor Test Suite (VTS) contiene test per le HAL di offload del tethering.