netutils-wrapper-1.0
Инструменты настройки сетевого стека
Тип файла: команда
Комментарии
Оболочка NETUTILS
Операционная система Android содержит стандартные сетевые утилиты Linux,
такие как ifconfig , ip и ip6tables .
Эти утилиты находятся в образе системы и позволяют настраивать весь сетевой стек Linux.
На устройствах под управлением Android 7.x и ниже коду поставщика разрешено напрямую вызывать
эти двоичные файлы, что создает следующие проблемы:
Поскольку сетевые утилиты обновляются в образе системы, они не обеспечивают стабильной работы.
Набор сетевых утилит настолько широк, что сложно развивать образ системы,
гарантируя при этом предсказуемое поведение.
На устройствах под управлением Android 8.0 и выше раздел поставщика остается прежним,
а системный раздел получает обновление.
Для этого в Android 8.0 предусмотрена возможность определить стабильный версионный интерфейс,
а также использовать ограничения SELinux, чтобы сохранить взаимозависимость производителя
и образа системы в заведомо хорошем наборе.
Поставщики могут использовать предоставленные платформой утилиты настройки сети
для настройки сетевого стека Linux, но эти утилиты еще не включают интерфейсную оболочку HIDL.
Для определения такого интерфейса в Android 8.0 включен netutils-wrapper-1.0
ОБОЛОЧКА NETUTILS
Утилита-оболочка netutils предоставляет подмножество конфигурации сетевого стека Linux,
на которую не влияют обновления системного раздела.
Android 8.0 содержит обертки версии 1.0, которые позволяют передавать те же аргументы,
что и обернутые утилиты, установленные в системный раздел в /system/bin следующим образом:
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
Симлинки показывают сетевые утилиты, обернутые оболочкой netutils , в том числе:
ip
iptables
ip6tables
ndc
tc
Чтобы использовать эти утилиты в Android 8.0 и более поздних версиях, реализации поставщиков
должны соответствовать следующим правилам:
Процессы поставщика не должны запускать /system/bin/netutils-wrapper-1.0 напрямую;
попытки сделать это приведут к ошибке.
Все утилиты, обернутые netutils-wrapper-1.0 , должны запускаться по их симлинкам.
Например, измените код поставщика, который делал это раньше ( /system/bin/ip <FOO> <BAR> )
на /system/bin/ip-wrapper-1.0 <FOO> <BAR> .
Выполнение обёрток без смены домена запрещено политикой платформы SELinux.
Это правило нельзя изменять, и оно проверено в наборе тестов на совместимость с Android (CTS) .
Выполнение утилит напрямую (например, /system/bin/ip <FOO> <BAR> ) из процессов поставщика
также запрещено политиками платформы SELinux. Это правило нельзя изменять, и оно проверено в CTS.
Любой домен поставщика (процесс), которому необходимо запустить оболочку, должен добавить
следующее правило перехода домена в политику SELinux:
domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper) .
Примечание. Дополнительные сведения о SELinux в Android 8.0 и более поздних версиях см.
в разделе Настройка SEPolicy в Android 8.0+ .
ФИЛЬТРЫ-ОБОЛОЧКИ NETUTILS
Обернутые утилиты можно использовать для настройки практически любого аспекта сетевого стека Linux.
Однако для обеспечения стабильного интерфейса и разрешения обновлений системного раздела разрешены
только определенные комбинации аргументов командной строки; другие команды будут отклонены.
Интерфейсы и цепочки поставщиков
Обертка имеет концепцию интерфейсов поставщиков.
Это интерфейсы, обычно управляемые кодом поставщика, например интерфейсы передачи данных по сотовой сети.
Как правило, другие типы интерфейсов (например, Wi-Fi) управляются HAL и инфраструктурой.
Оболочка распознает интерфейсы поставщика по имени (используя регулярное выражение)
и позволяет коду поставщика выполнять над ними множество операций.
В настоящее время интерфейсы поставщиков:
Интерфейсы, имена которых заканчиваются на «oem», за которым следует номер, например, oem0 или r_oem1234 .
Интерфейсы, используемые текущими реализациями SOC и OEM, например rmnet_data[0-9] .
Имена интерфейсов, которыми обычно управляет инфраструктура (например, wlan0 ),
никогда не являются интерфейсами поставщиков.
Оболочка имеет аналогичную концепцию цепочек поставщиков.
Они используются в командах iptables и также распознаются по имени.
В настоящее время торговые сети:
Начните с oem_ .
Используются текущими реализациями SOC и OEM, например, цепочки, начинающиеся с nm_ или qcom_ .
РАЗРЕШЕННЫЕ КОМАНДЫ
В настоящее время разрешенные команды перечислены ниже.
Ограничения реализуются через набор регулярных выражений в исполняемых командных строках.
Подробности см. в system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp
IP
Команда ip используется для настройки IP-адресов, маршрутизации, шифрования IPsec и ряда других параметров сети. Оболочка допускает следующие команды:
Добавляйте и удаляйте IP-адреса из интерфейсов, управляемых поставщиком.
Настройте шифрование IPsec.
iptables/ip6tables
Команды iptables и ip6tables используются для настройки брандмауэра, управления пакетами, NAT и другой обработки пакетов.
Оболочка допускает следующие функции:
Добавлять и удалять цепочки поставщиков.
Добавлять и удалять правила в любой цепочке, которая относится к пакетам, входящим ( -i ) или исходящим ( -o ) интерфейсу поставщика.
Перейти к цепочке поставщиков из любой точки любой другой цепочки.
ndc
Команда ndc используется для связи с демоном netd , который выполняет большую часть настройки сети на Android.
Оболочка допускает следующие функции:
Создавать и уничтожать OEM-сети ( oemXX).
Добавить интерфейсы, управляемые поставщиком, в OEM-сети.
Добавить маршруты к сетям OEM.
Включить или отключить IP-переадресацию глобально и на интерфейсах поставщиков.
tc
Команда tc используется для настройки организации очереди и формирования трафика на интерфейсах поставщиков