Стек протоколов

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

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

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

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

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

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

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

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

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

    • apf
    • dhcp
    • ip
    • netlink
    • util (частично)
  • Обнаружение страниц входа и авторизация на них. В 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 являются частью основного модуля и не могут быть изменены.

Формат пакета

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

  • Сервисы IP
  • Авторизация на странице входа (com.google.android.captiveportallogin)

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

Связанные запросы

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

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

  • Binder IPCs to netd defined in INetd.aidl. Этот интерфейс был преобразован в стабильный AIDL и подвергается проверкам соответствия.