Transferencia de hardware de conexión mediante dispositivo móvil

La descarga de la conexión mediante dispositivo móvil permite que los dispositivos ahorren energía y mejoren el rendimiento transfiriendo el tráfico de conexión mediante dispositivo móvil (a través de USB o Wi-Fi) al hardware. El tráfico de conexión mediante dispositivo móvil se descarga proporcionando una ruta directa entre el módem y los periféricos, sin pasar por el procesador de la app.

Especificaciones

A partir de Android 8.1, los dispositivos pueden usar la descarga de conexión para transferir el reenvío de IPv4, IPv6 o IPv4 + IPv6 al hardware.

La función de descarga no necesita descargar todos los paquetes. El framework es capaz de controlar cualquier paquete en software. Los paquetes de control suelen procesarse en software. Debido a que los puertos IPv4 se comparten entre el tráfico con cable y el tráfico del dispositivo, los paquetes de configuración o eliminación de sesiones IPv4 (por ejemplo, SYN/SYN+ACK, FIN) deben procesarse en software para que el kernel pueda construir el estado del flujo. El framework proporciona el plano de control y las máquinas de estado. También proporciona al hardware información sobre las interfaces o los prefijos upstream y downstream.

En el caso de IPv4, el hardware permite que los paquetes de configuración de la sesión de traducción de direcciones de red (NAT) IPv4 lleguen a la CPU. El kernel crea entradas de NAT, y la implementación de HAL observa las entradas de los descriptores de archivos proporcionados por el framework y controla estos flujos en el hardware. Esto significa que la implementación de HAL no requiere CAP_NET_* porque el HAL abre sockets NF_NETLINK_CONNTRACK desde el framework. De forma periódica, el hardware envía actualizaciones de estado de NAT para los flujos activos al framework, que actualiza las entradas de estado de seguimiento de conexión del kernel correspondientes.

Para IPv6, el framework programa una lista de prefijos de destino IPv6 a los que no se debe descargar el tráfico. Todos los demás paquetes vinculados se pueden descargar.

Para el registro del uso de datos, las encuestas de uso de datos de NetworkStatsService hacen que el framework solicite estadísticas de tráfico al hardware. El framework también comunica los límites de uso de datos al hardware a través de HAL.

Requisitos de hardware

Para implementar la descarga de la conexión compartida, el hardware debe ser capaz de reenviar paquetes de IP entre el módem y Wi-Fi/USB sin enviar el tráfico a través del procesador principal.

Implementación

Para habilitar la función de descarga de conexión compartida, debes implementar los siguientes dos HAL: un HAL de configuración (IOffloadConfig) y un HAL de control (IOffloadControl).

HAL de configuración: IOffloadConfig

El HAL de IOffloadConfig inicia la implementación de la descarga de conexión compartida. El framework proporciona a la implementación de HAL con sockets NF_NETLINK_CONNTRACK preconectados que la implementación puede usar para observar los flujos de IPv4. Solo se deben acelerar los flujos reenviados.

Control de HAL: IOffloadControl

El HAL de IOffloadControl controla la implementación de la descarga. Se deben implementar los siguientes métodos:

  • Iniciar o detener el hardware de descarga: Usa initOffload/stopOffload y exime las direcciones IP locales o de otras redes de la descarga con setLocalPrefixes.
  • Establece la interfaz ascendente, la dirección IPv4 y las puertas de enlace IPv6: Usa setUpstreamParameters y configura los rangos de direcciones IP descendentes con addDownstream/removeDownstream.
  • Contabilización del uso de datos: Usa getForwardedStats/setDataLimit.

El HAL de tu proveedor también debe enviar devoluciones de llamada a través de la interfaz ITetheringOffloadCallback, que informa al framework lo siguiente:

  • Eventos asíncronos, como el inicio y la detención de la descarga (OffloadCallbackEvent)
  • Actualizaciones de tiempo de espera de NAT, que se deben enviar periódicamente para indicar que un flujo IPv4 específico contiene tráfico y que el kernel no debe cerrarlo

Validación

Para validar la implementación de la descarga mediante dispositivo móvil, usa pruebas manuales o automatizadas para verificar que la conexión mediante dispositivo móvil y el hotspot de Wi-Fi funcionen como se espera. El Conjunto de pruebas de proveedores (VTS) contiene pruebas para los HAL de descarga de conexión compartida.