Режим модема

Изменения в Android 13

Обновить Дополнительная информация
Представлена функция CrossDevice CrossDevice
Раздельное туннелирование Раздельное туннелирование

Обзор

Модуль "Режим модема" позволяет устройству Android делиться подключением к интернету с другими клиентскими устройствами, которые могут подключаться к устройству в режиме модема через Wi-Fi, USB, Bluetooth или Ethernet. Этот модуль включает компонент режима модема (USB, точку доступа Wi-Fi, Bluetooth и т. д.) и его зависимости (взаимодействие с правом на использование режима модема, IpServer и offloadController). Модуль можно обновлять, то есть он может получать обновления функций вне обычного цикла выпуска Android.

Модуль модема позволяет OEM-производителям в экосистеме Android использовать единую стандартную эталонную реализацию, которая дает следующие преимущества:

  • Конечные пользователи получают единообразный интерфейс на всех устройствах Android и исправления проблем совместимости через обновления модулей.

  • OEM-производители могут выполнять требования операторов связи и при этом сокращать расходы на индивидуальные настройки, поскольку им не нужно по-разному реализовывать одни и те же требования.

Раздельное туннелирование

Чтобы поддерживать случаи использования раздельного туннелирования, в Android 13 добавлен новый API, позволяющий указывать исключенные маршруты.

Раздельное туннелирование – это конфигурация, при которой определенный трафик проходит через VPN, а другой – нет. Распространенный пример – когда организации нужно, чтобы обычный просмотр веб-страниц, приложения, требующие большой пропускной способности (например, YouTube, Netflix), или приложения, чувствительные к задержкам (например, Office 365), обходили VPN. До появления раздельного туннелирования в VpnService.Builder клиент VPN мог указывать, что только некоторые подсети должны быть направлены на него (маршруты include). При раздельном туннелировании можно указать обратное правило: направлять весь трафик в VPN, за исключением определенных подсетей (маршруты exclude).

Подпись нового API для раздельного туннелирования выглядит следующим образом:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

CrossDevice, представленный в Android 13, предназначен для обеспечения связи между устройствами с использованием стандартных протоколов. Он предоставляет API и функции для обнаружения устройств, установления аутентифицированного подключения и других возможностей взаимодействия между устройствами.

Мотивация для использования нескольких устройств

  • Более тесное сотрудничество с партнерами – производителями оригинального оборудования. Производители оригинального оборудования могут интегрировать собственную систему ключей аккаунта с реализацией CrossDevice вместо того, чтобы использовать решение Google.
  • Более заметная реализация протокола. Модуль CrossDevice имеет открытый исходный код, что позволяет лучше понять детали реализации и обеспечивает более высокий уровень конфиденциальности при использовании технологий CrossDevice.

Граница модуля CrossDevice

CrossDevice APIs В packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
Сервисы для работы на нескольких устройствах В packages/modules/CrossDevice/service
  • NearbyService – API сканирования

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

Основная функция этого модуля включена в пакет APEX. Ресурсы упакованы в APK-файл.

Зависимости между устройствами

Для работы функции CrossDevice необходимы следующие компоненты:

  • WiFi
  • Bluetooth
  • СШП
  • modules-utils-preconditions
  • Библиотеки Proto

Настройки для нескольких устройств

Мы планируем разрешить OEM-производителям настраивать интерфейс для полустраницы с помощью RRO. Настраивать эту функцию не планируется.

Стратегия тестирования на разных устройствах

Мы планируем добавить тесты Android Compatibility Test Suite (CTS) для проверки функций CrossDevice и тестирование нескольких устройств в MTS.

Разгрузка режима модема с помощью eBPF

Чтобы обеспечить высокоскоростной режим модема без аппаратной разгрузки, в Android 11 реализовано решение для разгрузки программного обеспечения режима модема под названием eBPF tethering offload для скачивания по протоколу IPv6 (трафик, поступающий на подключенное устройство).

Начиная с Android 12, эта функция (включая программный код eBPF) полностью обеспечивается модулем модема, который поддерживает:

  • Скачивание по IPv6 (трафик, поступающий на подключенное устройство)
  • Загрузка по IPv6 (трафик с подключенного устройства)
  • Загрузка и скачивание данных по протоколам TCP/UDP IPv4 (трафик, поступающий на подключенное устройство и отправляемый с него)
  • Разгрузка eBPF

Эта функция включена по умолчанию, но пользователи могут переопределить конфигурацию config_tether_enable_bpf_offload, задав значение false, с помощью RRO. Подробнее о настройке…

Поддержка IPv4 и IPv6

Модуль модема поддерживает двойной стек IPv4 и IPv6.

  • Для сетей IPv4 модуль настраивает преобразование сетевых адресов (NAT) и использует протокол DHCP для назначения IP-адресов.

  • Для сетей IPv6 модуль использует автонастройку адресов IPv6 без сохранения состояния (SLAAC) для назначения IP-адресов.

Граница модуля

На устройствах с Android 12 и более поздних версий все файлы и папки в каталоге packages/modules/Connectivity входят в область действия модуля Tethering.

Для Android 11 и более ранних версий в модуле Tethering есть следующие файлы Android 10 в packages/modules/Tethering:

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

Формат модуля

Модуль режима модема (com.android.tethering) имеет формат APEX и доступен на устройствах с Android 11 и более поздних версий.

Include ConnectivityService

В Android 12 код ConnectivityService, реализующий центральный компонент подключения L3+, добавлен в Tethering APEX. Функция "Режим модема" перенесена в модуль "Подключения".

Зависимости модулей

Модуль "Режим модема" имеет следующие зависимости:

  • Общедоступные и системные методы API на системном сервере
  • Стабильные IPC AIDL взаимодействуют с системным сервером.
  • tetheroffload HIDL (определено в hardware/interfaces/tetheroffload/)
  • DHCP-сервер (часть модуля сетевого стека)

Настройка канала

Модуль "Режим модема" нельзя настроить.

Тестирование

Android Compatibility Test Suite (CTS) проверяет функциональность модуля Tethering.