Déchargement matériel du partage de connexion

Le transfert de partage de connexion permet aux appareils d'économiser de l'énergie et d'améliorer les performances en transférant le trafic de partage de connexion (via USB, Wi-Fi) vers 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 transfert de partage de connexion pour transférer le transfert IPv4, IPv6 ou IPv4+IPv6 vers le matériel.

La fonctionnalité de transfert n'a pas besoin de transférer tous les paquets. Le framework est capable de gérer n'importe quel paquet dans le logiciel. Les paquets de contrôle sont généralement traités par logiciel. Étant donné que les ports IPv4 sont partagés entre le trafic associé et le trafic de l'appareil, les paquets de configuration/de suppression de session IPv4 (par exemple, SYN/SYN+ACK, FIN) doivent être traités en logiciel afin que le noyau puisse construire l'état de flux. Le framework fournit le plan de contrôle et les machines d'état. 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 en matériel. Cela signifie que l'implémentation du HAL ne nécessite pas de CAP_NET_*, car le HAL ouvre des sockets NF_NETLINK_CONNTRACK à partir du framework. De manière périodique, 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 des connexions du noyau correspondantes.

Pour IPv6, le framework programme une liste de préfixes de destination IPv6 auxquels le trafic ne doit pas être transféré. Tous les autres paquets de partage de connexion peuvent être transférés.

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

Configuration matérielle requise

Pour implémenter le transfert de 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 transfert de partage de connexion, vous devez implémenter les deux éléments suivants : 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 transfert de partage de connexion. Le framework fournit à l'implémentation HAL 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

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

  • Démarrer/arrêter le matériel de transfert: utilisez initOffload/stopOffload et exemptez les adresses IP locales ou d'autres réseaux du transfert avec setLocalPrefixes.
  • Définir 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 la consommation de données: utilisez getForwardedStats/setDataLimit.

Le HAL de votre 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 de l'externalisation (OffloadCallbackEvent)
  • Mises à jour du délai avant expiration NAT, qui doivent être envoyées périodiquement pour indiquer qu'un flux IPv4 spécifique contient du trafic et ne doit pas être fermé par le noyau

Validation

Pour valider votre implémentation du transfert de partage de connexion, effectuez 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 suite de tests du fournisseur (VTS) contient des tests pour les HAL de transfert de partage de connexion.