Este projeto propõe uma implantação prática de filas de prioridade para Redes de Campo de Batalha (BN - Battlefield Networks) utilizando tecnologias modernas de redes programáveis, como P4, SDN (Software-Defined Networking) e o sistema operacional ONOS. A aplicação tem como objetivo otimizar o fluxo de dados e garantir a disseminação rápida de informações vitais em sistemas de Comando e Controle (C2), em um ambiente que integra rotas IP e NDN (Named Data Networking).
A arquitetura inicial que inspirou esta abordagem visa o gerenciamento dinâmico do tráfego e a integração de dispositivos heterogêneos em ambientes militares de Comando e Controle, mitigando os problemas de estruturas de rede muito rígidas:
Figura 4.1: Visão Geral da Arquitetura Inicial Proposta.
A solução opera fornecendo uma topologia detalhada da rede para o controlador ONOS por meio de um arquivo JSON (netcfg.json) via API REST. O ONOS, então, utiliza P4Runtime para estabelecer a comunicação com os dispositivos de rede habilitados para P4 (switches BMv2 executando o Stratum).
Figura 4.4: Visão Geral da Solução Proposta.
Para realizar a priorização, a solução implementa o controle no plano de dados definindo um pipeline customizado em P4. Esse pipeline avalia o valor do identificador de fila (qid); pacotes com qid de valor zero são considerados de alta prioridade e têm seu campo DiffServ (Differentiated Services) marcado como Expedited Forwarding no cabeçalho IPv4.
Figura 4.5: Visão Geral do pipeline P4 proposto.
O repositório está estruturado com códigos em Python, Java e P4, distribuídos da seguinte maneira:
queue/: Diretório principal contendo o código-fonte da aplicação Java para o ONOS e os arquivos do pipeline P4.results/: Diretório destinado ao armazenamento dos resultados experimentais e métricas de avaliação.ndn_wifi.py: Script em Python utilizado para instanciar a infraestrutura e a topologia da rede emulada (MiniNDN).netcfg_basic4.json: Arquivo JSON que define explicitamente os dispositivos, portas e links da rede, sendo entregue via API REST ao ONOS.
Para que o ONOS forneça a infraestrutura necessária para aplicar e gerenciar essas políticas centralmente, o aplicativo desenvolvido ("Queue App") precisa ser implantado no controlador:
Figura 4.6: Fluxo de trabalho de implantação de uma aplicação e ambiente no ONOS.
- Arquivos Java (ONOS App): Formam o aplicativo que gerencia as políticas de QoS na rede estendendo as capacidades nativas do ONOS.
PrioritizeComponent.java: Componente que insere regras de fluxo prioritárias manipulando o valor deqidvia tabela PI (IngressParserImpl.qid_table) com base no endereço IPv4.MacForwardingComponent.java: Configura rotas estáticas e aplica regras de encaminhamento MAC nos dispositivos utilizando a injeção de dependências do OSGi.InterpreterImpl.java: Atua como ponte entre o ONOS e o pipeline P4, traduzindo pacotes e operações para o formato compreendido pelos dispositivos P4.PriorizarCmtAltaCommand.java: Estende a CLI do ONOS adicionando o comando customizado (set-Prioritary-Drone400-To-Commander) para gerenciar as rotas prioritárias de forma simples e responsiva.
- Código P4: Define o plano de dados (P4-16) na arquitetura
v1modelpara switches BMv2. Contém funções comoqid_changeeexpedited_forwarding()para manipular e classificar os pacotes. pom.xml: O arquivo de configuração Maven responsável pela gestão de dependências do projeto e pelo empacotamento do código Java em um arquivo.oarcompatível com a plataforma do ONOS.
Siga os passos abaixo para compilar o projeto, instanciar o ambiente e ativar a aplicação:
Antes de gerar o pacote do ONOS, é necessário compilar o pipeline P4-16 para a arquitetura BMv2 (v1model). Isso garantirá que os arquivos P4Runtime e as regras do switch sejam gerados corretamente dentro da pasta de recursos:
p4c --target bmv2 -x p4-16 -o app/src/main/resources/ --arch v1model --p4runtime-files app/src/main/resources/priority_queues_v6.txtpb priority_queues_v6.p4Use o Maven para limpar dependências antigas e gerar o arquivo de instalação (.oar) da aplicação ONOS:
mvn -e clean packageUtilizaremos a versão 2.7-latest do ONOS. Para iniciá-lo via Docker com os aplicativos necessários já ativados, execute:
docker run -t -d -e ONOS_APPS=gui2,drivers.bmv2,netcfglinksprovider,netcfghostprovider -p 8181:8181 -p 8101:8101 -p 5005:5005 -p 830:830 onosproject/onos:2.7-latestInicie o ambiente emulado em Python:
python ndn_wifi.py Carregue o arquivo de configuração para que o controlador identifique explicitamente os nós da rede usando a REST API:
curl --user onos:rocks -X POST -H "Content-Type: application/json" http://172.17.0.2:8181/onos/v1/network/configuration/ -d @./netcfg_basic4.json Uma vez que o projeto foi compilado e instalado no ONOS, você precisa acessar a interface de linha de comando (CLI) do controlador para ativar o aplicativo br.ufrgs.inf.queue.
Acesse a CLI do ONOS (por padrão na porta 8101, com usuário onos e senha rocks):
ssh -p 8101 onos@localhostDentro da CLI do ONOS, ative a aplicação:
app activate br.ufrgs.inf.queueNota: Em alguns casos, dependendo do nome registrado no pacote, o atalho app activate queue também pode ser utilizado.
Após a ativação com sucesso, os comandos customizados estarão prontos para uso. Você já poderá priorizar o tráfego da rede digitando os comandos desenvolvidos, como por exemplo:
set-Prioritary-Drone400-To-Commander