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

Функция разгрузки модема позволяет устройствам экономить электроэнергию и повышать производительность, перенаправляя трафик модема (через 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

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. Набор тестов поставщика (VTS) содержит тесты для уровней HAL разгрузки тетеринга.