Descarga de hardware para tethering

O desligamento do tethering permite que os dispositivos economizem energia e melhorem o desempenho transferindo o tráfego de tethering (por USB, Wi-Fi) para o hardware. O tráfego de tethering é transferido 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 tethering offload para encaminhar o IPv4, IPv6 ou IPv4+IPv6 para o hardware.

O recurso de transferência não precisa transferir todos os pacotes. O framework é capaz de processar qualquer pacote em software. Os pacotes de controle geralmente são processados em software. Como as portas IPv4 são compartilhadas entre o tráfego tetherizado e o tráfego do dispositivo, os pacotes de configuração/rompimento 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 upstream e downstream.

Para o IPv4, o hardware permite que os pacotes de configuração de sessão de conversão de endereços de rede (NAT) do IPv4 alcancem a CPU. O kernel cria entradas de NAT, e a implementação HAL observa as entradas dos descritores de arquivo fornecidos pelo framework e processa esses fluxos na hardware. Isso significa que a implementação do HAL não requer CAP_NET_* porque o HAL abre os soquetes NF_NETLINK_CONNTRACK do framework. Periodicamente, o hardware envia atualizações de estado de NAT para os fluxos atualmente ativos ao 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 transferido. Todos os outros pacotes vinculados podem ser transferidos.

Para a contabilidade de uso de dados, as pesquisas de uso de dados 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 por meio do HAL.

Requisitos de hardware

Para implementar o tethering offload, seu 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 transferência de dados por tethering, é necessário implementar os dois seguintes HALs: um HAL de configuração (IOffloadConfig) e um HAL de controle (IOffloadControl).

HAL de configuração: IOffloadConfig

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

HAL de controle: IOffloadControl

O HAL IOffloadControl controla a implementação de transferência. Os métodos a seguir precisam ser implementados:

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

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

  • Eventos assíncronos, como a inicialização e a interrupção do offload (OffloadCallbackEvent)
  • Atualizações de tempo limite de 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 tethering offload, use testes manuais ou automatizados para verificar se o tethering e o ponto de acesso Wi-Fi funcionam conforme o esperado. O Conjunto de teste de fornecedor (VTS) contém testes para as HALs de transferência de dados de tethering.