All Projects → Juniper → AFI

Juniper / AFI

Licence: Apache-2.0 license
AFI (Advanced Forwarding Interface) is Juniper’s Data Plane Programming Interface which provides Juniper internal and third party developers with ability to control and manage forwarding path in the data planes of Juniper’s platforms.

Programming Languages

C++
36643 projects - #6 most used programming language
Makefile
30231 projects
shell
77523 projects
Note: Use of this software is governed by an Apache 2.0 license, and can be found in the “LICENSE” file.

AFI (Advanced Forwarding Interface)

Packet forwarding, at its core, is a sequence of operations executed by a packet forwarding engine (PFE). The packet forwarding engine, when given an input packet, performs this sequence of operations on the packet. Each of these operations can be represented by a node in a graph of potential packet forwarding operations. When a packet is given to packet forwarding engine, it executes the operations in the graph that match the packet. AFI provides third party developers with the ability to control and manage a section of forwarding path graph.

AFI views a forwarding path as a collection of connected nodes in a hybrid graph. AFI provides clients with the ability to program a section of the forwarding path via a small virtual container called a sandbox. Using AFI APIs, AFI client can create and manage forwarding paths inside a forwarding sandbox.

Please read 'AFI Introduction' document for a quick overview of AFI. Details of AFI APIs can be found in 'Doxygen Documentation'.




AFI GitHub Repository

This repository provides -

  • AFI Introduction document
  • Example AFI client applications
  • Dockerfile/s to build Docker container/s which provides AFI client development and execution environment
  • AFI APIs Doxygen Documentation

Repository Directory Structure

Please note only important files and directories are listed here:

 -- AFI
    |-- LICENSE                     License 
    |-- README.md                   This README file
    |-- tools
    |   `-- docker                  Files/scripts to build/setup docker container/s
    |-- docs
    |   |-- AFI.pdf                 AFI Introduction document
    |   `-- doxygen                 Doxygen documentation
    `-- example-clients             Reference AFI clients
        `-- afi-client

Requirements

Juniper Networks Software

Packages available on vMX Eval Download page

vMX AFI 1.0 Beta : VMX (beta) bundle which supports AFI
AFI 1.0          : AFI APIs libs/headers package

Note: A valid user account is required to access and download the files.

System Requirements

Hardware requirements
=====================
Processor: 
    Any x86 processor (Intel or AMD) with VT-d capability
Number of Cores: 
    4 (1 for VCP and 3 for VFP)
Memory:
    Minimum:
    8 GB (2 GB for VCP, 6 GB for VFP)
    Additional
    2 GB recommended for host OS
Storage: 
    Local or NAS. Minimum 200 GB is recommended.
Other Requirement:
    Intel VT-d capability
       
Software requirements
=====================
Operating system
    Ubuntu 14.04 LTS (recommended host OS)
    Linux 3.13.0-32-generic




AFI Client Development Environment and Workflow






STEP 1. Install Docker engine on Linux host server

You may want to refer to instructions provided on the following page to install docker engine on the host server
https://docs.docker.com/engine/installation/linux/ubuntulinux/

Note: Please follow the instructions provided on the above page for Ubuntu Trusty 14.04 (LTS)


STEP 2. Set docker options

Add following line in /etc/default/docker file

DOCKER_OPTS="--bip=172.18.0.1/16"

and restart Docker service (sudo service docker restart)

The option '--bip=$DOCKER0_BRIDGE_IP' makes sure that Docker container uses $DOCKER0_BRIDGE_IP as IP for "docker0" bridge.

NOTE: By default, docker uses location '/var/lib/docker' to install images. You can use '-g ' option to specify the docker image installation location. Please make sure that the location has around 200GB of space available.


STEP 3. Git clone AFI repository (to get Dockerfile/s to build docker container/s)

git clone https://github.com/Juniper/AFI.git

STEP 4. Build docker container where AFI client can be compiled and run

cd AFI/tools/docker
docker build -f Dockerfile_afi -t afi-docker .

STEP 5. Download 'VMX bundle' and copy it to AFI/tools/docker folder.

Please download "vMX AFI 1.0 Beta (vmx-bundle-17.2I20170329_2254_sksodhi.tgz)" from Juniper vMX Eval download page vMX Eval Download, and copy it to AFI/tools/docker/ directory.


STEP 6. Build docker container where VMX can also be run

This step uses the container built in the previous step and builds another docker container where provided VMX can also be run.

cd AFI/tools/docker
docker build -f Dockerfile_afi_vmx --build-arg VMX_BUNDLE=<vmx bundle image> -t afi-vmx-docker .
E.g.
docker build -f Dockerfile_afi_vmx --build-arg VMX_BUNDLE=vmx-bundle-17.2I20170329_2254_sksodhi.tgz -t afi-vmx-docker .

STEP 7. Run Docker container

docker run -i -t --privileged afi-vmx-docker

Note: Rest of the steps are to be performed inside docker container


STEP 8. Start/setup VMX (inside the container)

cd /root
./scripts/setup_vmx.sh

Please wait for the following message to appear before proceeding with next step.
"VMX Setup Complete!"
Please allow few minutes for VMX setup to complete.
After this step, following setup/environment (less the afi-client) will be ready.



STEP 9. Download 'AFI APIs libs/headers package' and decompress it



Please download "AFI 1.0 (afi-1.0.tgz)" from Juniper vMX Eval download page - vMX Eval Download

tar xf afi-1.0.tgz

Note: Please ignore any "Ignoring unknown extended header keyword" logs which are displayed while decompressing the tarball.


STEP 10. Clone AFI git repository

git clone https://github.com/Juniper/AFI.git

Note: Please make sure that you clone afi repo at the same level where you decompressed 'AFI APIs libs/headers package' (i.e. afi-1.0.tgz)


STEP 11. Check if development environment has been setup properly

cd AFI/example-clients/afi-client/test/
make
./run-afi-gtest 

If all GTEST test cases pass, you are good to go.


STEP 12. Write client application using AFI APIs

Please refer example afi clients provided at ./example-clients.
Compiling/running instructions for each client can be found in the README file provided with the client.


STEP 13. Compile client application

Following directories need be added in the include path.

afi-1.0/include/afi-transport/
afi-1.0/include/aft-client/

AFI client application links with following libraries

afi-1.0/lib/libafi-transport.so
afi-1.0/lib/libaft-client.so

Contact

Sandesh Kumar Sodhi
sksodhi at juniper.net

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].