Сетевой стек

Сетевой стек — это обновляемый модуль Mainline, который обеспечивает адаптацию Android к развивающимся сетевым стандартам и позволяет взаимодействовать с новыми реализациями. Например, обновления обнаружения портала захвата и кода входа позволяют Android оставаться в курсе меняющихся моделей портала захвата, а обновления APF позволяют Android экономить заряд Wi-Fi, поскольку новые типы пакетов становятся обычным явлением.

Включенные компоненты

Модуль сетевого стека содержит следующие компоненты. На устройствах, использующих модуль, эти службы были перемещены в другой процесс и доступны через стабильный интерфейс AIDL.

  • IP-сервисы. IpClient (ранее IpManager ) — компонент, отвечающий за предоставление и обслуживание уровня IP. В Android 9 он уже использовался кросс-процессно такими компонентами, как Bluetooth, и внутрипроцессно такими компонентами, как Wi-Fi. DhcpClient получает IP-адреса от DHCP-серверов, чтобы их можно было назначить интерфейсам.

  • NetworkMonitor. Компонент NetworkMonitor проверяет доступность интернета при подключении к новой сети или при сбоях в работе сети, при обнаружении порталов захвата и при проверке сетей.

  • Приложение для входа в Captive portal. Предустановленное приложение, отвечающее за управление входом в Captive portals. Это отдельное приложение с Android 5.0, но оно взаимодействует с NetworkMonitor для пересылки некоторых пользовательских выборов в систему.

Затронутые пути

Пути, перенесенные в модуль сетевого стека в результате рефакторинга, перечислены ниже.

  • IP-сервисы. В frameworks/base/services/net/java/android/net/ :

    • apf
    • dhcp
    • ip
    • netlink
    • util (частично)
  • Обнаружение и вход в портал Captive. В frameworks/base/ :

    • core/java/android/net/captiveportal/
    • services/core/java/com/android/server/connectivity/NetworkMonitor.java
    • packages/CaptivePortalLogin/*

Новое расположение перемещенного кода находится в packages/modules/NetworkStack , packages/modules/CaptivePortalLogin и некоторых других общих расположениях. Указанные выше пути относятся к расположению файлов до перемещения туда для Mainline. Файлы в packages/modules/NetworkStack и packages/modules/CaptivePortalLogin являются частью модуля Mainline и не могут быть изменены.

Формат упаковки

Модуль сетевого стека содержит следующие компоненты в формате APK:

  • IP-услуги
  • Вход в портал Captive ( com.google.android.captiveportallogin )

Этот модуль сопровождается модулем конфигурации разрешений сетевого стека, который представляет собой предустановленный APK-файл, определяющий необходимые разрешения для компонентов сетевого стека.

Зависимости

Модуль сетевого стека зависит от следующего:

  • Привилегированные методы @hide на системном сервере (например, в IConnectivityManager.aidl ). Эти API были сделаны @SystemApi и соответствующим образом защищены, чтобы они были доступны для модуля Mainline, но не для других привилегированных приложений (например, с использованием нового разрешения подписи).

  • Связывание IPC с netd , определенным в INetd.aidl . Этот интерфейс был преобразован в стабильный AIDL и подлежит тестам на соответствие.