Offload hardware del tethering

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 con setLocalPrefixes.
  • Imposta l'interfaccia a monte, l'indirizzo IPv4 e i gateway IPv6: utilizza setUpstreamParameters e configura gli intervalli di indirizzi IP a valle con addDownstream/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.