Narzędzia do konfiguracji stosu sieci

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 lub r_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_ lub qcom_.

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.