Implementa funciones avanzadas

Ver código fuente en GitHub

Algunas funciones avanzadas son opcionales, según si son compatibles o no con la plataforma de hardware de destino.

Encuadre automático pendiente

IEEE 802.15.4 define dos tipos de métodos de transmisión de datos entre superior y secundario: transmisión directa y indirecta. Este último está diseñado principalmente para dispositivos finales somnolientos (SED) que duermen la mayor parte del tiempo y se activa periódicamente para consultar el elemento superior en busca de datos en cola.

  • Transmisión directa: El dispositivo superior envía un marco de datos directamente al dispositivo final. Transmisión directa

  • Transmisión indirecta: El padre mantiene los datos hasta que lo solicite el dispositivo final previsto. Transmisión directa

En el caso indirecto, un dispositivo final secundario primero debe consultar el elemento superior para determinar si hay datos disponibles. Para ello, el elemento secundario envía una solicitud de datos, que el elemento superior reconoce. El superior determina si tiene datos para el dispositivo secundario; de ser así, envía un paquete de datos al dispositivo secundario, que confirma la recepción de los datos.

Si la radio admite la configuración dinámica del bit Frame Pending en confirmaciones de salida a SED, los controladores deben implementar la API de coincidencia de dirección de origen para habilitar esta capacidad. OpenThread usa esta API a fin de indicarle a la radio para qué SEED establecer el bit de marco pendiente.

Si la radio no admite la configuración dinámica del bit Frame Pending, la radio puede hacer un stub de la API de coincidencia de dirección de origen para mostrar OT_ERROR_NOT_IMPLEMENTED.

Análisis y detección de energía con radio

La función de escaneo/detección de energía requiere el chip de radio para muestrear la energía que se presenta en los canales seleccionados y mostrar el valor de energía detectado en la capa superior.

Si esta función no se implementa, la capa MAC de IEEE 802.15.4 envía o recibe un paquete de solicitud/respuesta de baliza para evaluar el valor de energía actual en el canal.

Si el chip de radio admite el análisis o la detección de energía, asegúrate de inhabilitar la lógica del análisis de energía del software mediante la configuración de la macro OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0.

Aceleración de hardware para mbedTLS

mbedTLS define varias macros en el archivo de encabezado de configuración principal, mbedtls-config.h, a fin de permitir que los usuarios habiliten implementaciones alternativas de AES, SHA1, SHA2 y otros módulos, además de funciones individuales para la criptografía de curva elíptica (ECC) en el módulo GF(p). Consulta la aceleración de hardware de mbedTLS para obtener más información.

OpenThread no habilita esas macros, por lo que los algoritmos criptográficos simétricos, de hash y de ECC usan implementaciones de software de forma predeterminada. Estas implementaciones requieren una cantidad considerable de recursos de memoria y procesamiento. Para obtener un rendimiento óptimo y ofrecer una mejor experiencia del usuario, te recomendamos que habilites la aceleración de hardware en lugar del software que implementa las operaciones anteriores.

Para habilitar la aceleración de hardware en OpenThread, se deben agregar los siguientes archivos de encabezado de configuración mbedTLS a las definiciones de compilación ot-config de los archivos CMake de la plataforma:

  • Configuración principal, que define todas las macros necesarias que se usan en OpenThread: /openthread/third-party/mbedtls/mbedtls-config.h
  • Configuración específica del usuario, que define implementaciones alternativas de módulos y funciones: src/platform-name-mbedtls-config.h

Ejemplo de nrf52811.cmake:

target_compile_definitions(ot-config INTERFACE
    "MBEDTLS_USER_CONFIG_FILE=\"nrf52811-mbedtls-config.h\""
)

Las macros comentadas en mbedtls-config.h no son obligatorias y se pueden habilitar en el archivo de encabezado de la configuración específica del usuario para la aceleración de hardware.

Para obtener un ejemplo completo de la configuración específica del usuario, consulta el archivo mbedtls_config_autogen.h en ot-efr32.

Módulo AES

La seguridad de OpenThread aplica criptos AES CCM (contador con CBC-MAC) para encriptar o desencriptar los mensajes IEEE 802.15.4 o MLE y valida el código de integración de mensajes. La aceleración de hardware debe al menos admitir el modo AES ECB (libro electrónico electrónico) básico para la llamada funcional AES CCM básica.

Para usar una implementación alternativa del módulo AES:

  1. Define la macro MBEDTLS_AES_ALT en el archivo de encabezado de configuración mbedTLS específico del usuario.
  2. Indica la ruta del archivo aes_alt.h mediante la variable MBEDTLS_CPPFLAGS

Módulo SHA256

La seguridad de OpenThread aplica algoritmos hash HMAC y SHA256 para calcular el valor de hash de la administración de claves de red y la generación de PSKc según la especificación del subproceso.

Para usar una implementación básica alternativa del módulo SHA256:

  1. Define la macro MBEDTLS_SHA256_ALT en el archivo de encabezado de configuración mbedTLS específico del usuario.
  2. Indica la ruta del archivo sha256_alt.h mediante la variable MBEDTLS_CPPFLAGS

Funciones de ECC

Debido a que actualmente mbedTLS solo admite la aceleración de hardware para partes de funciones ECC, en lugar de todo el módulo, puedes implementar algunas funciones definidas en path-to-mbedtls/library/ecp.c a fin de acelerar la multiplicación de puntos de ECC.

Se usa la curva secp256r1 en el algoritmo de intercambio de claves del borrador ECJPAKE. Por lo tanto, la aceleración de hardware debería, al menos, admitir la operación corta de curvas weierstrass cortas cp256r1. Consulta Aceleración de hardware CRYPTO de SiLabs para mbedTLS a fin de obtener un ejemplo.