.. Copyright (c) <2017>, Intel Corporation
      All rights reserved.

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:

   - Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.

   - Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in
     the documentation and/or other materials provided with the
     distribution.

   - Neither the name of Intel Corporation nor the names of its
     contributors may be used to endorse or promote products derived
     from this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
   COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   OF THE POSSIBILITY OF SUCH DAMAGE.

============================================
Sample Application Tests: Packet distributor
============================================

Packet Distributor library is a library designed to be used for dynamic
load balancing of traffic while supporting single packet at a time operation.
When using this library, the logical cores in use are to be considered in
several roles: 

rx lcore: responsible for receive packets from different ports and enqueue

distributor lcore: responsible for load balancing or distributing packets

worker locres: responsible for receiving the packets from the distributor
               and operating on them.

tx lcore: responsible for dequeue packets from distributor and transmit them


Test Case: Distributor unit test
================================
Start test application and run distributor unit test::

	   ./x86_64-native-linuxapp-gcc/app/test -c f -n 4
	   RTE>>distributor_autotest

Verify burst distributor API unit test passed

Test Case: Distributor performance unit test
============================================
Start test application and run distributor unit test::

	   ./x86_64-native-linuxapp-gcc/app/test -c f -n 4
	   RTE>>distributor_perf_autotest

Compared CPU cycles for normal distributor and burst API

Verify burst distributor API cost much less cycles then normal version

Test case: Distribute with maximum workers
==========================================
Start distributor sample with 63(0xeffffffffffffffff0) workers

Send several packets with ip address increasing

Check packets distributed to different workers

Check all packets have been sent back from tx lcore

Test Case: Distributor with multiple input ports
================================================
Start distributor sample with two workers and two ports::

	./examples/distributor/build/distributor_app -c 0x7c -n 4 -- -p 0x3

Send packets with sequence indicated in udp port id

Check forwarded packets are all in sequence and content not changed

Test case: Distribute performance
=================================
The number of workers are configured through the command line interface of the
application:

The test report should provide the measurements(mpps and % of the line rate)
for each action in lcores as listed in the table below::

	+----+---------+------------------+------------------+------------------+------------------+------------------+------------------+
	| #  |Number of| Throughput Rate  | Throughput Rate  | Throughput Rate  | Throughput Rate  | Throughput Rate  | Throughput Rate  |
	|    |workers  | Rx received      | Rx core enqueued | Distributor sent | Tx core dequeued | Tx transmitted   | Pkts out         |
	|    |         +------------------+------------------+------------------+------------------+------------------+------------------+
	|    |         |  mpps  |    %    |  mpps  |    %    |  mpps  |    %    |  mpps  |    %    |  mpps  |    %    |  mpps  |    %    |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 1  |    1    |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 2  |    2    |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 3  |    3    |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 4  |    4    |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 5  |    8    |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 6  |    16   |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+
	| 7  |    32   |        |         |        |         |        |         |        |         |        |         |        |         |
	+----+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+--------+---------+