Outils de configuration de la pile réseau

Le système d'exploitation Android contient des utilitaires réseau Linux standards comme ifconfig, ip et ip6tables. Ces utilitaires résident sur l'image système et permettent de configurer l'ensemble de la pile réseau Linux. Sur les appareils équipés d'Android 7.x ou version antérieure, le code du fournisseur est autorisé à appeler directement ces binaires, ce qui présente le les problèmes suivants:

  • Comme les utilitaires réseau sont mis à jour dans l'image système, ils n'ont pas de fournir une implémentation stable.
  • Le champ d'application des utilitaires de mise en réseau est si vaste qu'il est difficile de faire évoluer l'image système tout en garantissant un comportement prévisible.

Sur les appareils équipés d'Android 8.0 ou version ultérieure, la partition des fournisseurs reste la même. tandis que la partition système reçoit une mise à jour. Pour ce faire, Android 8.0 permet de définir une interface stable avec versions gérées tout en utilisant Restrictions de SELinux pour maintenir l'interdépendance du fournisseur et de l'image système ensemble connu.

Les fournisseurs peuvent utiliser les utilitaires de configuration réseau fournis par la plate-forme pour configurer la pile réseau Linux, mais ces utilitaires n'incluent pas encore Wrapper d'interface HIDL. Pour définir une telle interface, Android 8.0 inclut le Outil netutils-wrapper-1.0.

Wrapper Netutils

L'utilitaire wrapper netutils fournit un sous-ensemble du package Linux configuration de la pile réseau qui n'est pas affectée par les mises à jour des partitions système. Android 8.0 contient la version 1.0 des wrappers, ce qui vous permet de transmettre le les mêmes arguments que les utilitaires encapsulés, installés dans la partition système à l'adresse /system/bin comme suit:

u:object_r:system_file:s0           /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0

Les liens symboliques indiquent les utilitaires réseau encapsulés par netutils. qui inclut les éléments suivants:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Pour utiliser ces utilitaires dans Android 8.0 et versions ultérieures, les implémentations des fournisseurs doivent respectent les règles suivantes:

  • Les processus du fournisseur ne doivent pas s’exécuter /system/bin/netutils-wrapper-1.0 directement ; tente de le faire entraîne une erreur.
  • Tous les utilitaires encapsulés par netutils-wrapper-1.0 doivent être lancés à l'aide de leurs liens symboliques. Par exemple, modifiez le code fournisseur qui effectuait cette opération auparavant. (/system/bin/ip <FOO> <BAR>) jusqu'à /system/bin/ip-wrapper-1.0 <FOO> <BAR>
  • L'exécution des wrappers sans transition de domaine est interdite sur la plate-forme Règles de SELinux Cette règle ne doit pas être modifiée et fait l'objet d'un test dans le Android Compatibility Test Suite (CTS)
  • Exécuter directement les utilitaires (par exemple, /system/bin/ip <FOO> <BAR>) des processus du fournisseur est également interdite dans les règles de la plateforme SELinux. Cette règle ne doit pas être modifiées et sont testées dans CTS.
  • Tout domaine (processus) de fournisseur devant lancer un wrapper doit ajouter le paramètre règle de transition de domaine suivante dans la règle SELinux: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)

Filtres de wrapper Netutils

Les utilitaires encapsulés peuvent être utilisés pour configurer presque tous les aspects de Linux la pile réseau. Toutefois, pour s'assurer qu'il est possible de maintenir un niveau et autoriser les mises à jour de la partition système, seules certaines combinaisons d'arguments de ligne de commande sont autorisés. les autres commandes sont rejetées.

Interfaces et chaînes des fournisseurs

Le wrapper est associé à un concept d'interface fournisseur. Il s'agit d'interfaces généralement gérées par le code fournisseur, comme les interfaces de données mobiles. Généralement, les autres types d'interfaces (comme le Wi-Fi) sont gérés par les HAL et le d'infrastructure. Le wrapper reconnaît les interfaces de fournisseurs par leur nom (à l'aide d'un d'expression) et permet au code fournisseur d'effectuer de nombreuses opérations sur ceux-ci. Actuellement, les interfaces fournisseurs sont les suivantes:

  • Interfaces dont le nom se termine par "oem" suivi d'un nombre, par exemple oem0 ou r_oem1234.
  • Interfaces utilisées par les implémentations actuelles SOC et OEM, telles que rmnet_data[0-9]

Noms des interfaces généralement gérées par le framework (comme wlan0) ne sont jamais des interfaces de fournisseurs.

Le wrapper utilise un concept semblable aux chaînes de fournisseurs. Ceux-ci sont utilisés dans les commandes iptables et sont également reconnus par leur nom. Actuellement, chaînes de fournisseurs:

  • Commencez par oem_.
  • sont utilisés par les implémentations actuelles des SOC et des OEM (chaînes commençant par nm_ ou qcom_.

Commandes autorisées

Les commandes actuellement autorisées sont listées ci-dessous. Les restrictions sont appliquées via un ensemble d'expressions régulières dans les lignes de commande exécutées. Pour en savoir plus, consultez à system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp.

adresse IP

La commande ip permet de configurer les adresses IP, le routage, le chiffrement et un certain nombre d'autres paramètres réseau. Le wrapper permet au les commandes suivantes:

  • Ajouter et supprimer des adresses IP dans les interfaces gérées par le fournisseur
  • Configurez le chiffrement IPsec.

iptables et ip6tables

Les commandes iptables et ip6tables permettent de configurer le pare-feu, la gestion des paquets, la NAT et d'autres traitements par paquet. Le wrapper autorise les commandes suivantes:

  • Ajouter et supprimer des chaînes de fournisseurs.
  • Ajoutez et supprimez des règles dans toute chaîne faisant référence aux paquets entrants (-i) ou sur (-o) une interface fournisseur.
  • Accédez à une chaîne de fournisseurs à partir de n'importe quel point de n'importe quelle autre chaîne.

ndc

ndc permet de communiquer au daemon netd que effectue la majeure partie de la configuration réseau sur Android. Le wrapper permet ce qui suit : commandes:

  • Créer et détruire des réseaux OEM (oemXX)
  • Ajoutez des interfaces gérées par le fournisseur aux réseaux OEM.
  • Ajoutez des routes aux réseaux OEM.
  • Activez ou désactivez le transfert IP de manière globale et sur les interfaces des fournisseurs.

à confirmer

La commande tc permet de configurer la mise en file d'attente et la mise en forme du trafic. sur les interfaces des fournisseurs.