Разгрузка модема позволяет устройствам экономить электроэнергию и повышать производительность за счет разгрузки трафика модема (через 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
).
Конфигурация HAL: IOffloadConfig
IOffloadConfig
HAL запускает реализацию разгрузки привязки. Платформа предоставляет реализации HAL предварительно подключенные сокеты NF_NETLINK_CONNTRACK
, которые реализация может использовать для наблюдения за потоками IPv4. Необходимо ускорять только перенаправленные потоки.
Управление HAL: IOffloadControl
IOffloadControl
HAL управляет реализацией разгрузки. Должны быть реализованы следующие методы:
- Запуск/остановка разгрузки оборудования: используйте
initOffload/stopOffload
и освободите локальные IP-адреса или другие сети от разгрузки с помощьюsetLocalPrefixes
. - Настройте восходящий интерфейс, адрес IPv4 и шлюзы IPv6. Используйте
setUpstreamParameters
и настройте диапазоны IP-адресов нисходящего потока с помощьюaddDownstream/removeDownstream
. - Учет использования данных: используйте
getForwardedStats/setDataLimit
.
HAL вашего поставщика также должен отправлять обратные вызовы через интерфейс ITetheringOffloadCallback
, который сообщает платформе:
- Асинхронные события, такие как запуск и остановка разгрузки (OffloadCallbackEvent).
- Обновления тайм-аута NAT, которые необходимо отправлять периодически, чтобы указать, что определенный поток IPv4 содержит трафик и не должен закрываться ядром.
Проверка
Чтобы проверить реализацию разгрузки привязки, используйте ручное или автоматическое тестирование, чтобы убедиться, что модем и точка доступа Wi-Fi работают должным образом. Vendor Test Suite (VTS) содержит тесты для разгрузки HAL привязки.