Déchargement matériel du partage de connexion

Le déchargement du partage de connexion permet aux appareils d'économiser de l'énergie et d'améliorer leurs performances en déchargeant le trafic de partage de connexion (via USB ou Wi-Fi) sur le matériel. Le trafic de partage de connexion est déchargé en fournissant un chemin direct entre le modem et les périphériques, en contournant le processeur d'application.

Spécifications

À partir d'Android 8.1, les appareils peuvent utiliser le déchargement du partage de connexion pour décharger le transfert IPv4, IPv6 ou IPv4+IPv6 vers le matériel.

La fonctionnalité de déchargement n'a pas besoin de décharger tous les paquets. Le framework est capable de gérer n'importe quel paquet logiciel. Les paquets de contrôle sont généralement traités dans le logiciel. Étant donné que les ports IPv4 sont partagés entre le trafic de partage de connexion et le trafic de l'appareil, les paquets de configuration/démantèlement de session IPv4 (par exemple, SYN/SYN+ACK, FIN) doivent être traités dans le logiciel afin que le noyau puisse construire l'état du flux. Le framework fournit le plan de contrôle et les machines à états. Il fournit également au matériel des informations sur les interfaces/préfixes en amont et en aval.

Pour IPv4, le matériel permet aux paquets de configuration de session de traduction d'adresse réseau (NAT) IPv4 d'atteindre le processeur. Le noyau crée des entrées NAT, et l'implémentation HAL observe les entrées à partir des descripteurs de fichiers fournis par le framework et gère ces flux dans le matériel. Cela signifie que l'implémentation HAL ne nécessite pas CAP_NET_*, car le HAL ouvre les sockets NF_NETLINK_CONNTRACK à partir du framework. Périodiquement, le matériel envoie des mises à jour de l'état NAT pour les flux actuellement actifs au framework, qui actualise les entrées d'état de suivi de connexion du noyau correspondantes.

Pour IPv6, le framework programme une liste de préfixes de destination IPv6 vers lesquels le trafic ne doit pas être déchargé. Tous les autres paquets attachés peuvent être déchargés.

Pour la comptabilisation de l'utilisation des données, les sondages sur l'utilisation des données NetworkStatsService entraînent la demande de statistiques de trafic par le framework au matériel. Le framework communique également les limites d'utilisation des données au matériel via la HAL.

Configuration matérielle requise

Pour implémenter le déchargement du partage de connexion, votre matériel doit être capable de transférer des paquets IP entre le modem et le Wi-Fi/USB sans envoyer le trafic via le processeur principal.

Implémentation

Pour activer la fonctionnalité de déchargement du partage de connexion, vous devez implémenter un HAL de configuration (IOffloadConfig) et un HAL de contrôle (IOffloadControl).

HAL de configuration : IOffloadConfig

Le HAL IOffloadConfig démarre l'implémentation du déchargement du partage de connexion. Le framework fournit l'implémentation HAL avec des sockets NF_NETLINK_CONNTRACK préconnectés que l'implémentation peut utiliser pour observer les flux IPv4. Seuls les flux transférés doivent être accélérés.

HAL de contrôle : IOffloadControl

La couche HAL IOffloadControl contrôle l'implémentation du déchargement. Les méthodes suivantes doivent être implémentées :

  • Démarrer/arrêter le déchargement matériel : utilisez initOffload/stopOffload et exemptez les adresses IP locales ou d'autres réseaux du déchargement avec setLocalPrefixes.
  • Définissez l'interface en amont, l'adresse IPv4 et les passerelles IPv6 : utilisez setUpstreamParameters et configurez les plages d'adresses IP en aval avec addDownstream/removeDownstream.
  • Comptabilisation de l'utilisation des données : utilisez getForwardedStats/setDataLimit.

Votre HAL de fournisseur doit également envoyer des rappels via l'interface ITetheringOffloadCallback, qui informe le framework des éléments suivants :

  • Événements asynchrones tels que le démarrage et l'arrêt du déchargement (OffloadCallbackEvent)
  • Mises à jour du délai d'expiration NAT, qui doivent être envoyées régulièrement pour indiquer qu'un flux IPv4 spécifique contient du trafic et ne doit pas être fermé par le noyau

Validation

Pour valider l'implémentation du déchargement du partage de connexion, utilisez des tests manuels ou automatisés pour vérifier que le partage de connexion et le point d'accès Wi-Fi fonctionnent comme prévu. La Vendor Test Suite (VTS) contient des tests pour les HAL de déchargement du partage de connexion.