Изменения в 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
|
| Сервисы для работы на нескольких устройствах | В packages/modules/CrossDevice/service
|
Формат пакета 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.javaframeworks/base/services/core/java/com/android/server/connectivity/tethering/frameworks/base/services/core/java/com/android/server/NetworkManagementService.javaframeworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.javaframeworks/base/services/net/java/android/net/{netlink,dhcp}/*frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.javaframeworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidlframeworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.javaframeworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.javaframeworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.javaframeworks/base/core/java/android/os/INetworkManagementService.aidlframeworks/base/core/java/android/bluetooth/BluetoothPan.javaframeworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpppackages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.javapackages/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 взаимодействуют с системным сервером.
tetheroffloadHIDL (определено вhardware/interfaces/tetheroffload/)- DHCP-сервер (часть модуля сетевого стека)
Настройка канала
Модуль "Режим модема" нельзя настроить.
Тестирование
Android Compatibility Test Suite (CTS) проверяет функциональность модуля Tethering.