65 lines
2.7 KiB
Markdown
65 lines
2.7 KiB
Markdown
# P4 Code Samples
|
|
|
|
## Introduction
|
|
|
|
This directory includes P4 code samples, meant to be run on bmv2, which
|
|
illustrates several more advanced features of P4. The following samples are
|
|
included:
|
|
|
|
- `copy_to_cpu`: how to use the `clone_ingress_to_egress primitive` to clone the
|
|
packet, encapsulate it and send it to a special port.
|
|
- `meter`: how to use indirect meters in P4.
|
|
- `TLV_parsing`: how to parse IPv4 options
|
|
- `register`: how to use registers in P4 and read / write the state from the
|
|
control plane
|
|
- `counter`: how to use counters in P4
|
|
- `action_profile`: how to use action profiles in P4, using ECMP as support
|
|
- `resubmit`: how to resubmit packets to the ingress pipelines
|
|
|
|
All examples are orgranized the same way, with a `p4src` directory containing
|
|
the P4 source code, and a `README` file describing the P4 program and explaining
|
|
how to run a quick demonstration.
|
|
|
|
## Obtaining required software
|
|
|
|
To complete the exercises, you will need to clone 2 p4lang Github repositories
|
|
and install their dependencies. To clonde the repositories:
|
|
|
|
- `git clone https://github.com/p4lang/behavioral-model.git bmv2`
|
|
- `git clone https://github.com/p4lang/p4c-bm.git p4c-bmv2`
|
|
|
|
The first repository ([bmv2](https://github.com/p4lang/behavioral-model)) is the
|
|
second version of the behavioral model. It is a C++ software switch that will
|
|
behave according to your P4 program. The second repository
|
|
([p4c-bmv2](https://github.com/p4lang/p4c-bm)) is the compiler for the
|
|
behavioral model: it takes P4 program and output a JSON file which can be loaded
|
|
by the behavioral model.
|
|
|
|
Each of these repositories come with dependencies. `p4c-bmv2` is a Python
|
|
repository and installing the required Python dependencies is very easy to do
|
|
using `pip`: `sudo pip install -r requirements.txt`.
|
|
|
|
`bmv2` is a C++ repository and has more external dependencies. They are listed
|
|
in the
|
|
[README](https://github.com/p4lang/behavioral-model/blob/master/README.md). If
|
|
you are running Ubuntu 14.04+, the dependencies should be easy to install (you
|
|
can use the `install_deps.sh` script that comes with `bmv2`). Do not forget to
|
|
build the code once all the dependencies have been installed:
|
|
|
|
- `./autogen.sh`
|
|
- `./configure`
|
|
- `make`
|
|
|
|
## Before starting the exercises
|
|
|
|
You need to tell us where you cloned the `bmv2` and `p4c-bm` repositories
|
|
:). Please update the values of the shell variables `BMV2_PATH` and
|
|
`P4C_BM_PATH` in the `env.sh` file - located in this directory. Note that if you
|
|
cloned both repositories in the same directory as this one (`tutorials`), you
|
|
will not need to change the value of the variables.
|
|
|
|
You will also need to run the `veth_setup.sh` script included in this directory
|
|
as `sudo` to setup the veth interfaces needed by the switch.
|
|
|
|
That's all :)
|