The switch repository contains the switch.p4 sample P4 program along with all the library repos to manipulate the switch using SAI, SwitchAPI and switchlink.
+-----+ +-----+ +-----+ +-----+
|App a| |App j| |App n| |App z|
| |...| |...| |...| |
+-----+ +-----+ +-----+ +-----+
| | | |
| | +----| |
+------------+ | |
| Switchlink | | |
| |<-----------------------------+
+------------------+ | |
| SAI | | |
| | | |
+-----------------------+ |
| Switch API | |
| | |
+-----------------------+---------+ |
| Resource Mgmt. API | |
| (auto-gen. from switch.p4) | | Netlink events
+---------------------------------+ |
| Soft Switch | |
| (compiled from switch.p4) | |
+---------------------------------+ |
|
|
+----------------------------------------------------------------+
| Kernel |
| |
+----------------------------------------------------------------+
p4src - P4 sources
switchsai - SAI library
switchapi - SwitchAPI
switchlink - Linux netlink listener
tests/ptf-tests - P4 dependent(PD), SAI and API tests
tests/of-tests - Openflow tests
You can now run switch.p4 in bmv2 without cloning p4factory. In order to do
this you first need to install [bmv2]
(https://github.com/p4lang/behavioral-model) and its compiler [p4c-bmv2]
(https://github.com/p4lang/p4c-bm) on your system. Note that when running
./configure for bmv2, you need to provide the --with-pdfixed option, as
switch requires the PD library. Additionally, if you plan on running the tests
for switch.p4, please make sure you install [PTF]
(https://github.com/p4lang/ptf) with sudo python setup.py install.
Once this is done, you can follow this steps:
./autogen.sh
./configure --with-bmv2 --with-switchsai
make
The --with-switchsai flag will make sure that the compiled drivers include
switchapi and switchsai. If you just need switchapi, replace the flag will
--with-switchapi. Replace the flag with --with-switchlink if you need
switchlink as well. If you omit these flags, the drivers will only include the
PD.
Note that you should be using a fresh clone for this, not the switch submodule
that comes with p4factory.
Make sure to look at the output of configure to spot any missing dependency.
Once everything has compiled, you can run the tests for switch.p4 (assuming
you have installed [PTF] (https://github.com/p4lang/ptf). Please make sure that
you have all the necessary veth pairs setup (you can use [tools/veth_setup.sh]
(tools/veth_setup.sh)).
First, start the software switch with:
sudo ./bmv2/run_bm.sh
Then, start the drivers with:
sudo ./bmv2/run_drivers.sh
You can now run all the tests:
sudo ./bmv2/run_tests.sh # for the PD tests
sudo ./bmv2/run_tests.sh --test-dir tests/ptf-tests/api-tests # for the switchapi tests
sudo ./bmv2/run_tests.sh --test-dir tests/ptf-tests/sai-tests # for the switchsai tests