************************************************************************
Overview
************************************************************************

This is an integration example in a DPDK environment.
The application uses one lcore to dispatch packets
from an ethernet queue in each processing lcore software queue.
This uses a software hash to dispatch packets through different processing queues.

If your NIC has a symmetric RSS hardware hash feature, you can use it
to dispatch packets as pictured below.


                  +----------------------------+
                  |       ethernet PORT        |
                  +----------------------------+
                    +------+ +------+ +------+
                    |Queue1| |Queue2| |Queue3|
                    +------+ +------+ +------+
                        |       |        |
                        |       |        |
                        |       |        |
                        |       |        |
                        |       |        |
                        v       v        v
                  +----------------------------+
                  |   Master lcore (dispatch)  |
                  +----------------------------+
                        |       |        |
                        |       |        |
                        v       v        v
                    +------+ +------+ +------+
                    |      | |      | |      |
                    |Queue1| |Queue2| |Queue3|
                    |  SW  | |  SW  | |  SW  |
                    |      | |      | |      |
                    +------+ +------+ +------+
                        |       |        |
                        |       |        |
                        v       v        v
                    +------+ +------+ +------+
                    |      | |      | |      |
                    |Lcore1| |Lcore2| |Lcore3|
                    |      | |      | |      |
                    +------+ +------+ +------+
                        |       |        |
                        |       |        |
                        v       v        v

                               DPI

************************************************************************
DPDK Version
************************************************************************
This application was written and tested using DPDK stable
version 20.11.3 (LTS)

************************************************************************
Build and installation
************************************************************************
By default, if you build and install the DPDK from sources, the DPDK
configuration files (*.pc) will be installed in /usr/local/lib64/pkgconfig

See the following link for more details about how to build DPDK
from sources => http://doc.dpdk.org/guides-20.11/linux_gsg/build_dpdk.html

Once DPDK has been installed, PKG_CONFIG_PATH environment variable
should be set before to build your app.
$ export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig
make: build application
make install:  install application in src/bin directory

Notes:
build is dynamic by default.
Set STATIC=1 for static build.
Set DEBUG=1 to get debug info.

************************************************************************
Usage
************************************************************************
To get full usage, just type: ./dpdk_integration

Example usage:

To run on 4 threads :
./dpdk_integration -l 0,1,2,3,4 -n 4
or
./dpdk_integration -c 0xF -n 4

To add or change ixEngine parameter :
./dpdk_integration -c 0xF -n 4 -- --no_print --nb_flows 10000

Please verify that the dispatching and the working threads are
running on the same NUMA node as the NIC port.

The LD_LIBRARY_PATH variable can be set as follows from this directory:
$ export LD_LIBRARY_PATH=../../../lib

************************************************************************
Troubleshooting
************************************************************************
Packets errors in DPI
  - You may need to increase the number of flows per worker (nb_flows).
