Implementar recursos avançados

Veja o código-fonte no GitHub

Alguns recursos avançados são opcionais, dependendo se são ou não compatíveis com a plataforma de hardware de destino.

Frame automático pendente

O IEEE 802.15.4 define dois tipos de métodos de transmissão de dados entre pai e filho: transmissão direta e transmissão indireta. Este último foi projetado principalmente para dispositivos com dispositivos de suspensão (SEDs, na sigla em inglês) que ficam na maioria das vezes, acordando periodicamente para pesquisar dados na fila.

  • Transmissão direta: o pai envia um frame de dados diretamente para o dispositivo final Transmissão direta

  • Transmissão indireta: o pai mantém os dados até que sejam solicitados pelo dispositivo final pretendido Transmissão direta

No caso indireto, um dispositivo final filho precisa primeiro pesquisar o pai para determinar se há dados disponíveis para ele. Para fazer isso, o filho envia uma solicitação de dados, que o pai confirma. Em seguida, o pai determina se há dados para o dispositivo filho. Em caso afirmativo, ele envia um pacote de dados para o dispositivo filho, que reconhece o recebimento dos dados.

Se o rádio for compatível com a configuração dinâmica do bit de frame pendente nos reconhecimentos de saída para SEDs, os drivers precisarão implementar a API de correspondência de endereço de origem para ativar esse recurso. O OpenThread usa essa API para informar ao rádio quais SEDs precisam ser definidos para o frame.

Se o rádio não for compatível com a configuração dinâmica do bit de frame pendente, o rádio poderá criar stubs para a API de correspondência de endereço de origem para retornar OT_ERROR_NOT_IMPLEMENTED.

Busca e detecção de energia com rádio

O recurso de busca/detecção de energia exige que o chip de amostra faça uma amostra da energia apresentada nos canais selecionados e retorne o valor de energia detectado para a camada superior.

Se esse recurso não for implementado, a camada MAC IEEE 802.15.4 enviará/receberá um pacote de solicitação/resposta do sensor para avaliar o valor de energia atual no canal.

Se o ícone de rádio for compatível com a Busca/detecção de energia, desative a lógica da verificação de energia do software configurando a macro OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0.

Aceleração de hardware para mbedTLS

A mbedTLS define várias macros no arquivo de cabeçalho da configuração principal, mbedtls-config.h, para permitir que os usuários ativem implementações alternativas de AES, SHA1, SHA2 e outros módulos, bem como funções individuais para a criptografia de curva elíptica (ECC, na sigla em inglês) sobre o módulo GF(p). Consulte aceleração de hardware mbedTLS para ver mais informações.

Como o OpenThread não ativa essas macros, os algoritmos de criptografia simétrica, algoritmos de hash e funções ECC usam implementações de software por padrão. Essas implementações exigem recursos computacionais e memória consideráveis. Para um desempenho ideal e uma melhor experiência do usuário, recomendamos ativar a aceleração de hardware em vez de software para implementar as operações acima.

Para ativar a aceleração de hardware no OpenThread, adicione os seguintes arquivos de cabeçalho de configuração mbedTLS às definições de compilação do ot-config nos arquivos CMake da plataforma:

  • Configuração principal, que define todas as macros necessárias usadas no OpenThread: /openthread/third-party/mbedtls/mbedtls-config.h
  • Configuração específica do usuário, que define implementações alternativas de módulos e funções: src/platform-name-mbedtls-config.h

Exemplo de nrf52811.cmake:

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

Macros comentadas em mbedtls-config.h não são obrigatórias e podem ser ativadas no arquivo de cabeçalho de configuração específico do usuário para aceleração de hardware.

Para ver um exemplo completo de configuração específica do usuário, consulte o arquivo mbedtls_config_autogen.h em ot-efr32.

Módulo AES

A segurança do OpenThread aplica a criptografia AES CCM (Contador com CBC-MAC) para criptografar/descriptografar as mensagens IEEE 802.15.4 ou MLE e valida o código de integração de mensagens. A aceleração de hardware precisa ser pelo menos compatível com o modo AES ECB (livro de códigos eletrônico) básico para chamadas funcionais do AES CCM.

Para utilizar uma implementação alternativa do módulo AES:

  1. Defina a macro MBEDTLS_AES_ALT no arquivo de cabeçalho de configuração mbedTLS específico do usuário
  2. Indique o caminho do arquivo aes_alt.h usando a variável MBEDTLS_CPPFLAGS

Módulo SHA256

A segurança do OpenThread aplica algoritmos de hash HMAC e SHA256 para calcular o valor de hash para o gerenciamento de chaves de rede e a geração de PSKc, de acordo com a especificação da linha de execução.

Para utilizar uma implementação básica alternativa do módulo SHA256:

  1. Defina a macro MBEDTLS_SHA256_ALT no arquivo de cabeçalho de configuração mbedTLS específico do usuário
  2. Indique o caminho do arquivo sha256_alt.h usando a variável MBEDTLS_CPPFLAGS

Funções ECC

Como o mbedTLS atualmente oferece suporte apenas à aceleração de hardware para partes das funções ECC, em vez de todo o módulo, você pode optar por implementar algumas funções definidas em path-to-mbedtls/library/ecp.c para acelerar a multiplicação de pontos de ECC.

A curva secp256r1 é usada no algoritmo de troca de chaves do rascunho ECJPAKE. Portanto, a aceleração de hardware precisa pelo menos ser compatível com a operação de curva seierstrass curta do secp256r1. Consulte Aceleração de hardware CRYPTO da SiLabs para mbedTLS (link em inglês) para ver um exemplo.