Descarga de hardware de tethering

O descarregamento de tethering permite que os dispositivos economizem energia e melhorem o desempenho, descarregando o tráfego de tethering (por 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 aplicativo.

Especificações

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

O recurso de descarregamento não precisa descarregar todos os pacotes. A estrutura é capaz de lidar com qualquer pacote de software. Os pacotes de controle são normalmente processados ​​em software. Como as portas IPv4 são compartilhadas entre o tráfego conectado e o tráfego do dispositivo, os pacotes de configuração/desmontagem da sessão IPv4 (por exemplo, SYN/SYN+ACK, FIN) devem ser processados ​​no software para que o kernel possa construir o estado do fluxo. A estrutura 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 tradução de endereço de rede (NAT) IPv4 cheguem à CPU. O kernel cria entradas NAT e a implementação HAL observa as entradas dos descritores de arquivos fornecidos pela estrutura e manipula esses fluxos no hardware. Isso significa que a implementação HAL não requer CAP_NET_* porque o HAL obtém soquetes NF_NETLINK_CONNTRACK abertos da estrutura. Periodicamente, o hardware envia atualizações de estado NAT para fluxos atualmente ativos para a estrutura, 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 deve ser descarregado. Todos os outros pacotes vinculados podem ser descarregados.

Para a contabilidade de uso de dados, as pesquisas de uso de dados NetworkStatsService fazem com que a estrutura solicite estatísticas de tráfego do hardware. A estrutura também comunica limites de uso de dados ao hardware por meio do HAL.

Requisitos de hardware

Para implementar o descarregamento de tethering, seu hardware deve ser capaz de encaminhar pacotes IP entre o modem e o Wi-Fi/USB sem enviar o tráfego através do processador principal.

Implementação

Para ativar o recurso de descarregamento de tethering, você deve implementar os dois seguindo um HAL de configuração ( IOffloadConfig ) e um HAL de controle ( IOffloadControl ).

Configuração HAL: IOffloadConfig

O IOffloadConfig HAL inicia a implementação de descarregamento de tethering. A estrutura fornece à implementação HAL soquetes NF_NETLINK_CONNTRACK pré-conectados que a implementação pode usar para observar os fluxos IPv4. Apenas os fluxos encaminhados devem ser acelerados.

Controle HAL: IOffloadControl

O IOffloadControl HAL controla a implementação de descarregamento. Os seguintes métodos devem ser implementados:

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

O HAL do seu fornecedor também deve enviar retornos de chamada por meio da interface ITetheringOffloadCallback , que informa a estrutura de:

  • Eventos assíncronos, como offload sendo iniciado e interrompido (OffloadCallbackEvent)
  • Atualizações de tempo limite de NAT, que devem 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 sua implementação de 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 Vendor Test Suite (VTS) contém testes para HALs de transferência de tethering.