How to Build VPP FD.IO  Development Environment with Mellanox DPDK PMD for ConnectX-4 and ConnectX-5

Version 26

    VPP is an open-source Vector Packet Processing (VPP) platform by Cisco. The package supplies a powerful DPDK-based dataplane with a variety of Layer 3 (L3) and Layer 2 (L2) functionalities.

    VPP can be integrated with OpenStack and third-party SDN controllers. Red Hat adopted VPP alongside OVS-DPDK as a hypervisor dataplane.

    This post shows how to build a VPP development environment over DPDK for ConnectX-4 and ConnectX-5 adapters. The environment can be used to support networking functionalities and performance testing.

    The post audience targets Developer/DevOps or a Technical Engineers, who would like to test and evaluate Mellanox ConnectX-4/5's integration with VPP.

     

     

     

    References

     

    Prerequisite

    1. Install Ubuntu 16.04 operating system.

     

    2. Install MLNX_OFED rel. 4.0-x.x  and use the ofed_info command to verify that the version is 4.0-x.x:

    # ofed_info -s

     

    3. Set up an account to use the Linux Foundation resources. To set up the account, refer to The Linux Foundation website: https://identity.linuxfoundation.org.

     

    4. Set up a Gerrit account and apply an ssh public key. Follow the instructions on the FD.IO wiki web page: https://wiki.fd.io/view/DEV/Setting_up_Gerrit#Log_into_Gerrit

     

    5. Install the following packages:

    # apt-get -y install git-review git dh-systemd bison libssl-dev libcr-dev libnuma-dev libganglia1-dev libapr1-dev libconfuse-dev debhelper dkms curl

     

    6. Install Oracle Java 8.

    # install Oracle Java 8:

    # apt-get install software-properties-common -y

    # add-apt-repository ppa:webupd8team/java -y

    # apt-get update

    # apt-get install oracle-java8-installer oracle-java8-set-default -y

    # JAVA_HOME=/usr/lib/jvm/java-8-oracle

     

    Installation, Compilation and Configuration

    1. Download the VPP main master branch.

    # git clone ssh://<USERNAME>@gerrit.fd.io:29418/vpp.git
    # git checkout origin/stable/1707

    Use your Linux Foundation user name account you created, instead of <USERNAME> as in the from the example above.

     

    2. Enable the mlx5 PMD driver compilation.

    # cd /vpp
    # sed -i '/vpp_uses_dpdk_mlx5_pmd/s/^# //g' build-data/platforms/vpp.mk

     

    3. Compile

    # cd /vpp

    # make dpdk-install-dev DPDK_MLX5_PMD=y

    # make install-dep

    # make build-release

    # make pkg-deb vpp_uses_dpdk_mlx5_pmd=yes

    # dpkg -i build-root/vpp-lib*

    # dpkg -i build-root/vpp_17*

    # dpkg -i build-root/vpp-plugins*

     

    4. Edit the /etc/vpp/startup.conf start file so that it contains the following:

    unix {

      nodaemon

      log /tmp/vpp.log

      cli-listen localhost:5002

      full-coredump

    }

    dpdk {

            dev 0000:07:00.0

            dev 0000:07:00.1

            no-multi-seg

            dev default {

                    num-rx-queues 2

            }

    }

    Replace the PCI slot numbers of ConnectX-4/5 interfaces marked in red from the example above with the correct IDs. To verify the correct id use:

    # lspci -nn | grep -i mel

    07:00.0 Ethernet controller [0200]: Mellanox Technologies MT27620 Family [15b3:1013]

    07:00.1 Ethernet controller [0200]: Mellanox Technologies MT27620 Family [15b3:1013]

     

    5. Start VPP.

    # service vpp start

     

    6. Enter the VPP Command Line Interface.

    # telnet localhost 5002

     

    7. Configure L3 interfaces as shown in the example below:

        _______    _        _   _____  ___

    __/ __/ _ \  (_)__    | | / / _ \/ _ \

    _/ _// // / / / _ \   | |/ / ___/ ___/

    /_/ /____(_)_/\___/   |___/_/  /_/

     

    vpp#  set int ip address HundredGigabitEthernet7/0/0 1.1.1.1/24

    vpp#  set interface state HundredGigabitEthernet7/0/0 up

    vpp#  set int ip address HundredGigabitEthernet7/0/1 2.2.2.2/24

    vpp#  set interface state HundredGigabitEthernet7/0/1 up

     

    vpp# show int

                  Name               Idx       State          Counter          Count

    HundredGigabitEthernet7/0/0              1         up

    HundredGigabitEthernet7/0/1              2         up

     

    vpp# show int address

    HundredGigabitEthernet7/0/0 (up):

      1.1.1.1/24

    HundredGigabitEthernet7/0/1 (up):

      2.2.2.2/24

    local0 (dn):