Offload hardware del tethering

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