O descarregamento de tethering permite que os dispositivos economizem energia e melhorem o desempenho ao descarregar 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 em 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 em software para que o kernel possa construir o estado de 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 os pacotes de configuração de sessão de tradução de endereços de rede IPv4 (NAT) alcancem a CPU. O kernel cria entradas NAT e a implementação HAL observa as entradas dos descritores de arquivo fornecidos pela estrutura e trata esses fluxos no hardware. Isso significa que a implementação do HAL não requer CAP_NET_*
porque o HAL recebe soquetes NF_NETLINK_CONNTRACK
abertos do framework. 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 amarrados podem ser descarregados.
Para a contabilidade de uso de dados, as pesquisas de uso de dados do NetworkStatsService
fazem com que a estrutura solicite estatísticas de tráfego do hardware. A estrutura também comunica os 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 pelo processador principal.
Implementação
Para habilitar o recurso de transferência 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 transferência de tethering. A estrutura fornece a implementação HAL com 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 o descarregamento de hardware: Use
initOffload/stopOffload
e isente endereços IP locais ou outras redes do 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
.
Seu fornecedor HAL também deve enviar retornos de chamada por meio da interface ITetheringOffloadCallback
, que informa a estrutura de:
- Eventos assíncronos, como descarregamento 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 transferência 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 as HALs de descarregamento de tethering.
,O descarregamento de tethering permite que os dispositivos economizem energia e melhorem o desempenho ao descarregar 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 em 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 em software para que o kernel possa construir o estado de 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 os pacotes de configuração de sessão de tradução de endereços de rede IPv4 (NAT) alcancem a CPU. O kernel cria entradas NAT e a implementação HAL observa as entradas dos descritores de arquivo fornecidos pela estrutura e trata esses fluxos no hardware. Isso significa que a implementação do HAL não requer CAP_NET_*
porque o HAL recebe soquetes NF_NETLINK_CONNTRACK
abertos do framework. 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 amarrados podem ser descarregados.
Para a contabilidade de uso de dados, as pesquisas de uso de dados do NetworkStatsService
fazem com que a estrutura solicite estatísticas de tráfego do hardware. A estrutura também comunica os 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 pelo processador principal.
Implementação
Para habilitar o recurso de transferência 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 transferência de tethering. A estrutura fornece a implementação HAL com 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 o descarregamento de hardware: Use
initOffload/stopOffload
e isente endereços IP locais ou outras redes do 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
.
Seu fornecedor HAL também deve enviar retornos de chamada por meio da interface ITetheringOffloadCallback
, que informa a estrutura de:
- Eventos assíncronos, como descarregamento 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 transferência 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 as HALs de descarregamento de tethering.