This is the repository for the FFIVE framework, a framework for creating 100Gbps FPGA-based VNFs. The repository includes the following:
- TCL scripts to create the FPGA Shell required for FFIVE.
- TCL scripts to create some example VNFs.
- C++ programs for controlling and configuring the FPGA Shell.
- Python-based RESTful API to remotely configure the FPGA Shell.
- Base C++ and Python programs to configure the User VNF.
- A Python-based datacenter-level SDN controller to deploy CPU or FPGA-based VNFs.
This is the hardware of our VNF shell itself, it includes all the necessary components, which are:
- The ARM core of the MPSoC, and its AXI connection to the FPGA.
- A DDR4 interface.
- One or more 100G Ethernet interfaces.
- A configurable number of VXLAN bridges on each of the network interfaces.
To use and build the hardware part, do the following:
- Run
make Hardware/Shell
. - Pick the board you want to use.
- Pick the speed you want to use for each of the QSFP interfaces.
- Enter the required number of VXLANs you want on each Ethernet interface.
- Select the frequency of extra clocks.
- The Makefile will create a vivado project, open the project and add your VNF.
- Run
make Hardware/User
, this will build the Vivado project all the way to a bitstream.
This is the software part of the VNF shell, it includes the C++ files to talk to and configure the hardware, as well as the python files that implement the RESTful API.
To use and build do the following:
- Modify the
User*.hpp
files andUser.cpp
file similarly to theirShell.cpp
andShell*.hpp
files. Add the required addresses, memory maps, and program options for your VNF. - Modify the
UserAPI.py
file similarly toShellAPI.py
. Add the required REST routes. - If your software requires external libraries or extra files, you may need to modify the Makefile and/or Dockerfile.
- Run
make Software
. This will cross compile the binaries for ARM64.
Run make Container
. It will query you for the image name and tag. This will copy the hardware bitstream and the software binaries into the docker container. It will set up the container to program the FPGA and run the API once it is running. And finally, it will push the image to your docker hub repo.
- Use the
Config.yaml
file to build the hierarchy of your VNFs. - Run
make
to build the docker container. - Your Kubernetes cluster must be running a device plugin that advertises FPGAs. We use the following plugin: https://github.com/mewais/FPGA-K8s-DevicePlugin
- Use the
Deploy.yaml
to deploy the controller on your kubernetes cluster. The controller will take care of deploying your VNFs and configuring them.
These are dependencies you need to have installed before using the framework.
- Vivado 2020.2 and 2018.3 (Due to bugs in Vivado 2018.3 and 2019.X, our work was split to using vivado_hls from 2018.3, and vivado from 2020.2)
- Docker
- Git
- GCC/G++
- Docker
- Kubernetes
These dependencies are already included in the code, you do not need to install any of them.
- docopt.cpp
- IPLibrary
- GULF-Stream
- FPGA-BPF
- The repo also includes a firewall example which is based on the FFShark paper
If you use FFIVE in your research, we ask that you cite the following papers:
- FFIVE: An FPGA Framework for Interactive VNF Environments
Juan Camilo Vega, Mohammad Ewais, Alberto Leon-Garcia, Paul Chow
2021 IEEE International Symposium On Field-Programmable Custom Computing Machines (FCCM 2021) - A Framework Integrating FPGAs in VNF Networks
Mohammad Ewais, Juan Camilo Vega, Alberto Leon-Garcia, Paul Chow
2021 12th International Conference on Network of the Future (NoF 2021)
NOTE: This paper was accepted but has not been made available yet
@inproceedings{vega2021ffive,
title={FFIVE: An FPGA Framework for Interactive VNF Environments},
author={Vega, Juan Camilo and Ewais, Mohammad and Garcia, Alberto Leon and Chow, Paul},
booktitle={2021 IEEE 29th Annual International Symposium on Field-Programmable Custom Computing Machines (FCCM)},
pages={263--263},
year={2021},
organization={IEEE}
}
@INPROCEEDINGS{Vega2110:Framework,
author="Mohammad Ewais and Juan Camilo Vega and Alberto Leon-Garcia and Paul Chow",
title="A Framework Integrating {FPGAs} in {VNF} Networks",
booktitle="2021 12th International Conference on Network of the Future (NoF) (NoF 2021)",
address="University of Coimbra, Portugal",
days=5,
month=oct,
year=2021,
}
- Mohammad Ewais, University of Toronto
- Juan Camilo Vega, University of Toronto
FFIVE is licensed under the Academic Public License. For more information, check the LICENSE file.