Actualizaciones en Android 13
Actualizar | Más información |
---|---|
Se introdujo la función de varios dispositivos | CrossDevice |
Se introdujo el túnel dividido | Túnel dividido |
Descripción general
El módulo de conexión comparte la conexión a Internet de un dispositivo Android con otros dispositivos cliente conectados, que pueden conectarse a dispositivos de conexión mediante Wi-Fi, USB, Bluetooth o Ethernet. Este módulo incluye el componente de conexión compartida (USB, punto de acceso Wi-Fi, Bluetooth, etcétera) y sus dependencias (interacción con el derecho de conexión compartida, IpServer
y offloadController
). Este módulo se puede actualizar, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo normal de lanzamientos de Android.
El módulo de Conexión por cable permite que los OEMs de todo el ecosistema de Android usen una única implementación de referencia estándar que ofrece los siguientes beneficios.
Los usuarios finales obtienen una experiencia coherente en todos los dispositivos Android y correcciones de problemas de interoperabilidad a través de actualizaciones de módulos.
Los OEMs pueden cumplir con los requisitos de las empresas de transporte y, al mismo tiempo, reducir los costos de personalizaciones individuales (ya que no necesitan implementaciones diferentes de los mismos requisitos de distintas maneras).
Uso de túneles divididos
Para admitir casos de uso de tunelización dividida, se agrega una nueva API a Android 13 para especificar rutas de exclusión.
La tunelización dividida hace referencia a la configuración en la que cierto tráfico pasa por la VPN, mientras que otro no. Un ejemplo común es cuando una organización desea navegar por la Web en general, con alto ancho de banda (por ejemplo, YouTube o Netflix) o aplicaciones sensibles a la latencia (por ejemplo, Office 365) para evitar la VPN. Antes de que estuviera disponible la tunelización dividida,
VpnService.Builder
permitía que el cliente de VPN indicara que solo algunas subredes debían enrutarse a él
(incluir rutas). Con la tunelización dividida, puedes especificar lo opuesto: enrutar todo el tráfico a la VPN, excepto las subredes específicas (rutas de exclusión).
La firma de la nueva API de tunelización dividida es la siguiente:
public Builder excludeRoute(@NonNull IpPrefix prefix)
Multidispositivo
CrossDevice, que se introdujo en Android 13, tiene como objetivo proporcionar tecnologías de comunicación en varios dispositivos con protocolos estándar. Proporciona APIs y funciones para el descubrimiento de dispositivos, la conexión autenticada y otras experiencias multidispositivo.
Motivación multidispositivo
- Colaboración más estrecha con los socios OEM. Los OEMs pueden integrar su propio sistema de claves de cuenta con la implementación de CrossDevice en lugar de tener que usar la solución de Google.
- Implementación más visible del protocolo. El módulo CrossDevice es de código abierto, lo que proporciona más visibilidad sobre los detalles de la implementación y una mejor historia de privacidad para la implementación de tecnologías multidispositivo.
Límite del módulo CrossDevice
APIs multidispositivo | En packages/modules/CrossDevice/framework
|
Servicios multidispositivo | En packages/modules/CrossDevice/service
|
Formato del paquete CrossDevice
La función principal de este módulo se incluye en un paquete de APEX. Los recursos se empaquetan en un APK.
Dependencias multidispositivo
La opción de dispositivos múltiples depende de lo siguiente:
- Wi-Fi
- Bluetooth
- UWB
- modules-utils-preconditions
- Bibliotecas de proto
Opciones de personalización multidispositivo
Planeamos permitir que los OEM personalicen la IU de la media hoja a través de RRO. No hay un plan para personalizar la funcionalidad.
Estrategia de pruebas de CrossDevice
Planeamos agregar pruebas del Conjunto de pruebas de compatibilidad de Android (CTS) para verificar la funcionalidad multidispositivo y las pruebas multidispositivo en MTS.
Descarga de conexión mediante eBPF
Para proporcionar una conexión compartida de alta velocidad sin depender de descargas de hardware, Android 11 proporciona una solución de descarga de software de conexión compartida llamada descarga de conexión compartida de eBPF para la descarga de IPv6 (tráfico que fluye al dispositivo conectado).
A partir de Android 12, el módulo de Conexión por cable proporciona por completo esta funcionalidad (incluido el código de programa de eBPF), que admite lo siguiente:
- Descarga de IPv6 (tráfico que fluye al dispositivo conectado)
- Carga de IPv6 (tráfico que fluye desde el dispositivo conectado)
- Carga IPv4 de TCP/UDP y downstream (tráfico que fluye hacia y desde el dispositivo anclado a red)
- Transferencia de eBPF
Esta función está habilitada de forma predeterminada, y los usuarios pueden anular la configuración de config_tether_enable_bpf_offload
a "false" mediante RRO.
Consulta Personalización para obtener más información.
Compatibilidad con IPv4 e IPv6
El módulo de conexión admite la pila doble IPv4 e IPv6.
En el caso de las redes IPv4, el módulo configura la traducción de direcciones de red (NAT) y adopta el protocolo de configuración dinámica de host (DHCP) para la asignación de direcciones IP.
En el caso de las redes IPv6, el módulo adopta la configuración automática de direcciones sin estado IPv6 (SLAAC) para la asignación de direcciones IP.
Límite del módulo
En Android 12 y versiones posteriores, todos los archivos o carpetas de packages/modules/Connectivity
se encuentran en el alcance del módulo de Conexión compartida.
En Android 11 y versiones anteriores, el módulo de Conexión por cable tiene los siguientes archivos de Android 10 en 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 del módulo
El módulo de conexión mediante dispositivo móvil (com.android.tethering
) está en formato APEX y está disponible para dispositivos que ejecutan Android 11 o versiones posteriores.
Cómo incluir ConnectivityService
A partir de Android 12, el código ConnectivityService
que implementa el componente central de la conectividad de L3 y versiones posteriores se agrega al APEX de conexión mediante dispositivo móvil. El alcance de la Conexión compartida se expande a un módulo de Conectividad.
Dependencias de módulos
El módulo de Conexión por cable tiene las siguientes dependencias:
- Métodos de API públicos y del sistema en el servidor del sistema
- La interfaz de IPC de AIDL estable con el servidor del sistema
- HIDL de
tetheroffload
(definido enhardware/interfaces/tetheroffload/
) - Servidor DHCP (parte del módulo de pila de red)
Personalización
El módulo de conexión no admite la personalización.
Prueba
El Conjunto de pruebas de compatibilidad (CTS) de Android verifica la funcionalidad del módulo de conexión mediante dispositivo móvil.