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 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
. - 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.