Descarga de hardware para tethering

Com o descarregamento de tethering, os dispositivos economizam energia e melhoram o desempenho ao descarregar o tráfego de tethering (via USB, Wi-Fi) para o hardware. O tráfego de tethering é descarregado ao fornecer um caminho direto entre o modem e os periféricos, ignorando o processador de aplicativos.

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. Normalmente, os pacotes de controle são processados em 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 upstream e downstream.

Para IPv4, o hardware permite que pacotes de configuração de sessão de conversão de endereços de rede (NAT) IPv4 cheguem à CPU. O kernel cria entradas de 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 abre sockets NF_NETLINK_CONNTRACK do framework. Periodicamente, o hardware envia atualizações de estado de NAT para fluxos ativos no momento ao framework, que atualiza as entradas de estado de rastreamento de conexão do kernel correspondentes.

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

Para contabilização do 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 pela HAL.

Requisitos de hardware

Para implementar o descarregamento de tethering, o hardware precisa 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 descarga de tethering, implemente as duas HALs a seguir: uma HAL de configuração (IOffloadConfig) e uma HAL de controle (IOffloadControl).

HAL de configuração: IOffloadConfig

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

HAL de controle: IOffloadControl

O HAL IOffloadControl controla a implementação do descarregamento. Os seguintes métodos 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.
  • 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.
  • Contabilização do uso de dados: use getForwardedStats/setDataLimit.

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

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

Validação

Para validar a implementação do desvio de tethering, 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 os HALs de descarregamento de tethering.