Das Android-Betriebssystem enthält Standard-Linux-Netzwerkdienstprogramme.
z. B. ifconfig
, ip
und ip6tables
.
Diese Dienstprogramme befinden sich auf dem System-Image und ermöglichen die Konfiguration der
den gesamten Linux-Netzwerk-Stack. Auf Geräten mit Android 7.x und niedriger
Anbietercode ist berechtigt, diese Binärdateien direkt aufzurufen, wodurch die
folgenden Problemen:
- Da Netzwerkdienstprogramme im System-Image aktualisiert werden, für eine stabile Implementierung.
- Der Umfang der Netzwerkdienstprogramme ist so breit, dass es schwierig ist, System-Image zu speichern und ein vorhersehbares Verhalten zu gewährleisten.
Auf Geräten mit Android 8.0 und höher bleibt die Anbieterpartition unverändert. während die Systempartition aktualisiert wird. Um dies zu erreichen, wurde Android 8.0 können Sie eine stabile, versionierte Oberfläche definieren und gleichzeitig SELinux-Einschränkungen, um die Abhängigkeit von Anbieter und System-Image gutes Set kennen.
Anbieter können die von der Plattform bereitgestellten Dienstprogramme zur Netzwerkkonfiguration nutzen,
den Linux-Netzwerkstack konfigurieren, aber diese Dienstprogramme enthalten noch kein
HIDL-Schnittstellen-Wrapper. Um eine solche Schnittstelle zu definieren, enthält Android 8.0 die
netutils-wrapper-1.0
-Tool.
Netutils-Wrapper
Das Wrapper-Dienstprogramm netutils
bietet einen Teil des
Konfiguration des Netzwerk-Stacks, die nicht von Updates der Systempartition betroffen ist.
Android 8.0 enthält Version 1.0 der Wrapper, mit denen Sie den
dieselben Argumente wie die umschlossenen Dienstprogramme, die in der Systempartition unter
/system/bin
so:
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
Symlinks zeigen die Netzwerkdienstprogramme an, die vom netutils
umschlossen werden.
Wrapper mit Folgendem:
ip
iptables
ip6tables
ndc
tc
Um diese Dienstprogramme in Android 8.0 und höher verwenden zu können, müssen die Anbieterimplementierungen müssen folgende Regeln eingehalten werden:
- Zulieferunternehmen dürfen keine
/system/bin/netutils-wrapper-1.0
direkt; versuchen, dies zu tun zu Fehlern führt. - Alle von
netutils-wrapper-1.0
umschlossenen Dienstprogramme müssen gestartet werden über ihre Symlinks. Ändern Sie beispielsweise den Anbietercode, der dies zuvor getan hat. (/system/bin/ip <FOO> <BAR>
) bis/system/bin/ip-wrapper-1.0 <FOO> <BAR>
. - Die Ausführung der Wrapper ohne Domainumstellung ist auf der Plattform nicht zulässig SELinux-Richtlinie. Diese Regel darf nicht geändert werden und wird im Android Compatibility Test Suite (CTS)
- Dienstprogramme direkt ausführen (z.B.
/system/bin/ip <FOO> <BAR>
) von den Anbieterprozessen ist auch in den SELinux-Richtlinien der Plattform nicht zulässig. Diese Regel darf nicht geändert und in CTS getestet. - Jede Anbieterdomain (Prozess), die einen Wrapper starten muss, muss den Parameter
folgende Regel für den Domainwechsel in der SELinux-Richtlinie:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
Netutils-Wrapper-Filter
Mit verpackten Dienstprogrammen können fast alle Aspekte des Linux-Systems Ihres Netzwerk-Stacks. Um jedoch eine stabile und Updates der Systempartition zulassen, sind nur bestimmte Kombinationen von Befehlszeilenargumenten sind zulässig. andere Befehle werden abgelehnt.
Benutzeroberflächen und Ketten von Anbietern
Der Wrapper beruht auf dem Konzept von Anbieteroberflächen. Das sind Schnittstellen, in der Regel über Anbietercode wie mobile Datenschnittstellen verwaltet werden. Normalerweise andere Schnittstellen (z. B. WLAN) von den HALs und den Framework. Der Wrapper erkennt Anbieteroberflächen anhand des Namens (mit einem regulären Ausdruck) und ermöglicht es dem Anbietercode, viele Vorgänge darauf auszuführen. Derzeit gibt es folgende Schnittstellen für Anbieter:
- Schnittstellen, deren Namen auf "oem" enden gefolgt von einer Zahl wie
oem0
oderr_oem1234
. - Schnittstellen, die von aktuellen SOC- und OEM-Implementierungen verwendet werden, z. B.
rmnet_data[0-9]
Namen von Schnittstellen, die in der Regel vom Framework verwaltet werden (z. B.
wlan0
) sind niemals Anbieterschnittstellen.
Der Wrapper nutzt ein ähnliches Konzept von Anbieterketten. Diese werden verwendet,
in iptables
-Befehlen und werden auch namentlich erkannt. Derzeit
Zulieferketten:
- Beginnen Sie mit
oem_
. - werden von aktuellen SOC- und OEM-Implementierungen verwendet, z.B. Ketten
nm_
oderqcom_
.
Zulässige Befehle
Derzeit zulässige Befehle sind unten aufgeführt. Einschränkungen werden über
eine Reihe regulärer Ausdrücke
in den ausgeführten Befehlszeilen. Weitere Informationen finden Sie unter
an system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
.
IP-Adresse
Mit dem Befehl ip
werden IP-Adressen, Routing und IPsec konfiguriert
Verschlüsselung und einige andere Netzwerkparameter. Der Wrapper ermöglicht den
folgenden Befehle:
- Fügen Sie IP-Adressen von Anbietern verwalteten Schnittstellen hinzu oder entfernen Sie sie.
- Konfigurieren Sie die IPsec-Verschlüsselung.
iptables und ip6tables
Die Befehle iptables
und ip6tables
werden verwendet, um
Firewalls, Paketverwaltung, NAT und andere
Verarbeitung einzelner Pakete konfigurieren.
Der Wrapper ermöglicht die folgenden Befehle:
- Hinzufügen und Löschen von Anbieterketten
- Fügen Sie Regeln in jeder Kette hinzu, die auf Pakete verweist,
(
-i
) oder von (-o
) einer Anbieteroberfläche. - Sie können an jeder beliebigen Stelle in einer beliebigen anderen Kette zu einer Lieferantenkette springen.
NDC
ndc
wird für die Kommunikation mit dem netd
-Daemon verwendet,
die meisten Netzwerkkonfigurationen
unter Android ausführt. Der Wrapper ermöglicht Folgendes:
Befehle:
- Erstellen und löschen Sie OEM-Netzwerke (
oemXX
). - Fügen Sie OEM-Netzwerken anbieterverwaltete Schnittstellen hinzu.
- Fügen Sie Routen zu OEM-Netzwerken hinzu.
- Aktivieren oder deaktivieren Sie die IP-Weiterleitung global und auf Anbieterschnittstellen.
TC
Mit dem Befehl tc
können Sie Traffic-Warteschlangen und ‐Formulierungen konfigurieren
zu Anbieteroberflächen.