La descarga de conexión permite que los dispositivos ahorren energía y mejoren el rendimiento descargando el tráfico de conexión (a través de USB o Wi-Fi) al hardware. El tráfico de la conexión se descarga proporcionando una ruta directa entre el módem y los periféricos, lo que omite el procesador de la app.
Especificaciones
A partir de Android 8.1, los dispositivos pueden usar la descarga de conexión para descargar el reenvío de IPv4, IPv6 o IPv4 + IPv6 al hardware.
La función de descarga no necesita descargar todos los paquetes. El framework puede controlar cualquier paquete en el software. Por lo general, los paquetes de control se procesan en el software. Debido a que los puertos IPv4 se comparten entre el tráfico de la conexión y el tráfico del dispositivo, los paquetes de configuración y cierre de sesión IPv4 (por ejemplo, SYN/SYN+ACK, FIN) se deben procesar en el 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 ascendentes y descendentes.
En el caso de IPv4, el hardware permite que los paquetes de configuración de sesión de traducción de direcciones de red (NAT) de IPv4 lleguen a la CPU. El kernel crea entradas NAT, y la implementación de HAL observa las entradas desde los descriptores de archivos proporcionados por el framework y controla estos flujos en el hardware. Esto significa que la implementación del HAL no requiere CAP_NET_*
porque el HAL obtiene sockets NF_NETLINK_CONNTRACK
abiertos del framework. Periódicamente, el hardware envía actualizaciones del estado de NAT para los flujos activos en el momento al framework, que actualiza las entradas de estado de seguimiento de conexión del kernel correspondientes.
En el caso de 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, los sondeos de uso de datos de NetworkStatsService
hacen que el framework solicite estadísticas de tráfico del hardware. El framework también comunica los límites de uso de datos al hardware a través de la HAL.
Requisitos de hardware
Para implementar la descarga de la conexión, el hardware debe poder reenviar paquetes IP entre el módem y Wi-Fi o USB sin enviar el tráfico a través del procesador principal.
Implementación
Para habilitar la función de descarga de conexión, debes implementar los dos HAL siguientes: un HAL de configuración (IOffloadConfig
) y un HAL de control (IOffloadControl
).
HAL de Config: IOffloadConfig
El HAL IOffloadConfig
inicia la implementación de la descarga de la conexión. El framework proporciona la implementación del 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.
HAL de control: IOffloadControl
El HAL de IOffloadControl
controla la implementación de la descarga. Se deben implementar los siguientes métodos:
- Iniciar o detener la descarga de hardware: Usa
initOffload/stopOffload
y exenta las direcciones IP locales o las otras redes de la descarga consetLocalPrefixes
. - Configura la interfaz de upstream, la dirección IPv4 y las puertas de enlace IPv6: Usa
setUpstreamParameters
y configura los rangos de direcciones IP de downstream conaddDownstream/removeDownstream
. - Contabilización del uso de datos: Usa
getForwardedStats/setDataLimit
.
Tu HAL del proveedor también debe enviar devoluciones de llamada a través de la interfaz ITetheringOffloadCallback
, que informa al framework sobre 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 el kernel no lo debe cerrar
Validación
Para validar la implementación de la descarga de conexión, usa pruebas manuales o automatizadas para verificar que la conexión y el hotspot Wi-Fi funcionen según lo previsto. El Conjunto de pruebas de proveedores (VTS) contiene pruebas para los HAL de descarga de la conexión.