Tofino Setup Guide
This document explains how to build, install, and run the P4 Control Plane software on Tofino hardware.
Similar steps apply when running on the Tofino simulation model. Please see Tofino-specific documentation for more details.
Requirements
Docker (Ubuntu 20.04 base image)
Intel P4Studio
Git
Setup
The build and execution of infrap4d uses docker.
Docker
Pull the Ubuntu 20.04 docker base image
docker pull ubuntu:20.04
Create the container
docker run --privileged --cap-add=ALL -it --name infrap4d --network host -d ubuntu:20.04 /bin/bash
Git
Clone IPDK networking-recipe:
git clone --recursive git@github.com:ipdk-io/networking-recipe.git p4cp.recipe
cd p4cp.recipe
export P4CP_RECIPE=`pwd`
Clone the repository used to build the Stratum dependencies:
git clone --recursive https://github.com/ipdk-io/stratum-deps.git
Intel P4Studio
Get Intel P4Studio SDE. The untarred directory is henceforth referred to as sde. If using an Intel Tofino Reference platform, please also download the BSP package.
tar xvf bf-sde-9.11.0-cpr.tgz
Build
Build is done within the infrap4d docker container created above.
docker exec -it infrap4d bash
Install basic utilities
apt-get update
apt-get install sudo git cmake autoconf gcc g++ libtool python3 python3-dev python3-distutils iproute2 libssl-dev
See the OpenSSL security guide for OpenSSL version and EOL information.
Build and install stratum dependencies
cd stratum-deps
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/
make
ldconfig
Build Intel P4Studio SDE
The below steps are minimal. For a more detailed installation procedure, please refer to the Intel P4Studio SDE Installation Guide.
cd sde/p4studio
./p4studio profile apply profiles/ipdk.yaml --bsp-path **path-to-bsp**
cd ..
export SDE_INSTALL=sde/install
Note: To test with tofino-model, edit the
profiles/ipdk.yaml
file and change theasic
configuration fromtrue
tofalse
.
Not that bsp-path
is not required for tofino-model.
Build Networking Recipe
$P4CP_RECIPE/make-all.sh --target=tofino --deps=/usr/local
Run
cd P4CP_RECIPE
cp $SDE_INSTALL/share/bf_switchd/zlog-cfg $P4CP_RECIPE/zlog-cfg-cur
mkdir -p /etc/stratum/
mkdir -p /var/log/stratum/
LD_LIBRARY_PATH=$P4CP_RECIPE/install/lib/:$SDE_INSTALL/lib \
./install/sbin/infrap4d \
-chassis_config_file=./stratum/stratum/stratum/hal/config/x86-64-accton-wedge100bf-32x-r0/chassis_config.pb.txt \
-tdi_switchd_cfg=$SDE_INSTALL/share/p4/targets/tofino/tofino_skip_p4.conf \
-tdi_sde_install=$SDE_INSTALL
Note: To test with tofino-model, please use ./stratum/stratum/stratum/hal/config/barefoot-tofino-model/chassis_config.pb.txt as the chassis_config_file.
Set forwarding pipeline
Following are optional steps to perform set forwarding pipeline.
The following steps describe generating a p4info and pipeline configuration required to perform a set forwarding pipeline from a controller.
Tofino only supports the TNA architecture. The bf-p4c compiler can still generate PSA compatible P4info files.
The tna_exact_match P4 example is used to describe these steps. The same steps will apply for any TNA program.
cd sde/build
make tna_exact_match
make install
The above commands will generate 4 files. The last three files are combined together by the TDI pipeline builder to generate a single bin file to be pushed by the controller.
These files can be found in install/share/tofinopd/tna_exact_match/ directory.
tna_exact_match.p4info.pb.txt
tofino.bin
context.json
bf-rt.json
A conf file is also generated. This file holds the location of the above files relative to SDE_INSTALL.
Using tdi_pipeline_builder
To generate the bin file for the controller.
cd $SDE_INSTALL
LD_LIBRARY_PATH=$P4CP_RECIPE/install/lib/:$SDE_INSTALL/lib \
$P4CP_RECIPE/install/bin/tdi_pipeline_builder \
-p4c_conf_file=$SDE_INSTALL/share/p4/targets/tofino/tna_exact_match.conf \
-tdi_pipeline_config_binary_file=$P4CP_RECIPE/tna_exact_match.pb.bin