Partage de connexion

Nouveautés d'Android 13

Mettre à jour Plus d'informations
Introduction de CrossDevice CrossDevice
Introduction du split tunneling Split Tunneling

Présentation

Le module de partage de connexion partage la connexion Internet d'un appareil Android avec d'autres appareils clients connectés, qui peuvent se connecter aux appareils de partage de connexion via le Wi-Fi, l'USB, le Bluetooth ou Ethernet. Ce module inclut le composant de partage de connexion (USB, point d'accès Wi-Fi, Bluetooth, etc.) et ses dépendances (interaction avec le droit d'accès au partage de connexion, IpServer et offloadController). Ce module est actualisable, ce qui signifie qu'il peut recevoir des mises à jour de fonctionnalités en dehors du cycle de publication Android normal.

Le module Tethering permet aux OEM de l'ensemble de l'écosystème Android d'utiliser une seule implémentation de référence standard qui offre les avantages suivants.

  • Les utilisateurs finaux bénéficient d'une expérience cohérente sur les appareils Android et de correctifs pour les problèmes d'interopérabilité grâce aux mises à jour des modules.

  • Les OEM peuvent répondre aux exigences des opérateurs tout en réduisant les coûts des personnalisations individuelles (car ils n'ont pas besoin d'implémentations différentes des mêmes exigences de différentes manières).

Split tunneling

Pour prendre en charge les cas d'utilisation du tunneling fractionné, une nouvelle API est ajoutée à Android 13 pour spécifier les routes à exclure.

Le tunneling fractionné fait référence à la configuration dans laquelle une partie du trafic passe par le VPN, tandis que l'autre partie ne le fait pas. Un exemple courant est celui où une organisation souhaite que la navigation Web générale, les applications gourmandes en bande passante (par exemple, YouTube, Netflix) ou les applications sensibles à la latence (par exemple, Office 365) contournent le VPN. Avant que le split tunneling ne soit disponible, VpnService.Builder permettait au client VPN d'indiquer que seuls certains sous-réseaux devaient lui être routés (routes include). Avec le tunneling fractionné, vous pouvez spécifier l'inverse : router tout le trafic vers le VPN, à l'exception de sous-réseaux spécifiques (routes d'exclusion).

La signature de la nouvelle API de tunneling fractionné est la suivante :

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

CrossDevice, introduit dans Android 13, vise à fournir des technologies de communication inter-appareils à l'aide de protocoles standards. Il fournit des API et des fonctionnalités pour la découverte d'appareils, la connexion authentifiée et d'autres expériences multi-appareils.

Motivation multi-appareil

  • Collaboration plus étroite avec les partenaires OEM. Les OEM peuvent intégrer leur propre système de clés de compte à l'implémentation CrossDevice au lieu d'utiliser la solution de Google.
  • Implémentation plus visible du protocole. Le module CrossDevice est open source, ce qui permet d'avoir une meilleure visibilité sur les détails de l'implémentation et une meilleure protection de la confidentialité pour l'implémentation des technologies CrossDevice.

Limite du module CrossDevice

API CrossDevice Dans packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Services multidispositifs Dans packages/modules/CrossDevice/service
  • NearbyService : API d'analyse

Format du package CrossDevice

La fonction principale de ce module est incluse dans un package APEX. Les ressources sont empaquetées dans un APK.

Dépendances CrossDevice

CrossDevice dépend des éléments suivants :

  • Wi-Fi
  • Bluetooth
  • UWB
  • modules-utils-preconditions
  • Bibliothèques proto

Options de personnalisation cross-appareil

Nous prévoyons de permettre aux OEM de personnaliser l'UI pour les demi-feuilles via RRO. Il n'est pas prévu de personnaliser la fonctionnalité.

Stratégie de test cross-device

Nous prévoyons d'ajouter des tests CTS (Android Compatibility Test Suite) pour vérifier la fonctionnalité multi-appareil et des tests multi-appareils dans MTS.

Déchargement du partage de connexion eBPF

Pour fournir un partage de connexion haut débit sans s'appuyer sur des déchargements matériels, Android 11 propose une solution de déchargement logiciel de partage de connexion appelée déchargement de partage de connexion eBPF pour le téléchargement IPv6 (trafic vers l'appareil connecté).

À partir d'Android 12, cette fonctionnalité (y compris le code du programme eBPF) est entièrement fournie par le module Tethering, qui prend en charge les éléments suivants :

  • Téléchargement IPv6 (trafic vers l'appareil connecté)
  • Importation IPv6 (trafic provenant de l'appareil connecté)
  • Transfert et téléchargement TCP/UDP IPv4 (trafic vers/depuis l'appareil connecté)
  • Déchargement eBPF

Cette fonctionnalité est activée par défaut. Les utilisateurs peuvent remplacer la configuration config_tether_enable_bpf_offload par "false" à l'aide de RRO. Pour en savoir plus, consultez Personnalisation.

Prise en charge d'IPv4 et d'IPv6

Le module de partage de connexion est compatible avec la double pile IPv4 et IPv6.

  • Pour les réseaux IPv4, le module configure la traduction d'adresse réseau (NAT) et adopte le protocole DHCP (Dynamic Host Configuration Protocol) pour l'attribution des adresses IP.

  • Pour les réseaux IPv6, le module adopte la configuration automatique d'adresses IPv6 sans état (SLAAC) pour l'attribution d'adresses IP.

Limite du module

Pour Android 12 et versions ultérieures, tous les fichiers/dossiers sous packages/modules/Connectivity se trouvent dans le champ d'application du module Tethering.

Pour Android 11 et les versions antérieures, le module Tethering contient les fichiers Android 10 suivants dans 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

Format du module

Le module Tethering (com.android.tethering) est au format APEX et est disponible pour les appareils exécutant Android 11 ou version ultérieure.

Inclure ConnectivityService

À partir d'Android 12, le code ConnectivityService qui implémente le composant central de la connectivité L3+ est ajouté à l'APEX Tethering. Le champ d'application du partage de connexion s'étend à un module de connectivité.

Dépendances de module

Le module Tethering présente les dépendances suivantes :

  • Méthodes d'API publiques et système dans le serveur système
  • Les IPC AIDL stables interagissent avec le serveur système
  • tetheroffload HIDL (défini dans hardware/interfaces/tetheroffload/)
  • Serveur DHCP (qui fait partie du module "Pile réseau")

Personnalisation

Le module Tethering n'est pas compatible avec la personnalisation.

Tests

La suite de tests de compatibilité (CTS) Android vérifie la fonctionnalité du module de partage de connexion.