Stateless Traffic Gen with VPP
==============================

It’s simple to configure vpp as a high-performance stateless traffic
generator. A couple of vpp worker threads running on an older system can
easily generate 20 MPPS’ worth of traffic.

In the configurations shown below, we connect a vpp traffic generator
and a vpp UUT using two 40 gigabit ethernet ports on each system:

::

    +-------------------+           +-------------------+
    | traffic generator |           | UUT               |
    | port 0            | <=======> | port 0            |
    | 192.168.40.2/24   |           | 192.168.40.1/24   |
    +-------------------+           +-------------------+

    +-------------------+           +-------------------+
    | traffic generator |           | UUT               |
    | port 1            | <=======> | port 1            |
    | 192.168.41.2/24   |           | 192.168.41.1/24   |
    +-------------------+           +-------------------+

Traffic Generator Setup Script
------------------------------

::

    set int ip address FortyGigabitEthernet2/0/0 192.168.40.2/24
    set int ip address FortyGigabitEthernet2/0/1 192.168.41.2/24
    set int state FortyGigabitEthernet2/0/0 up
    set int state FortyGigabitEthernet2/0/1 up

    comment { send traffic to the VPP UUT }

    packet-generator new {
        name worker0
        worker 0
        limit 0
        rate 1.2e7
        size 128-128
        tx-interface FortyGigabitEthernet2/0/0
        node FortyGigabitEthernet2/0/0-output
        data { IP4: 1.2.40 -> 3cfd.fed0.b6c8
               UDP: 192.168.40.10 -> 192.168.50.10
               UDP: 1234 -> 2345
               incrementing 114
        }
    }

    packet-generator new {
        name worker1
        worker 1
        limit 0
        rate 1.2e7
        size 128-128
        tx-interface FortyGigabitEthernet2/0/1
        node FortyGigabitEthernet2/0/1-output
        data { IP4: 1.2.4 -> 3cfd.fed0.b6c9
               UDP: 192.168.41.10 -> 192.168.51.10
               UDP: 1234 -> 2345
               incrementing 114
        }
    }

    comment { delete return traffic on sight }

    ip route add 192.168.50.0/24 via drop
    ip route add 192.168.51.0/24 via drop

Note 1: the destination MAC addresses shown in the configuration (e.g.
3cfd.fed0.b6c8 and 3cfd.fed0.b6c9) **must** match the vpp UUT port MAC
addresses.

Note 2: this script assumes that /etc/vpp/startup.conf and/or the
command-line in use specifies (at least) two worker threads. Uncomment
“workers 2” in the cpu configuration section of /etc/vpp/startup.conf:

::

    ## Specify a number of workers to be created
    ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s)
    ## and main thread's CPU core
    workers 2

Any plausible packet generator script - including one which replays pcap
captures - can be used.

UUT Setup Script
----------------

The vpp UUT uses a couple of static routes to forward traffic back to
the traffic generator:

::

    set int ip address FortyGigabitEthernet2/0/0 192.168.40.1/24
    set int ip address FortyGigabitEthernet2/0/1 192.168.41.1/24
    set int state FortyGigabitEthernet2/0/0 up
    set int state FortyGigabitEthernet2/0/1 up

    ip route add 192.168.50.10/32 via 192.168.41.2
    ip route add 192.168.51.10/32 via 192.168.40.2
