Narzędzia konfiguracji stosu sieciowego

System operacyjny Android zawiera standardowe narzędzia sieciowe systemu Linux, takie jak ifconfig , ip i ip6tables . Narzędzia te znajdują się w obrazie systemu i umożliwiają konfigurację całego stosu sieciowego systemu Linux. Na urządzeniach z systemem Android 7.x i starszym kod dostawcy może bezpośrednio wywoływać te pliki binarne, co stwarza następujące problemy:

  • Ponieważ narzędzia sieciowe są aktualizowane w obrazie systemu, nie zapewniają one stabilnej implementacji.
  • Zakres narzędzi sieciowych jest tak szeroki, że trudno jest ewoluować obraz systemu, gwarantując jednocześnie przewidywalne zachowanie.

Na urządzeniach z systemem Android 8.0 i nowszym partycja dostawcy pozostaje taka sama, podczas gdy partycja systemowa otrzymuje aktualizację. Aby to osiągnąć, Android 8.0 zapewnia możliwość zdefiniowania stabilnego, wersjonowanego interfejsu, jednocześnie wykorzystując ograniczenia SELinux, aby utrzymać współzależność dostawcy i obrazu systemu na znanym dobrym poziomie.

Dostawcy mogą korzystać z dostarczonych przez platformę narzędzi do konfiguracji sieci w celu skonfigurowania stosu sieciowego systemu Linux, ale narzędzia te nie zawierają jeszcze opakowania interfejsu HIDL. Aby zdefiniować taki interfejs, Android 8.0 zawiera narzędzie netutils-wrapper-1.0 .

Opakowanie Netutils

Narzędzie opakowania netutils udostępnia podzbiór konfiguracji stosu sieciowego systemu Linux, na który nie mają wpływu aktualizacje partycji systemowych. Android 8.0 zawiera wersję 1.0 wrapperów, która umożliwia 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

Dowiązania symboliczne pokazują narzędzia sieciowe opakowane w opakowanie netutils , które obejmują:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Aby móc korzystać z tych narzędzi w systemie Android 8.0 i nowszych wersjach, dostawcy muszą przestrzegać następujących zasad:

  • Procesy dostawcy nie mogą bezpośrednio wykonywać /system/bin/netutils-wrapper-1.0 ; próby zrobienia tego zakończą się błędem.
  • Wszystkie narzędzia opakowane w netutils-wrapper-1.0 muszą zostać uruchomione przy użyciu ich dowiązań symbolicznych. Na przykład zmień kod dostawcy, który zrobił to wcześniej ( /system/bin/ip <FOO> <BAR> ) na /system/bin/ip-wrapper-1.0 <FOO> <BAR> .
  • Wykonywanie wrapperów bez zmiany domeny jest zabronione w polityce platformy SELinux. Tej reguły nie można zmieniać i jest ona sprawdzana w ramach zestawu testów zgodności systemu Android (CTS) .
  • Bezpośrednie wykonywanie narzędzi (np. /system/bin/ip <FOO> <BAR> ) z procesów dostawcy jest również zabronione w zasadach platformy SELinux. Zasada ta nie może być zmieniana i jest sprawdzana w CTS.
  • Każda domena (proces) dostawcy, która musi uruchomić opakowanie, musi dodać następującą regułę przenoszenia domeny w zasadach SELinux: domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper) .

Filtry otokowe Netutils

Opakowane narzędzia mogą być użyte do skonfigurowania niemal dowolnego aspektu stosu sieciowego Linuksa. Jednakże, aby zapewnić stabilność interfejsu i umożliwić aktualizację partycji systemowej, dozwolone są tylko pewne kombinacje argumentów wiersza poleceń; inne polecenia zostaną odrzucone.

Interfejsy i łańcuchy dostawców

Opakowanie ma koncepcję interfejsów dostawców . Są to interfejsy zwykle zarządzane przez kod dostawcy, np. interfejsy danych komórkowych. Zwykle inne typy interfejsów (takie jak Wi-Fi) są zarządzane przez warstwy HAL i platformę. Opakowanie rozpoznaje interfejsy dostawcy po nazwie (za pomocą wyrażenia regularnego) 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 którym następuje liczba, na przykład oem0 lub r_oem1234 .
  • Interfejsy używane w bieżących implementacjach SOC i OEM, takie jak rmnet_data[0-9] .

Nazwy interfejsów zwykle zarządzanych przez platformę (takie jak wlan0 ) nigdy nie są interfejsami dostawców.

Opakowanie ma podobną koncepcję łańcuchów dostawców . Są one używane w poleceniach iptables i są również rozpoznawane po nazwie. Obecnie sieci dostawców:

  • Zacznij od oem_ .
  • Są używane w bieżących implementacjach SOC i OEM, np. łańcuchy zaczynające się od nm_ lub qcom_ .

Dozwolone polecenia

Aktualnie dozwolone polecenia są wymienione poniżej. Ograniczenia są implementowane poprzez zestaw wyrażeń regularnych w wykonywanych wierszach poleceń. Aby uzyskać szczegółowe informacje, zobacz system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp .

ip

Polecenie ip służy do konfigurowania adresów IP, routingu, szyfrowania IPsec i wielu innych parametrów sieciowych. Opakowanie umożliwia wykonanie następujących poleceń:

  • Dodawaj i usuwaj adresy IP z interfejsów zarządzanych przez dostawcę.
  • Skonfiguruj szyfrowanie IPsec.

iptables/ip6tables

Polecenia iptables i ip6tables służą do konfigurowania zapory sieciowej, zarządzania pakietami, NAT i innych procesów przetwarzania pakietów. Opakowanie umożliwia wykonanie następujących poleceń:

  • Dodawaj i usuwaj łańcuchy dostawców.
  • Dodawaj i usuwaj reguły w dowolnym łańcuchu, które odnoszą się do pakietów wchodzących do ( -i ) lub wychodzących z ( -o ) interfejsu dostawcy.
  • Przejdź do łańcucha dostawców z dowolnego punktu w dowolnym innym łańcuchu.

ndc

ndc służy do komunikacji z demonem netd , który wykonuje większość konfiguracji sieci w systemie Android. Opakowanie umożliwia wykonanie następujących poleceń:

  • Twórz i niszcz sieci OEM ( oemXX ).
  • Dodaj interfejsy zarządzane przez dostawcę do sieci OEM.
  • Dodaj trasy do sieci OEM.
  • Włącz lub wyłącz przekazywanie adresów IP globalnie i w interfejsach dostawców.

tc

Polecenie tc służy do konfigurowania kolejkowania i kształtowania ruchu w interfejsach dostawców.