Tethering

Atualizações no Android 13

Atualizar Mais informações
Introdução ao CrossDevice CrossDevice
Introdução ao túnel dividido Túnel dividido

Visão geral

O módulo de tethering compartilha a conexão de Internet de um dispositivo Android com outros 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 o direito de tethering, IpServer e offloadController). Esse módulo é atuável, ou seja, pode receber atualizações de funcionalidade fora do ciclo normal de lançamento do Android.

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

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

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

Túnel dividido

Para oferecer suporte a casos de uso de túnel 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 com muita largura de banda (por exemplo, YouTube, Netflix) ou que são sensíveis à latência (por exemplo, Office 365) ignorem a VPN. Antes que o encapsulamento dividido estivesse disponível, VpnService.Builder permitia que o cliente VPN indicasse que apenas algumas sub-redes precisam ser roteadas para ele (incluir rotas). Com o túnel dividido, é possível especificar o inverso: rotear todo o tráfego para a VPN, exceto sub-redes específicas (excluir rotas).

A assinatura da nova API de túnel dividido é:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

O CrossDevice, introduzido no Android 13, tem como objetivo oferecer tecnologias de comunicação entre dispositivos usando protocolos padrão. Ele oferece 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 com a implementação CrossDevice em vez de precisar usar a solução do Google.
  • Implementação mais visível do protocolo. O módulo CrossDevice tem código aberto, oferecendo mais visibilidade dos detalhes da implementação e um melhor histórico 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 do CrossDevice

A plataforma CrossDevice depende do seguinte:

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

Opções de personalização do CrossDevice

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

Estratégia de teste CrossDevice

Planejamos adicionar testes do pacote de teste de compatibilidade do Android (CTS) para verificar a funcionalidade CrossDevice e o teste entre dispositivos no MTS.

Descarregar tethering eBPF

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

No Android 12 e versões mais recentes, essa funcionalidade (incluindo o código do programa eBPF) é totalmente fornecida pelo módulo de tethering, que oferece suporte ao seguinte:

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

Esse recurso é ativado por padrão. Os usuários podem substituir a configuração config_tether_enable_bpf_offload para falso por 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, na sigla em inglês) e adota o protocolo de configuração de host dinâmico (DHCP, na sigla em inglês) para a atribuição de endereços IP.

  • Para redes IPv6, o módulo adota a configuração automática de endereços IP sem estado (SLAAC) IPv6 para a atribuição de endereços 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.

No 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 o 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 APEX de tethering. O escopo do tethering é expandido para um módulo de conectividade.

Dependências de módulo

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

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

Personalização

O módulo de tethering não oferece suporte à personalização.

Teste

O conjunto de teste de compatibilidade do Android (CTS) verifica a funcionalidade do módulo de tethering.