Разгрузка оборудования привязки

Функция разгрузки привязки (tethering offload) позволяет устройствам экономить энергию и повышать производительность за счет переноса трафика привязки (через USB, Wi-Fi) на аппаратное обеспечение. Разгрузка трафика привязки осуществляется путем обеспечения прямого канала связи между модемом и периферийными устройствами, минуя процессор приложений.

Технические характеристики

Начиная с Android 8.1, устройства могут использовать функцию разгрузки режима модема для переадресации IPv4, IPv6 или IPv4+IPv6 запросов на аппаратное обеспечение.

Функция разгрузки не требует разгрузки всех пакетов. Платформа способна обрабатывать любые пакеты программно. Пакеты управления обычно обрабатываются программно. Поскольку порты IPv4 используются совместно для трафика, передаваемого через привязку, и трафика устройства, пакеты установки/завершения сеанса IPv4 (например, SYN/SYN+ACK, FIN) должны обрабатываться программно, чтобы ядро ​​могло сформировать состояние потока. Платформа предоставляет плоскость управления и конечные автоматы. Она также предоставляет оборудованию информацию о восходящих и нисходящих интерфейсах/префиксах.

Для IPv4 оборудование позволяет пакетам установки сессии трансляции сетевых адресов (NAT) IPv4 достигать ЦП. Ядро создает записи NAT, а реализация HAL отслеживает эти записи из предоставленных фреймворком файловых дескрипторов и обрабатывает эти потоки на аппаратном уровне. Это означает, что реализации HAL не требуется CAP_NET_* , поскольку HAL получает открытые сокеты NF_NETLINK_CONNTRACK от фреймворка. Периодически оборудование отправляет обновления состояния NAT для текущих активных потоков в фреймворк, который обновляет соответствующие записи состояния отслеживания соединений ядра.

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

Для учета использования данных, опрос NetworkStatsService заставляет платформу запрашивать статистику трафика у оборудования. Платформа также передает ограничения на использование данных оборудованию через HAL.

Требования к оборудованию

Для реализации функции разгрузки трафика при подключении через модем ваше оборудование должно быть способно пересылать IP-пакеты между модемом и Wi-Fi/USB без прохождения трафика через основной процессор.

Выполнение

Для включения функции разгрузки привязки необходимо реализовать два следующих компонента: конфигурационный HAL ( IOffloadConfig ) и управляющий HAL ( IOffloadControl ).

Config HAL: IOffloadConfig

HAL-интерфейс IOffloadConfig запускает реализацию разгрузки привязки. Фреймворк предоставляет реализации HAL предварительно подключенные сокеты NF_NETLINK_CONNTRACK , которые она может использовать для наблюдения за потоками IPv4. Ускорению подлежат только пересылаемые потоки.

Управление HAL: IOffloadControl

HAL-интерфейс IOffloadControl управляет реализацией разгрузки. Необходимо реализовать следующие методы:

  • Запуск/остановка аппаратной разгрузки: используйте initOffload/stopOffload и исключите локальные IP-адреса или другие сети из разгрузки с помощью setLocalPrefixes .
  • Настройте восходящий интерфейс, IPv4-адрес и шлюзы IPv6: используйте setUpstreamParameters и настройте диапазоны нисходящих IP-адресов с помощью addDownstream/removeDownstream .
  • Учет использования данных: используйте getForwardedStats/setDataLimit .

Ваш HAL-интерфейс поставщика также должен отправлять обратные вызовы через интерфейс ITetheringOffloadCallback , который сообщает фреймворку следующую информацию:

  • Асинхронные события, такие как запуск и остановка выгрузки (OffloadCallbackEvent)
  • Обновления таймаута NAT, которые должны периодически отправляться для указания на то, что определенный поток IPv4 содержит трафик, и не должны закрываться ядром.

Проверка

Для проверки правильности реализации функции разгрузки режима модема используйте ручное или автоматизированное тестирование, чтобы убедиться в корректной работе режима модема и точки доступа Wi-Fi. Пакет тестов Vendor Test Suite (VTS) содержит тесты для HAL-компонентов, отвечающих за разгрузку режима модема.