Descarga de hardware para tethering

O descarregamento de tethering permite que os dispositivos economizem energia e melhorem o desempenho ao descarregar o tráfego de tethering (via USB, Wi-Fi) para o hardware. O tráfego de tethering é descarregado fornecendo um caminho direto entre o modem e os periféricos, ignorando o processador do app.

Especificações

A partir do Android 8.1, os dispositivos podem usar o descarregamento de tethering para descarregar o encaminhamento de IPv4, IPv6 ou IPv4+IPv6 para o hardware.

O recurso de descarregamento não precisa descarregar todos os pacotes. O framework é capaz de processar qualquer pacote no software. Os pacotes de controle geralmente são processados no software. Como as portas IPv4 são compartilhadas entre o tráfego de tethering e o tráfego do dispositivo, os pacotes de configuração/desativação de sessão IPv4 (por exemplo, SYN/SYN+ACK, FIN) precisam ser processados no software para que o kernel possa construir o estado do fluxo. O framework fornece o plano de controle e as máquinas de estado. Ele também fornece ao hardware informações sobre interfaces/prefixos de upstream e downstream.

Para IPv4, o hardware permite que os pacotes de configuração de sessão de conversão de endereço de rede (NAT, na sigla em inglês) IPv4 cheguem à CPU. O kernel cria entradas NAT, e a implementação da HAL observa as entradas dos descritores de arquivo fornecidos pelo framework e processa esses fluxos no hardware. Isso significa que a implementação da HAL não exige CAP_NET_*, porque a HAL recebe soquetes NF_NETLINK_CONNTRACK abertos do framework. Periodicamente, o hardware envia atualizações de estado NAT para fluxos ativos no momento para o framework, que atualiza as entradas de estado de rastreamento de conexão do kernel correspondentes.

Para IPv6, o framework programa uma lista de prefixos de destino IPv6 para os quais o tráfego não pode ser descarregado. Todos os outros pacotes de tethering podem ser descarregados.

Para a contabilização do uso de dados, as pesquisas de uso de dados do NetworkStatsService fazem com que o framework solicite estatísticas de tráfego do hardware. O framework também comunica os limites de uso de dados ao hardware pela HAL.

Requisitos de hardware

Para implementar o descarregamento de tethering, o hardware precisa ser capaz de encaminhar pacotes IP entre o modem e o Wi-Fi/USB sem enviar o tráfego pelo processador principal.

Implementação

Para ativar o recurso de descarregamento de tethering, é necessário implementar um HAL de configuração (IOffloadConfig) e um HAL de controle (IOffloadControl).

HAL de configuração: IOffloadConfig

O IOffloadConfig HAL inicia a implementação do descarregamento de tethering. O framework fornece à implementação da HAL soquetes NF_NETLINK_CONNTRACK pré-conectados que a implementação pode usar para observar os fluxos IPv4. Somente os fluxos encaminhados precisam ser acelerados.

HAL de controle: IOffloadControl

O IOffloadControl HAL controla a implementação do descarregamento. Os métodos a seguir precisam ser implementados:

  • Iniciar/parar o hardware de descarregamento: use initOffload/stopOffload e isente endereços IP locais ou outras redes do descarregamento com setLocalPrefixes.
  • Definir a interface de upstream, o endereço IPv4 e os gateways IPv6: use setUpstreamParameters e configure os intervalos de endereços IP de downstream com addDownstream/removeDownstream.
  • Contabilização do uso de dados: use getForwardedStats/setDataLimit.

O HAL do fornecedor também precisa enviar callbacks pela interface ITetheringOffloadCallback, que informa o framework sobre:

  • Eventos assíncronos, como o descarregamento sendo iniciado e interrompido (OffloadCallbackEvent)
  • Atualizações de tempo limite NAT, que precisam ser enviadas periodicamente para indicar que um fluxo IPv4 específico contém tráfego e não pode ser fechado pelo kernel

Validação

Para validar a implementação do descarregamento de tethering, use testes manuais ou automatizados para verificar se o tethering e o ponto de acesso Wi-Fi funcionam conforme o esperado. O pacote de testes de fornecedor (VTS, na sigla em inglês) contém testes para as HALs de descarregamento de tethering.