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