A compactação de cabeçalho de contexto estático (SCHC, pronunciado Chic) é um mecanismo de compressão genérico para redes LPWAN. É padronizado no IETF.
Esta implementação aplica o SCHC aos cabeçalhos COAP/UDP/IPv6, mas pode ser estendido a outros tipos de campos.
Este documento descreve a aplicação de processos genéricos de compactação/descompressão definidos em {{id.ToutAin-lpwan-ipv6-static-Context-hc}} e {{id.ToutAin-lpwan-Coap-static-Context-hc}}.
No momento, a implementação foi testada apenas uplink e downlink, comunicando -se do dispositivo (dev) ao compressor/descompressor LPWAN (SC) na infraestrutura com um servidor CoAP simples executando na parte superior do SCHC C/D. A implementação do dispositivo é escrita em Python. Atualmente, ele usa a API PYCOM para Lora e pode ser facilmente adaptado para o SIGFOX.
Um pacote CoAP/UDP/IPv6 é gerado pelo dispositivo, o dispositivo analisa esse pacote para obter cada valor dos campos de cabeçalho; em seguida, o dispositivo procura uma regra de compressão que corresponda a esse formato de pacote. Se houver uma regra no contexto que corresponda ao formato do cabeçalho e aos valores do pacote, os campos do cabeçalho serão compactados usando a ação de compactação/descompressão (CDA) especificada por essa regra e o pacote compactado será enviado sobre o ar para a infraestrutura C/D.
Após o recebimento, o pacote compactado é analisado pela infraestrutura C/D para delinear o identificador da regra (primeiro byte), cada campo de cabeçalho subsequente (conforme especificado pela regra) e a carga útil. Finalmente, o LC descomprima os cabeçalhos, conforme descrito na regra. A mensagem COAP é então processada e, se for necessária uma resposta, a resposta será compactada e enviada de volta ao dispositivo que a descomprima.
Para esse fim, o dispositivo é implementado em um módulo Lopy, capaz de transmitir via Lora e pode ser facilmente programado no Micropython. A infraestrutura C/S é implementada com um node.js por um servidor HTTP que recebe os quadros de carga útil de pacote compactado LPWAN em uma mensagem de postagem. A resposta está incluída no reconhecimento desta mensagem de postagem.
Diferentes classes são necessárias para implementar compressão e descompressão.
Rulemngt.py define a classe RujeManager, que mantém o contexto SCHC.
Uma instância do governante é criada com uma chamada de The RujeManager ()
RM = RuleManager()
Em seguida, as regras podem ser adicionadas usando o método AddRule:
RM.addRule(rule_coap0)
RM.addRule(rule_coap1)
A regra é definida oin json usando o seguinte formato:
rule_coap0 = {"ruleid" : 0,
"content" : [["IPv6.version", 1, "bi", 6, "equal", "not-sent"],
["IPv6.trafficClass", 1, "bi", 0x00, "equal", "not-sent"]] }
Uma regra é composta por uma lista (DictionNary) de dois elementos:
RuleId define o número da regra,
O conteúdo contém uma variedade de descrição de campo composta de:
O método findRuleFroMid (regra) retorna a regra correspondente ao regulamento.
O método FindRuleFrompkt (cabeçalho, direção) retorna a regra correspondente da lista de campos do cabeçalho contida no primeiro argumento. Esse valor é geralmente de um pacote de análise de cabeçalho feito com o analisador de classe. O segundo argumento é "up", "dw" ou "bi", indicação da direção do ponto de vista do dispositivo.
Para ambos os métodos, se nenhuma regra for encontrada, um nenhum será retornado.