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

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 ).

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