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/stopOffloaded esenta gli indirizzi IP locali o altre reti dall'offload consetLocalPrefixes. - Imposta l'interfaccia upstream, l'indirizzo IPv4 e i gateway IPv6: utilizza
setUpstreamParameterse 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.