La descarga de anclaje permite a los dispositivos ahorrar energía y mejorar el rendimiento al descargar el tráfico de anclaje (a través de USB, Wi-Fi) al hardware. El tráfico de anclaje se descarga proporcionando una ruta directa entre el módem y los periféricos, sin pasar por el procesador de la aplicación.
Especificaciones
A partir de Android 8.1, los dispositivos pueden usar la descarga de anclaje a red para descargar el reenvío IPv4, IPv6 o IPv4+IPv6 al hardware.
La función de descarga no necesita descargar todos los paquetes. El marco es capaz de manejar cualquier paquete de software. Los paquetes de control normalmente se procesan en software. Debido a que los puertos IPv4 se comparten entre el tráfico conectado y el tráfico del dispositivo, los paquetes de configuración/desmontaje de sesiones IPv4 (por ejemplo, SYN/SYN+ACK, FIN) deben procesarse en el software para que el kernel pueda construir el estado del flujo. El marco proporciona el plano de control y las máquinas de estado. También proporciona al hardware información sobre interfaces/prefijos ascendentes y descendentes.
Para IPv4, el hardware permite que los paquetes de configuración de sesión de traducción de direcciones de red (NAT) IPv4 lleguen a la CPU. El kernel crea entradas NAT y la implementación HAL observa las entradas de los descriptores de archivos proporcionados por el marco y maneja estos flujos en el hardware. Esto significa que la implementación de HAL no requiere CAP_NET_*
porque HAL obtiene sockets NF_NETLINK_CONNTRACK
abiertos desde el marco. Periódicamente, el hardware envía actualizaciones del estado NAT para los flujos actualmente activos al marco, lo que actualiza las entradas de estado de seguimiento de conexión del kernel correspondientes.
Para IPv6, el marco programa una lista de prefijos de destino IPv6 a los que no se debe descargar el tráfico. Todos los demás paquetes atados se pueden descargar.
Para la contabilidad del uso de datos, las encuestas de uso de datos NetworkStatsService
hacen que el marco solicite estadísticas de tráfico del hardware. El marco 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 anclaje a red, su hardware debe ser capaz de reenviar paquetes 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 anclaje a red, debe implementar los dos siguientes: una HAL de configuración ( IOffloadConfig
) y una HAL de control ( IOffloadControl
).
Configurar HAL: IOffloadConfig
IOffloadConfig
HAL inicia la implementación de descarga de anclaje. El marco proporciona a la implementación HAL sockets NF_NETLINK_CONNTRACK
preconectados que la implementación puede usar para observar los flujos de IPv4. Sólo se deben acelerar los flujos reenviados.
Controlar HAL: IOffloadControl
IOffloadControl
HAL controla la implementación de la descarga. Se deben implementar los siguientes métodos:
- Iniciar/detener la descarga de hardware: use
initOffload/stopOffload
y exima las direcciones IP locales u otras redes de la descarga consetLocalPrefixes
. - Configure la interfaz ascendente, la dirección IPv4 y las puertas de enlace IPv6: use
setUpstreamParameters
y configure rangos de direcciones IP descendentes conaddDownstream/removeDownstream
. - Contabilidad del uso de datos: utilice
getForwardedStats/setDataLimit
.
Su proveedor HAL también debe enviar devoluciones de llamada a través de la interfaz ITetheringOffloadCallback
, que informa al marco de:
- Eventos asincrónicos como el inicio y la detención de una descarga (OffloadCallbackEvent)
- Actualizaciones de tiempo de espera de NAT, que deben enviarse periódicamente para indicar que un flujo IPv4 específico contiene tráfico y el kernel no debe cerrarlo.
Validación
Para validar su implementación de descarga de anclaje a red, utilice pruebas manuales o automatizadas para verificar que el anclaje a red y el punto de acceso Wi-Fi funcionen como se esperaba. Vendor Test Suite (VTS) contiene pruebas para los HAL de descarga de anclaje.