модем

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

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

Обзор

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

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

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

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

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

Для поддержки вариантов использования раздельного туннелирования в 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-сервисы В packages/modules/CrossDevice/service
  • NearbyService - API сканирования

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

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

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

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

  • Wi-Fi
  • Bluetooth
  • СШП
  • модули-утилиты-предварительные условия
  • Прото библиотеки

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

Мы планируем разрешить OEMS настраивать пользовательский интерфейс для половины листа через RRO. Плана настраивать функционал нет.

Стратегия тестирования CrossDevice

Мы планируем добавить тесты 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) проверяет функциональность модуля Tethering.