модем

Обновления в Android 13

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

Обзор

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

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

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

  • Производители оригинального оборудования могут выполнять требования операторов, одновременно сокращая затраты на индивидуальную настройку (поскольку им не требуется реализовывать одни и те же требования разными способами).

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

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

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

Сигнатура нового API раздельного туннелирования:

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

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

Мотивация CrossDevice

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

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

API-интерфейсы CrossDevice В packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
CrossDevice Services В packages/modules/CrossDevice/service
  • NearbyService — API сканирования

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

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

Зависимости CrossDevice

CrossDevice зависит от следующего:

  • Wi-Fi
  • Bluetooth
  • СШП
  • modules-utils-preconditions
  • Прото-библиотеки

Возможности настройки CrossDevice

Мы планируем разрешить производителям оригинального оборудования (OEM) настраивать пользовательский интерфейс для полулиста через RRO. Настройка функциональности не планируется.

Стратегия кросс-девайсного тестирования

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

разгрузка привязки eBPF

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

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

  • Загрузка IPv6 (трафик, идущий на привязанное устройство)
  • Загрузка IPv6 (трафик, идущий от привязанного устройства)
  • Загрузка и выгрузка по протоколу IPv4 TCP/UDP (трафик, текущий к/от привязанного устройства)
  • разгрузка 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 и выше.

Включить ConnectivityService

Начиная с Android 12, код ConnectivityService , реализующий центральный компонент подключения L3+, добавлен в Tethering APEX. Область действия Tethering расширяется до модуля Connectivity.

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

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

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

Настройка

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

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

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