Detecção de jam

Veja o código-fonte no GitHub

Para fornecer um mecanismo configurável de detecção de interferência de sinal em qualquer nó do OpenThread, ative o recurso Jam Detection.

Esse recurso é útil para certificações de dispositivos que exigem a capacidade de detectar interferências em um canal específico. Ele pode ser configurado para atender aos requisitos de cada tipo de certificação.

Como funciona

A detecção de Jam monitora o RSSI (indicador de intensidade do sinal recebido) de um nó durante janelas de tempo especificadas para determinar se o canal foi bloqueado.

Quando a detecção de congestionamento estiver ativada:

  1. O estado de detecção de interferência está definido como false.
  2. O nó faz amostras do RSSI várias vezes em cada intervalo de um segundo.
  3. Se o RSSI nesse intervalo inteiro de um segundo permanecer acima do limite de RSSI configurado para cada amostra, esse intervalo de um segundo será considerado bloqueado.
  4. Se um número agregado de intervalos de um segundo congestionados for maior ou igual a o número agregado de segundos de período ocupado configurados dentro dos segundos de janela de detecção configurados anteriormente em qualquer momento, o estado de detecção de congestionamento naquele momento será definido como true.
  5. Se um número agregado de intervalos de um segundo travados for menor que o número agregado de segundos do Período ocupado configurados em segundos da janela de detecção anterior a qualquer momento, o estado de detecção de Jams nesse momento será definido como false.

Bitmap de histórico

Na API OpenThread e nas propriedades wpantund, um bitmap dos 63 segundos anteriores está disponível para recuperação. Esse bitmap indica se o RSSI ultrapassou o limite de RSSI configurado em cada um dos 63 segundos anteriores.

Por exemplo, você pode recuperar o seguinte bitmap:

0xC248068C416E7FF0

A conversão para binário produz todas as instâncias em que o RSSI ultrapassou o limite configurado durante os 63 segundos anteriores:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

Se a janela de detecção estiver definida como 16 segundos e o período de ocupação estiver definido como 8 segundos, o estado de detecção de congestionamento será true em 51 segundos, porque essa é a primeira instância em que o limite de RSSI foi excedido por pelo menos 8 segundos nos 16 segundos anteriores. Neste exemplo, o estado de detecção de Jam permanece true pelos próximos 13 segundos.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

Esse bitmap pode ser representado pelo gráfico a seguir, se o limite de RSSI configurado for -45 dBm:

Detecção de obstrução de OT

Como ativar

Esse recurso fica desativado por padrão.

Por definição

Para ativar a detecção de congestionamento, defina OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE como 1 no arquivo openthread/src/core/config/openthread-core-default-config.h, antes de criar o OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

Por opção

Como alternativa, use a opção de build -DOT_JAM_DETECTION=ON ao criar OpenThread:

./script/build -DOT_JAM_DETECTION=ON

Parâmetros

Os parâmetros de detecção de congestionamento só podem ser configurados pela API OpenThread, pelo protocolo Spinel ou pelo wpanctl, a ferramenta de linha de comando wpantund para gerenciamento de coprocessador de rede (NCP, na sigla em inglês). Os valores padrão são aplicados se o recurso for ativado sem uma configuração posterior.

Personalize esse recurso usando os seguintes parâmetros:

Parâmetros
Limite de RSSI
Valor padrão
0 dBm
Descrição
Especifica o nível limite de RSSI em dBm acima do qual o canal deve ser considerado bloqueado.
Janela de detecção
Valor padrão
63 segundos
Descrição
Especifica o período em segundos em que a interferência de sinal será verificada. Intervalo: 1 a 63.
Período ocupado
Valor padrão
63 segundos
Descrição
Especifica o número de segundos agregados dentro da janela de detecção em que o RSSI precisa estar acima do limite para acionar a detecção de interferência. Precisa ser menor que a janela de detecção. Intervalo: 1 a 63.

API

OpenThread

Use a API Jam Detection para gerenciar o recurso Jam Detection diretamente no seu aplicativo OpenThread. A API OpenThread oferece as seguintes funcionalidades:

  • Iniciar e interromper o recurso
  • Conferir o estado da detecção de Jam
  • Gerenciar todos os parâmetros
  • Extrair o bitmap atual do histórico da detecção de Jam
  • Registrar uma função de callback para quando um congestionamento for detectado

Espinélio

O protocolo Spinel permite que um dispositivo host se comunique diretamente com um NCP. Esse protocolo expõe propriedades de detecção de congestionamento em openthread/src/lib/spinel/spinel.h que oferecem a seguinte funcionalidade:

  • Iniciar e interromper o recurso
  • Conferir o estado da detecção de Jam
  • Gerenciar todos os parâmetros
  • Recuperar o bitmap do histórico atual da Detecção de congestionamento

CLI

OpenThread

Não há comandos da CLI do OpenThread relacionados a esse recurso.

wpantund

Use a CLI wpanctl para gerenciar o recurso de detecção de congestionamento para uma configuração de NCP do OpenThread. O wpantund mantém toda a configuração da detecção de interferência após a redefinição do NCP.

O wpanctl oferece acesso às seguintes propriedades wpantund:

Propriedades
JamDetection:Status
Formato
booleano
Descrição
Somente leitura. Estado de detecção de obstrução. Indica se uma interferência de sinal está sendo detectada.
JamDetection:Enable
Formato
booleano
Descrição
Ative ou desative o recurso de detecção de interferência.
JamDetection:RssiThreshold
Formato
dBm
Descrição
Especifica o nível de RSSI de limite em dBm acima do qual o canal é considerado bloqueado.
JamDetection:Window
Formato
segundos
Descrição
Especifica o período em segundos em que a interferência de sinal será verificada. Intervalo: 1 a 63.
JamDetection:BusyPeriod
Formato
segundos
Descrição
Especifica o número de segundos agregados em JamDetection:Window em que o RSSI precisa estar acima de JamDetection:RssiThreshold para acionar a detecção de interferência. Precisa ser menor que JamDetection:Window. Intervalo: de 1 a 63.
JamDetection:Debug:HistoryBitmap
Formato
Valor de 64 bits
Descrição
Fornece informações sobre o histórico do estado da detecção de congestionamento para fins de monitoramento e depuração.

Por exemplo, para receber o estado de detecção de interferência de um NCP:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

Para definir o limite RSSI de detecção de Jam como -45 dBm em um NCP:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

Para mais informações sobre as propriedades wpantund, consulte o repositório wpantund do GitHub.