Déchargement du matériel de partage de connexion

Le déchargement du partage de connexion permet aux appareils d'économiser de l'énergie et d'améliorer les performances en déchargeant 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, contournant le processeur de l'application.

Caractéristiques

À partir d'Android 8.1, les appareils peuvent utiliser le déchargement de 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 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 connecté et le trafic des appareils, les paquets de configuration/désinstallation de session IPv4 (par exemple, SYN/SYN+ACK, FIN) doivent être traités par 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'adresses 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 des descripteurs de fichiers fournis par le framework et gère ces flux matériellement. Cela signifie que l'implémentation de HAL ne nécessite pas CAP_NET_* car le HAL obtient les sockets NF_NETLINK_CONNTRACK ouvertes à partir du framework. Périodiquement, le matériel envoie des mises à jour d'é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 connectés peuvent être déchargés.

Pour la comptabilité de l'utilisation des données, les sondages d'utilisation des données NetworkStatsService amènent l'infrastructure à demander des statistiques de trafic au matériel. Le framework communique également les limites d'utilisation des données au matériel via le HAL.

Exigences matérielles

Pour mettre en œuvre 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.

Mise en œuvre

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

Configuration HAL : IOffloadConfig

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

Contrôle HAL : IOffloadControl

Le IOffloadControl HAL contrôle l’implémentation du déchargement. Les méthodes suivantes doivent être mises en œuvre :

  • Démarrer/arrêter le matériel de déchargement : utilisez initOffload/stopOffload et exemptez les adresses IP locales ou d'autres réseaux du déchargement 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 .
  • Comptabilité de l'utilisation des données : utilisez getForwardedStats/setDataLimit .

Votre fournisseur HAL doit également envoyer des rappels via l'interface ITetheringOffloadCallback , qui renseigne le cadre de :

  • Événements asynchrones tels que le démarrage et l'arrêt du déchargement (OffloadCallbackEvent)
  • Mises à jour du délai d'attente 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 mise en œuvre du déchargement de 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 suite de tests du fournisseur (VTS) contient des tests pour les HAL de déchargement de connexion.