Try   HackMD

Instalação: pc4 / bmv2 / STRATUM / Docker

Esta é uma breve demonstração de preparo de um ambiente de desenvolvimento para programação de um Network Interface Controller (NIC) Ethernet/Wi-Fi.

Pré-requisitos:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Xubuntu ou Ubuntu (18.04LTS)
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Memória RAM >= 4GB

OS: Linux Xubuntu & Ubuntu (18.04LTS)

Hardware utilizado

Processor: Intel ® Celeron ® 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.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →



Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

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

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

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

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