Partage de connexion

Mises à jour d'Android 13

Mettre à jour Plus d'informations
Introduction de CrossDevice Multi-appareil
Introduction du tunnelling fractionné Tunnelisation fractionnée

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 à ces appareils via le Wi-Fi, USB, 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 l'autorisation de partage de connexion, IpServer et offloadController). Ce module est mis à jour, ce qui signifie qu'il peut recevoir des mises à jour de fonctionnalités en dehors du cycle de publication normal d'Android.

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

  • Les utilisateurs finaux bénéficient d'une expérience cohérente sur les appareils Android et résolvent les problèmes d'interopérabilité via des mises à jour de modules.

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

Tunnelisation fractionnée

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

Le tunnelling fractionné fait référence à la configuration dans laquelle certains types de trafic passent par le VPN, tandis que d'autres ne le font pas. Par exemple, une organisation peut souhaiter 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 tunnellisme fractionné ne soit disponible, VpnService.Builder permettait au client VPN d'indiquer que seuls certains sous-réseaux devaient y être routés (routes incluses). Avec le tunnelling fractionné, vous pouvez spécifier l'inverse: acheminer tout le trafic vers le VPN, à l'exception de sous-réseaux spécifiques (routes d'exclusion).

La signature de la nouvelle API de tunnelisation fractionnée est la suivante:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

La fonctionnalité Cross-Device, introduite dans Android 13, vise à fournir des technologies de communication inter-appareils à l'aide de protocoles standards. Il fournit des API et des fonctionnalités de détection d'appareils, de connexion authentifiée et d'autres expériences inter-appareils.

Motivation CrossDevice

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

Limite du module CrossDevice

API CrossDevice Dans packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Services multi-appareils Dans packages/modules/CrossDevice/service
  • NearbyService : API de numérisation

Format du package multi-appareil

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 CrossDevice

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

Stratégie de test CrossDevice

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

Déchargement du partage de connexion eBPF

Pour fournir un partage de connexion haut débit sans dépendre des transferts hors bande matériels, Android 11 fournit une solution de transfert hors bande logicielle appelée transfert hors bande de partage de connexion eBPF pour le téléchargement IPv6 (trafic vers l'appareil associé).

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

  • Téléchargement IPv6 (trafic vers l'appareil associé)
  • Importation IPv6 (trafic provenant de l'appareil associé)
  • Envoi et réception IPv4 TCP/UDP (trafic vers/depuis l'appareil associé)
  • Déchargement eBPF

Cette fonctionnalité est activée par défaut. Les utilisateurs peuvent remplacer la configuration config_tether_enable_bpf_offload par "false" par RRO. Pour en savoir plus, consultez la section 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 d'adresses IP.

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

Limite du module

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

Pour Android 11 ou version antérieure, le module de partage de connexion 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 de partage de connexion (com.android.tethering) est au format APEX et est disponible pour les appareils équipés d'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 de partage de connexion. Le partage de connexion est étendu à un module de connectivité.

Dépendances de module

Le module de partage de connexion présente les dépendances suivantes:

  • Méthodes d'API publiques et système dans le serveur système
  • Interface stable des IPC AIDL avec le serveur système
  • HIDL tetheroffload (défini dans hardware/interfaces/tetheroffload/)
  • Serveur DHCP (faisant partie du module de pile réseau)

Personnalisation

Le module de partage de connexion n'est pas personnalisable.

Tests

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