System operacyjny Android zawiera standardowe narzędzia sieciowe Linux.
na przykład ifconfig
, ip
i ip6tables
.
Narzędzia te znajdują się w obrazie systemu i umożliwiają konfigurowanie
i cały stos sieciowy Linuksa. Na urządzeniach z Androidem 7.x lub starszym
może bezpośrednio wywoływać te pliki binarne, co przedstawia
następujące problemy:
- Narzędzia sieciowe są aktualizowane w obrazie systemu, zapewni stabilną implementację.
- Zakres usług komunalnych jest tak szeroki, że trudno jest się do nich dostosować. obrazu systemu, a jednocześnie zagwarantować przewidywalne działanie.
Na urządzeniach z Androidem 8.0 lub nowszym partycja dostawcy pozostaje taka sama . W tym celu na Androidzie 8.0 pozwala zdefiniować stabilny interfejs z różnymi wersjami SELinux ogranicza zależność między dostawcą a obrazem systemu znany dobry zestaw.
Dostawcy mogą korzystać z udostępnianych przez platformę narzędzi do konfiguracji sieci,
jak skonfigurować stos sieciowy z systemem Linux, ale te narzędzia nie zawierają jeszcze
Otoka interfejsu HIDL. Aby zdefiniować taki interfejs, Android 8.0 zawiera
Narzędzie netutils-wrapper-1.0
.
Kod Netutils
Narzędzie do obsługi opakowań netutils
zapewnia podzbiór rozwiązań z systemem Linux
konfiguracji stosu sieciowego, na które nie mają wpływu aktualizacje partycji systemowej.
Android 8.0 zawiera otoki w wersji 1.0, które umożliwiają przekazywanie
tych samych argumentów co opakowane narzędzia, zainstalowane na partycji systemowej w
/system/bin
w następujący sposób:
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
Linki symboliczne pokazują narzędzia sieciowe opakowane przez obiekt netutils
, w tym:
ip
iptables
ip6tables
ndc
tc
Aby można było korzystać z tych narzędzi w Androidzie 8.0 i nowszych, rozwiązania dostawców muszą musisz przestrzegać następujących zasad:
- Procesy dostawcy nie mogą być wykonywane
bezpośrednio
/system/bin/netutils-wrapper-1.0
; usiłuje to zrobić skutkuje błędem. - Wszystkie narzędzia zawarte w pliku
netutils-wrapper-1.0
muszą być uruchomione za pomocą dowiązania symbolicznego. Na przykład zmień kod dostawcy, który to robił wcześniej (/system/bin/ip <FOO> <BAR>
) do/system/bin/ip-wrapper-1.0 <FOO> <BAR>
- Wykonywanie kodów bez przeniesienia domeny jest zabronione na platformie zasadą SELinux. Tej reguły nie można zmieniać i jest ona sprawdzana pod kątem Android Compatibility Test Suite (CTS)
- Bezpośrednie korzystanie z narzędzi (np.
/system/bin/ip <FOO> <BAR>
) z procesów dostawcy. jest również zabronione w zasadach platformy SELinux. Ta reguła nie może być została zmieniona i jest testowana w CTS. - Każda domena (proces), która musi uruchomić kod, musi dodać parametr
tę regułę przenoszenia domeny w zasadzie SELinux:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
Filtry otoki Netutils
Opakowanych narzędzi można używać do konfigurowania niemal każdego aspektu Linuksa i sieciowym stosem sieciowym. Jednak aby mieć pewność, że będzie można utrzymać stabilny i zezwolić na aktualizacje partycji systemowej, tylko niektóre kombinacje dozwolonych argumentów wiersza poleceń; a pozostałe polecenia są odrzucane.
Interfejsy dostawców i łańcuchy dostawców
Kod obejmuje interfejsy dostawców. Oto interfejsy zwykle zarządzane przez kod dostawcy, np. interfejsy komórkowej transmisji danych. Zazwyczaj innymi typami interfejsów (np. Wi-Fi) zarządzają interfejsy HAL i platformy. Kod rozpoznaje interfejsy dostawcy według nazwy (przy użyciu zwykłego ) i umożliwia kodowi dostawcy wykonywanie na nich wielu operacji. Obecnie interfejsy dostawców to:
- Interfejsy, których nazwy kończą się na „oem” po nim dodaj liczbę, taką jak
oem0
lubr_oem1234
. - Interfejsy używane w obecnych implementacjach SOC i OEM, takich jak
rmnet_data[0-9]
Nazwy interfejsów, które zwykle są zarządzane przez platformę (np.
wlan0
) nigdy nie są interfejsami dostawców.
Kod działa podobnie jak łańcuchy dostawców. Są używane
w poleceniach iptables
, a także są rozpoznawane po nazwie. Obecnie
łańcuchy dostawców:
- Zacznij od
oem_
. - są używane w bieżących implementacjach SOC i OEM, np. w sieciach zaczynających się od
nm_
lubqcom_
.
Dozwolone polecenia
Poniżej znajduje się lista aktualnie dozwolonych poleceń. Ograniczenia są wdrażane przez:
zestaw wyrażeń regularnych używanych w wierszach poleceń. Więcej informacji:
do system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
.
ip
Polecenie ip
jest używane do konfigurowania adresów IP, routingu i IPsec
szyfrowanie i inne parametry sieci. Kod umożliwia
następujące polecenia:
- Dodawaj i usuwaj adresy IP z interfejsów zarządzanych przez dostawcę.
- Skonfiguruj szyfrowanie IPsec.
iptables i ip6tables
Polecenia iptables
i ip6tables
są używane do:
konfigurować zapory sieciowe, zarządzanie pakietami, NAT i inne przetwarzanie poszczególnych pakietów.
Kod umożliwia wykonywanie tych poleceń:
- Dodaj i usuń sieci dostawców.
- Dodawaj i usuwaj reguły w dowolnym łańcuchu odwołującym się do pakietów kierowanych do
(
-i
) lub poza (-o
) interfejsu dostawcy. - Przejdź do sieci dostawców z dowolnego miejsca w dowolnej innej sieci.
ndc
ndc
służy do komunikacji z demonem netd
, który
który obsługuje większość konfiguracji sieci na urządzeniach z Androidem. Kod umożliwia:
polecenia:
- Tworzenie i niszczenie sieci OEM (
oemXX
). - Dodaj do sieci OEM interfejsy zarządzane przez dostawcę.
- Dodaj trasy do sieci OEM.
- Możesz włączyć lub wyłączyć przekierowanie adresów IP globalnie i w interfejsach dostawcy.
cd
Polecenie tc
służy do konfigurowania kolejek ruchu i określania jego kształtu
w interfejsach dostawców.