Tethering

Atualizações no Android 13

Atualizar Mais informações
Introdução do CrossDevice CrossDevice
Introdução do tunelamento dividido Túnel dividido

Visão geral

O módulo de tethering compartilha a conexão de Internet de um dispositivo Android com outros dispositivos clientes conectados, que podem se conectar a dispositivos de tethering por Wi-Fi, USB, Bluetooth ou Ethernet. Esse módulo inclui o componente de tethering (USB, ponto de acesso Wi-Fi, Bluetooth etc.) e as dependências dele (interação com direito a tethering, IpServer e offloadController). Ele pode ser atualizado, ou seja, pode receber atualizações de funcionalidade fora do ciclo normal de versões do Android.

O módulo Tethering permite que OEMs em todo o ecossistema Android usem uma única implementação de referência padrão que traz os seguintes benefícios.

  • Os usuários finais têm uma experiência consistente em dispositivos Android e correções para problemas de interoperabilidade com atualizações de módulos.

  • Os OEMs podem atender aos requisitos das operadoras e reduzir os custos de personalizações individuais, já que não precisam de implementações diferentes dos mesmos requisitos de maneiras diferentes.

Túnel dividido

Para oferecer suporte a casos de uso de tunelamento dividido, uma nova API foi adicionada ao Android 13 para especificar rotas de exclusão.

O túnel dividido se refere à configuração em que determinado tráfego passa pela VPN, enquanto outro não. Um exemplo comum é quando uma organização quer que a navegação geral na Web, aplicativos que consomem muita largura de banda (por exemplo, YouTube, Netflix) ou sensíveis à latência (por exemplo, Office 365) ignorem a VPN. Antes da disponibilidade do túnel dividido, o VpnService.Builder permitia que o cliente VPN indicasse que apenas algumas sub-redes deveriam ser encaminhadas para ele (rotas de inclusão). Com o túnel dividido, é possível especificar o inverso: rotear todo o tráfego para a VPN, exceto sub-redes específicas (rotas de exclusão).

A assinatura da nova API de tunelamento dividido é:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

O CrossDevice, lançado no Android 13, tem como objetivo fornecer tecnologias de comunicação entre dispositivos usando protocolos padrão. Ela fornece APIs e recursos para descoberta de dispositivos, conexão autenticada e outras experiências entre dispositivos.

Motivação crossdevice

  • Colaboração mais estreita com parceiros OEM. Os OEMs podem integrar o próprio sistema de chaves de conta à implementação do CrossDevice em vez de usar a solução do Google.
  • Implementação mais visível do protocolo. O módulo CrossDevice é de código aberto, oferecendo mais visibilidade aos detalhes da implementação e uma melhor história de privacidade para a implementação de tecnologias CrossDevice.

Limite do módulo CrossDevice

APIs CrossDevice Em packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Serviços entre dispositivos Em packages/modules/CrossDevice/service
  • NearbyService: API de verificação

Formato do pacote CrossDevice

A função principal desse módulo está incluída em um pacote APEX. Os recursos são empacotados em um APK.

Dependências entre dispositivos

O CrossDevice depende do seguinte:

  • Wi-Fi
  • Bluetooth
  • UWB
  • modules-utils-preconditions
  • Bibliotecas proto

Opções de personalização entre dispositivos

Planejamos permitir que os OEMs personalizem a interface do usuário para meia folha usando RRO. Não há planos para personalizar a funcionalidade.

Estratégia de teste entre dispositivos

Planejamos adicionar testes do Android Compatibility Test Suite (CTS) para verificar a funcionalidade entre dispositivos e testes entre dispositivos no MTS.

Descarregamento de tethering eBPF

Para oferecer tethering de alta velocidade sem depender de liberações de hardware, o Android 11 oferece uma solução de liberação de software de tethering chamada eBPF tethering offload para download de IPv6 (tráfego fluindo para o dispositivo conectado).

No Android 12, essa funcionalidade (incluindo o código do programa eBPF) é totalmente fornecida pelo módulo Tethering, que oferece suporte ao seguinte:

  • Download de IPv6 (tráfego fluindo para o dispositivo conectado)
  • Upload de IPv6 (tráfego de um dispositivo conectado)
  • Upload e downstream de TCP/UDP IPv4 (tráfego que flui para/de um dispositivo conectado)
  • Descarga de eBPF

Esse recurso é ativado por padrão, mas os usuários podem substituir a configuração config_tether_enable_bpf_offload por "false" usando o RRO. Consulte Personalização para mais informações.

Suporte a IPv4 e IPv6

O módulo de tethering oferece suporte a pilha dupla IPv4 e IPv6.

  • Para redes IPv4, o módulo configura a conversão de endereços de rede (NAT) e adota o protocolo de configuração de host dinâmico (DHCP) para atribuição de endereços IP.

  • Para redes IPv6, o módulo adota a autoconfiguração de endereço sem estado IPv6 (SLAAC) para atribuição de endereço IP.

Limite do módulo

No Android 12 e versões mais recentes, todos os arquivos/pastas em packages/modules/Connectivity estão no escopo do módulo de tethering.

Para o Android 11 e versões anteriores, o módulo de tethering tem os seguintes arquivos do Android 10 em packages/modules/Tethering.

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

Formato do módulo

O módulo de tethering (com.android.tethering) está no formato APEX e está disponível para dispositivos com Android 11 ou versões mais recentes.

Incluir ConnectivityService

No Android 12, o código ConnectivityService que implementa o componente central da conectividade L3+ é adicionado ao Tethering APEX. O escopo do tethering se expande para um módulo de conectividade.

Dependências do módulo

O módulo de tethering tem as seguintes dependências:

  • Métodos de API públicos e do sistema no servidor do sistema
  • As interfaces IPCs AIDL estáveis interagem com o servidor do sistema.
  • tetheroffload HIDL (definido em hardware/interfaces/tetheroffload/)
  • Servidor DHCP (parte do módulo de pilha de rede)

Personalização

O módulo de tethering não aceita personalização.

Teste

O Teste de compatibilidade do Android (CTS, na sigla em inglês) verifica a funcionalidade do módulo de tethering.