Amarração

Atualizações no Android 13

Atualizar Mais Informações
Introduzido CrossDevice Dispositivo cruzado
Introduzido túnel dividido Tunelamento dividido

Visão geral

O módulo 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. Este módulo inclui o componente de tethering (USB, ponto de acesso Wi-Fi, Bluetooth, etc.) e suas dependências (interação com direitos de tethering, IpServer e offloadController ). Este módulo é atualizável, o que significa que pode receber atualizações de funcionalidades fora do ciclo normal de lançamento do Android.

O módulo Tethering permite que os 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 obtêm uma experiência consistente em dispositivos Android e correções para problemas de interoperabilidade por meio de atualizações de módulo.

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

Tunelamento 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 tunelamento dividido refere-se à configuração em que determinado tráfego passa pela VPN enquanto outro tráfego não. Um exemplo comum é quando uma organização deseja que a navegação geral na Web, com muita largura de banda (por exemplo, YouTube, Netflix) ou aplicativos sensíveis à latência (por exemplo, Office 365 ) ignorem a VPN. Antes do túnel dividido estar disponível, o VpnService.Builder permitia que o cliente VPN indicasse que apenas algumas sub-redes deveriam ser roteadas para ele ( incluindo rotas). Com o túnel dividido, você pode especificar o inverso: rotear todo o tráfego para a VPN, exceto para sub-redes específicas ( excluir rotas).

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

public Builder excludeRoute(@NonNull IpPrefix prefix)

Dispositivo cruzado

O CrossDevice, introduzido no Android 13, visa fornecer tecnologias de comunicação entre dispositivos usando protocolos padrão. Ele fornece APIs e recursos para descoberta de dispositivos, conexão autenticada e outras experiências entre dispositivos.

Motivação entre dispositivos

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

Limite do módulo CrossDevice

APIs entre dispositivos 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 deste módulo está incluída em um pacote APEX. Os recursos são empacotados em um APK.

Dependências entre dispositivos

CrossDevice depende do seguinte:

  • Wi-fi
  • Bluetooth
  • UWB
  • módulos-utils-pré-condições
  • Proto-bibliotecas

Opções de personalização do CrossDevice

Planejamos permitir que os OEMs personalizem a interface do usuário para meia folha por meio de RRO. Não há nenhum plano para personalizar a funcionalidade.

Estratégia de teste CrossDevice

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

Descarregamento de tethering eBPF

Para fornecer tethering de alta velocidade sem responder em descarregamentos de hardware, o Android 11 fornece uma solução de descarregamento de software de tethering chamada eBPF tethering offload para download de IPv6 (tráfego fluindo para o dispositivo conectado).

A partir do Android 12, essa funcionalidade (incluindo o código do programa eBPF) é totalmente fornecida pelo módulo Tethering, que suporta o seguinte:

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

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

Suporte IPv4 e IPv6

O módulo Tethering suporta pilha dupla IPv4 e IPv6.

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

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

Limite do módulo

Para Android 12 e superior, todos os arquivos/pastas em packages/modules/Connectivity estão no escopo do módulo Tethering.

Para Android 11 e inferior, o módulo 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 Tethering ( com.android.tethering ) está no formato APEX e está disponível para dispositivos com Android 11 ou superior.

Incluir serviço de conectividade

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

Dependências do módulo

O módulo Tethering possui as seguintes dependências:

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

Costumização

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

Teste

O Android Compatibility Test Suite (CTS) verifica a funcionalidade do módulo Tethering.