# Instalação: pc4 / bmv2 / STRATUM / Docker :::info Esta é uma breve demonstração de preparo de um ambiente de desenvolvimento para programação de um Network Interface Controller (NIC) Ethernet/Wi-Fi. ::: :::warning Pré-requisitos: :grey_exclamation: Xubuntu ou Ubuntu (18.04LTS) :grey_exclamation: Memória RAM >= 4GB ::: ### OS: Linux Xubuntu & Ubuntu (18.04LTS) ### Hardware utilizado :::warning Processor: Intel (R) Celeron (R) CPU N3050 @ 1.60GHz Architecture: amd64 - Memory: 4GB - HD SSD: 120GB ::: ### Objetivo: Preparar um ambiente de desenvolvimento para programação de NIC (Ethernet / Wi-Fi), utilizando o compilador da linguagem P4, um switch Bmv2 e o sistema Stratum em um ambiente de hardware físico. ![](https://i.imgur.com/pXLu1TZ.jpg) <br> ![](https://i.imgur.com/P6Ill5Z.jpg) ### O que é Compilador P4? O compilador P4 é um software que faz a tradução de um programa descrito na linguagem P4 - liguagem esta que possui a capacidade de superar as limitações do OpenFlow e aumentar a programabilidade das Redes Definidas por Software. No processo de tradução da linguagem P4 pelo compilador é possível descrever o plano de dados e o encaminhamento em dispositivos programáveis, tais como: software switches, Smart NICs1, FPGAs (Field Programmable Gate Array), switches bare metal e demais dispositivos baseados em ASIC. Com o P4 é possível fazer a recuperação do controle do plano de dados, considerando funções otimizadas para uma rede específica, trazendo 3 principais objetivos, são eles: **Reconfigurabilidade:** funcionalidade técnica aplicada a habilidade do programador ou engenheiro de redes, poder redefinir o processamento dos pacotes em dispositivos de rede; **Independência do Protocolo:** suporte a vários dispositivos de rede que não utilizam padrões de determinados protocolos "proprietários" e a formatos de pacotes específicos; **Independência de programação:** aplica-se ao compilador p4c, onde possui total liberdade de programação de redes e dispositivos, gerando novas funcionalidades independente do dispositivo, conforme a capacidade do hardware específico para o projeto. ### O que é Behavioral Model version 2 (Bmv2)? É um software que atua como um switch de software P4 de referência, denominado de Behavioral Model version 2(para a versão 2 do modelo comportamental), ou Bmv2, o software é escrito em C ++. Seu funcionamento é simples: o bmv2 recebe como entrada um arquivo JSON gerado a partir de seu programa P4 por um compilador P4 e o interpreta para implementar o comportamento de processamento de pacotes especificado por esse programa P4. O bmv2 não se destina a ser um switch de software de nível de produção, mas se comporta muito bem em ambientes de testes e o mesmo deve ser usado como uma ferramenta para desenvolver projetos baseado em depurar planos de dados P4 e software de plano de controle. O desempenho do bmv2, em termos de taxa de transferência e latência é significativamente menor do que o de um switch de software de nível de produção como o OpenvSwitch ou Stratum por exemplo. ### O que é STRATUM? Trata-se de um um sistema operacional de switch independente de código aberto, aplicado a redes definidas por software, onde é possível construir uma distribuição aberta e mínima pronta para produção para equipamentos do tipo white box. O Stratum expõe um conjunto de interfaces SDN de próxima geração, incluindo P4Runtime e OpenConfig, permitindo a intercambialidade de dispositivos de encaminhamento e a programação de comportamentos de encaminhamento. O Stratum evita o bloqueio do fornecedor dos planos de dados de hoje (ou seja, interfaces proprietárias e APIs de software fechadas), permitindo uma fácil integração de dispositivos em redes de grandes operadoras. O Stratum oferece uma solução completa de switch white box para cumprir a promessa de novas atuais e novas tecnologias SDN. ### Repositórios: Você precisa rodar os seguintes comandos para ter acesso aos repositórios necessários: sudo add-apt-repository ppa:frederic-loui/p4lang-3rd-party sudo add-apt-repository ppa:frederic-loui/p4lang-master-bionic-nightly ### Atualização do sistema & Instalação de pacotes Depois, é necessário que faça a atualização do sistema e instalação de pacotes com: sudo apt update && sudo apt upgrade -y sudo apt install p4c bmv2 p4lang-3rd-party scapy -y ### Verificando instalação do compilador p4c: Após a atualização do sistema e instalação, execute a verificação da instalação do compilador com: dpkg -l | grep p4lang - Retorno do comando anterior: ``` root@feec:~# dpkg -l | grep p4lang ii bmv2 1.13.0-202012050317-4b9a2ec~ubuntu18.04.1 amd64 p4lang behavioral-model ii p4c 1.1.0-rc1-202104060403-ca4915d41~ubuntu18.04.1 amd64 p4c p4lang project compiler ii p4lang-3rd-party 1.1~bionic-1 all This package installs 3rd party software needed by p4lang software ii p4lang-pi 0.8-202102050217-c65fe2e~ubuntu18.04.1 amd64 Implementation framework of a P4Runtime server ``` ### Instalação do STRATUM no container Docker ### Atualização do sistema, pacotes e removação de pacotes não essenciais sudo apt upgrade && sudo apt upgrade -y && sudo apt autoremove -y ### Instalação do Docker e verificação do serviço sudo apt install docker.io -y && systemctl status docker ### Retorno do comando: ``systemctl status docker`` ![](https://i.imgur.com/gSvG70X.png) ### Instalação do STRATUM cd /home && sudo docker pull stratumproject/stratum-bcm:sdklt sudo git clone https://github.com/stratum/stratum.git ### Procedimento para corrigir erros de permissão Erros de permissão da **imagem Docker** podem surgir, eventualmente. Tais erros podem ser corrigidos com os comandos abaixo onde não devem ser executados como "root" sudo usermod -aG docker ${USER} su - ${USER} ### Procedimento de instalação do STRATUM :::danger Não utilize o usuário root neste procedimento! ::: cd /home/stratum/ ./setup_dev_env.sh bazel build //stratum/hal/bin/bcm/standalone:stratum_bcm_sdklt_deb ### Observação: Dependendo do seu hardware, o procedimento acima levará muitos minutos ou horas. ### Em outra janela do terminal, verifique as imagens do STRATUM no Docker docker images && docker ps -a - Retorno do comando anterior: ``` REPOSITORY TAG IMAGE ID CREATED SIZE stratum-dev latest bbff94b6b445 43 hours ago 2.19GB stratumproject/build build 1692722f8265 45 hours ago 2.18GB stratumproject/stratum-bcm sdklt efac4591d8a6 45 hours ago 148MB CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1296f40d543 efac4591d8a6 "start-stratum.sh" 44 hours ago Exited (1) 44 hours ago charming_swanson ``` --- ### Fontes: https://wiki.geant.org/pages/viewpage.action?pageId=148087125 https://github.com/stratum/stratum/blob/main/stratum/hal/bin/bcm/standalone/README.md https://p4.org/p4/getting-started-with-p4.html https://www.youtube.com/watch?v=XfZvKLNXC9M https://github.com/p4lang/behavioral-model https://opennetworking.org/stratum/ ### Autor: Fernando Henrique Santorsula E-mail: f208918@dac.unicamp.br ### Coautor: Alan Teixeira da Silva E-mail: a265560@dac.unicamp.br FEEC/UNICAMP - Campinas/SP/BR https://www.fee.unicamp.br