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 comsetLocalPrefixes
. - Configurar interface upstream, endereço IPv4 e gateways IPv6: Use
setUpstreamParameters
e configure intervalos de endereços IP downstream comaddDownstream/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.