Amarração

Atualizações no Android 13

Atualizar Mais Informações
Introduzido CrossDevice CrossDevice
Introduzido o tunelamento 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 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 direito 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 OEMs em todo o ecossistema Android usem uma implementação de referência única e padrão que traz os seguintes benefícios.

  • Os usuários finais obtêm uma experiência consistente em dispositivos Android e corrigem problemas de interoperabilidade por meio de atualizações de módulos.

  • Os OEMs podem atender aos requisitos das transportadoras e, ao mesmo tempo, reduzir os custos de personalizações individuais (pois 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 não. Um exemplo comum é quando uma organização deseja que a navegação geral na Web, com uso intenso de largura de banda (por exemplo, YouTube, Netflix) ou aplicativos sensíveis à latência (por exemplo, Office 365 ) contornem a VPN. Antes que o túnel dividido estivesse disponível, VpnService.Builder permitia que o cliente VPN indicasse que apenas algumas sub-redes deveriam ser roteadas para ele ( incluindo rotas). Com o tunelamento dividido, você pode 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

CrossDevice, introduzido no Android 13, tem como objetivo 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 chave 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, proporcionando mais visibilidade dos detalhes de implementação e melhor história de privacidade para 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 digitalização

Formato de pacote CrossDevice

A principal função 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
  • Protobibliotecas

Opções de personalização entre dispositivos

Planejamos permitir que os OEMs personalizem a interface do usuário para meia folha por meio do RRO. Não há planos 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 a descarregamentos de hardware, o Android 11 fornece uma solução de descarregamento de software de tethering chamada eBPF tethering offload para download IPv6 (tráfego fluindo para o dispositivo conectado).

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

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

Este 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ços de rede (NAT) e adota o protocolo de configuração dinâmica de host (DHCP) para atribuição de endereços IP.

  • Para redes IPv6, o módulo adota 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 versões anteriores, 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 para um módulo de Conectividade.

Dependências do módulo

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

  • Métodos API públicos e do sistema no servidor do sistema
  • Interface AIDL IPCs estável 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.