xref: /dpdk/doc/guides/sample_app_ug/test_pipeline.rst (revision d0dff9ba445e47199a420dd4b5451ec2860d3d3b)
1*d0dff9baSBernard Iremonger..  BSD LICENSE
2*d0dff9baSBernard Iremonger    Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
3*d0dff9baSBernard Iremonger    All rights reserved.
4*d0dff9baSBernard Iremonger
5*d0dff9baSBernard Iremonger    Redistribution and use in source and binary forms, with or without
6*d0dff9baSBernard Iremonger    modification, are permitted provided that the following conditions
7*d0dff9baSBernard Iremonger    are met:
8*d0dff9baSBernard Iremonger
9*d0dff9baSBernard Iremonger    * Redistributions of source code must retain the above copyright
10*d0dff9baSBernard Iremonger    notice, this list of conditions and the following disclaimer.
11*d0dff9baSBernard Iremonger    * Redistributions in binary form must reproduce the above copyright
12*d0dff9baSBernard Iremonger    notice, this list of conditions and the following disclaimer in
13*d0dff9baSBernard Iremonger    the documentation and/or other materials provided with the
14*d0dff9baSBernard Iremonger    distribution.
15*d0dff9baSBernard Iremonger    * Neither the name of Intel Corporation nor the names of its
16*d0dff9baSBernard Iremonger    contributors may be used to endorse or promote products derived
17*d0dff9baSBernard Iremonger    from this software without specific prior written permission.
18*d0dff9baSBernard Iremonger
19*d0dff9baSBernard Iremonger    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*d0dff9baSBernard Iremonger    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*d0dff9baSBernard Iremonger    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*d0dff9baSBernard Iremonger    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*d0dff9baSBernard Iremonger    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*d0dff9baSBernard Iremonger    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*d0dff9baSBernard Iremonger    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*d0dff9baSBernard Iremonger    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*d0dff9baSBernard Iremonger    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*d0dff9baSBernard Iremonger    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*d0dff9baSBernard Iremonger    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*d0dff9baSBernard Iremonger
31*d0dff9baSBernard IremongerTest Pipeline Application
32*d0dff9baSBernard Iremonger=========================
33*d0dff9baSBernard Iremonger
34*d0dff9baSBernard IremongerThe Test Pipeline application illustrates the use of the Intel® DPDK Packet Framework tool suite.
35*d0dff9baSBernard IremongerIts purpose is to demonstrate the performance of single-table Intel® DPDK pipelines.
36*d0dff9baSBernard Iremonger
37*d0dff9baSBernard IremongerOverview
38*d0dff9baSBernard Iremonger--------
39*d0dff9baSBernard Iremonger
40*d0dff9baSBernard IremongerThe application uses three CPU cores:
41*d0dff9baSBernard Iremonger
42*d0dff9baSBernard Iremonger*   Core A ("RX core") receives traffic from the NIC ports and feeds core B with traffic through SW queues.
43*d0dff9baSBernard Iremonger
44*d0dff9baSBernard Iremonger*   Core B ("Pipeline core") implements a single-table Intel® DPDK pipeline
45*d0dff9baSBernard Iremonger    whose type is selectable through specific command line parameter.
46*d0dff9baSBernard Iremonger    Core B receives traffic from core A through software queues,
47*d0dff9baSBernard Iremonger    processes it according to the actions configured in the table entries that
48*d0dff9baSBernard Iremonger    are hit by the input packets and feeds it to core C through another set of software queues.
49*d0dff9baSBernard Iremonger
50*d0dff9baSBernard Iremonger*   Core C ("TX core") receives traffic from core B through software queues and sends it to the NIC ports for transmission.
51*d0dff9baSBernard Iremonger
52*d0dff9baSBernard Iremonger.. _figure_21:
53*d0dff9baSBernard Iremonger
54*d0dff9baSBernard Iremonger**Figure 21.Test Pipeline Application**
55*d0dff9baSBernard Iremonger
56*d0dff9baSBernard Iremonger.. image24_png has been renamed
57*d0dff9baSBernard Iremonger
58*d0dff9baSBernard Iremonger|test_pipeline_app|
59*d0dff9baSBernard Iremonger
60*d0dff9baSBernard IremongerCompiling the Application
61*d0dff9baSBernard Iremonger-------------------------
62*d0dff9baSBernard Iremonger
63*d0dff9baSBernard Iremonger#.  Go to the app/test directory:
64*d0dff9baSBernard Iremonger
65*d0dff9baSBernard Iremonger    .. code-block:: console
66*d0dff9baSBernard Iremonger
67*d0dff9baSBernard Iremonger        export RTE_SDK=/path/to/rte_sdk
68*d0dff9baSBernard Iremonger        cd ${RTE_SDK}/app/test/test-pipeline
69*d0dff9baSBernard Iremonger
70*d0dff9baSBernard Iremonger#.  Set the target (a default target is used if not specified):
71*d0dff9baSBernard Iremonger
72*d0dff9baSBernard Iremonger    .. code-block:: console
73*d0dff9baSBernard Iremonger
74*d0dff9baSBernard Iremonger        export RTE_TARGET=x86_64-native-linuxapp-gcc
75*d0dff9baSBernard Iremonger
76*d0dff9baSBernard Iremonger#.  Build the application:
77*d0dff9baSBernard Iremonger
78*d0dff9baSBernard Iremonger    .. code-block:: console
79*d0dff9baSBernard Iremonger
80*d0dff9baSBernard Iremonger        make
81*d0dff9baSBernard Iremonger
82*d0dff9baSBernard IremongerRunning the Application
83*d0dff9baSBernard Iremonger-----------------------
84*d0dff9baSBernard Iremonger
85*d0dff9baSBernard IremongerApplication Command Line
86*d0dff9baSBernard Iremonger~~~~~~~~~~~~~~~~~~~~~~~~
87*d0dff9baSBernard Iremonger
88*d0dff9baSBernard IremongerThe application execution command line is:
89*d0dff9baSBernard Iremonger
90*d0dff9baSBernard Iremonger.. code-block:: console
91*d0dff9baSBernard Iremonger
92*d0dff9baSBernard Iremonger    ./test-pipeline [EAL options] -- -p PORTMASK --TABLE_TYPE
93*d0dff9baSBernard Iremonger
94*d0dff9baSBernard IremongerThe -c EAL CPU core mask option has to contain exactly 3 CPU cores.
95*d0dff9baSBernard IremongerThe first CPU core in the core mask is assigned for core A, the second for core B and the third for core C.
96*d0dff9baSBernard Iremonger
97*d0dff9baSBernard IremongerThe PORTMASK parameter must contain 2 or 4 ports.
98*d0dff9baSBernard Iremonger
99*d0dff9baSBernard IremongerTable Types and Behavior
100*d0dff9baSBernard Iremonger~~~~~~~~~~~~~~~~~~~~~~~~
101*d0dff9baSBernard Iremonger
102*d0dff9baSBernard IremongerTable 3 describes the table types used and how they are populated.
103*d0dff9baSBernard Iremonger
104*d0dff9baSBernard IremongerThe hash tables are pre-populated with 16 million keys.
105*d0dff9baSBernard IremongerFor hash tables, the following parameters can be selected:
106*d0dff9baSBernard Iremonger
107*d0dff9baSBernard Iremonger*   **Configurable key size implementation or fixed (specialized) key size implementation (e.g. hash-8-ext or hash-spec-8-ext).**
108*d0dff9baSBernard Iremonger    The key size specialized implementations are expected to provide better performance for 8-byte and 16-byte key sizes,
109*d0dff9baSBernard Iremonger    while the key-size-non-specialized implementation is expected to provide better performance for larger key sizes;
110*d0dff9baSBernard Iremonger
111*d0dff9baSBernard Iremonger*   **Key size (e.g. hash-spec-8-ext or hash-spec-16-ext).**
112*d0dff9baSBernard Iremonger    The available options are 8, 16 and 32 bytes;
113*d0dff9baSBernard Iremonger
114*d0dff9baSBernard Iremonger*   **Table type (e.g. hash-spec-16-ext or hash-spec-16-lru).**
115*d0dff9baSBernard Iremonger    The available options are ext (extendible bucket) or lru (least recently used).
116*d0dff9baSBernard Iremonger
117*d0dff9baSBernard Iremonger.. _table_3:
118*d0dff9baSBernard Iremonger
119*d0dff9baSBernard Iremonger**Table 3. Table Types**
120*d0dff9baSBernard Iremonger
121*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
122*d0dff9baSBernard Iremonger| **#** | **TABLE_TYPE**         | **Description of Core B Table**                          | **Pre-added Table Entries**                           |
123*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
124*d0dff9baSBernard Iremonger+=======+========================+==========================================================+=======================================================+
125*d0dff9baSBernard Iremonger| 1     | none                   | Core B is not implementing an Intel® DPDK pipeline.      | N/A                                                   |
126*d0dff9baSBernard Iremonger|       |                        | Core B is implementing a pass-through from its input set |                                                       |
127*d0dff9baSBernard Iremonger|       |                        | of software queues to its output set of software queues. |                                                       |
128*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
129*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
130*d0dff9baSBernard Iremonger| 2     | stub                   | Stub table. Core B is implementing the same pass-through | N/A                                                   |
131*d0dff9baSBernard Iremonger|       |                        | functionality as described for the "none" option by      |                                                       |
132*d0dff9baSBernard Iremonger|       |                        | using the Intel® DPDK Packet Framework by using one      |                                                       |
133*d0dff9baSBernard Iremonger|       |                        | stub table for each input NIC port.                      |                                                       |
134*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
135*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
136*d0dff9baSBernard Iremonger| 3     | hash-[spec]-8-lru      | LRU hash table with 8-byte key size and 16 million       | 16 million entries are successfully added to the      |
137*d0dff9baSBernard Iremonger|       |                        | entries.                                                 | hash table with the following key format:             |
138*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
139*d0dff9baSBernard Iremonger|       |                        |                                                          | [4-byte index, 4 bytes of 0]                          |
140*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+                                                       |
141*d0dff9baSBernard Iremonger| 4     | hash-[spec]-8-ext      |  Extendible bucket hash table with 8-byte key size       | The action configured for all table entries is        |
142*d0dff9baSBernard Iremonger|       |                        |  and 16 million entries.                                 | "Sendto output port", with the output port index      |
143*d0dff9baSBernard Iremonger|       |                        |                                                          | uniformly distributed for the range of output ports.  |
144*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
145*d0dff9baSBernard Iremonger|       |                        |                                                          | The default table rule (used in the case of a lookup  |
146*d0dff9baSBernard Iremonger|       |                        |                                                          | miss) is to drop the packet.                          |
147*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
148*d0dff9baSBernard Iremonger|       |                        |                                                          | At run time, core A is creating the following lookup  |
149*d0dff9baSBernard Iremonger|       |                        |                                                          | key and storing it into the packet meta data for      |
150*d0dff9baSBernard Iremonger|       |                        |                                                          | core B to use for table lookup:                       |
151*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
152*d0dff9baSBernard Iremonger|       |                        |                                                          | [destination IPv4 address, 4 bytes of 0]              |
153*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
154*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
155*d0dff9baSBernard Iremonger| 5     | hash-[spec]-16-lru     | LRU hash table with 16-byte key size and 16 million      | 16 million entries are successfully added to the hash |
156*d0dff9baSBernard Iremonger|       |                        | entries.                                                 | table with the following key format:                  |
157*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
158*d0dff9baSBernard Iremonger|       |                        |                                                          | [4-byte index, 12 bytes of 0]                         |
159*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+                                                       |
160*d0dff9baSBernard Iremonger| 6     | hash-[spec]-ash-16-ext | Extendible bucket hash table with 16-byte key size       | The action configured for all table entries is        |
161*d0dff9baSBernard Iremonger|       |                        | and 16 million entries.                                  | "Send to output port", with the output port index     |
162*d0dff9baSBernard Iremonger|       |                        |                                                          | uniformly distributed for the range of output ports.  |
163*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
164*d0dff9baSBernard Iremonger|       |                        |                                                          | The default table rule (used in the case of a lookup  |
165*d0dff9baSBernard Iremonger|       |                        |                                                          | miss) is to drop the packet.                          |
166*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
167*d0dff9baSBernard Iremonger|       |                        |                                                          | At run time, core A is creating the following lookup  |
168*d0dff9baSBernard Iremonger|       |                        |                                                          | key and storing it into the packet meta data for core |
169*d0dff9baSBernard Iremonger|       |                        |                                                          | B to use for table lookup:                            |
170*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
171*d0dff9baSBernard Iremonger|       |                        |                                                          | [destination IPv4 address, 12 bytes of 0]             |
172*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
173*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
174*d0dff9baSBernard Iremonger| 7     | hash-[spec]-32-lru     | LRU hash table with 32-byte key size and 16 million      | 16 million entries are successfully added to the hash |
175*d0dff9baSBernard Iremonger|       |                        | entries.                                                 |  table with the following key format:                 |
176*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
177*d0dff9baSBernard Iremonger|       |                        |                                                          | [4-byte index, 28 bytes of 0].                        |
178*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+                                                       |
179*d0dff9baSBernard Iremonger| 8     | hash-[spec]-32-ext     | Extendible bucket hash table with 32-byte key size       | The action configured for all table entries is        |
180*d0dff9baSBernard Iremonger|       |                        | and 16 million entries.                                  | "Send to output port", with the output port index     |
181*d0dff9baSBernard Iremonger|       |                        |                                                          | uniformly distributed for the range of output ports.  |
182*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
183*d0dff9baSBernard Iremonger|       |                        |                                                          | The default table rule (used in the case of a lookup  |
184*d0dff9baSBernard Iremonger|       |                        |                                                          | miss) is to drop the packet.                          |
185*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
186*d0dff9baSBernard Iremonger|       |                        |                                                          | At run time, core A is creating the following lookup  |
187*d0dff9baSBernard Iremonger|       |                        |                                                          | key and storing it into the packet meta data for      |
188*d0dff9baSBernard Iremonger|       |                        |                                                          | Lpmcore B to use for table lookup:                    |
189*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
190*d0dff9baSBernard Iremonger|       |                        |                                                          | [destination IPv4 address, 28 bytes of 0]             |
191*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
192*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
193*d0dff9baSBernard Iremonger| 9     | lpm                    | Longest Prefix Match (LPM) IPv4 table.                   | In the case of two ports, two routes                  |
194*d0dff9baSBernard Iremonger|       |                        |                                                          | are added to the table:                               |
195*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
196*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.0.0.0/9 => send to output port 0]                  |
197*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
198*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.128.0.0/9 => send to output port 1]                |
199*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
200*d0dff9baSBernard Iremonger|       |                        |                                                          | In case of four ports, four entries are added to the  |
201*d0dff9baSBernard Iremonger|       |                        |                                                          | table:                                                |
202*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
203*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.0.0.0/10 => send to output port 0]                 |
204*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
205*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.64.0.0/10 => send to output port 1]                |
206*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
207*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.128.0.0/10 => send to output port 2]               |
208*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
209*d0dff9baSBernard Iremonger|       |                        |                                                          | [0.192.0.0/10 => send to output port 3]               |
210*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
211*d0dff9baSBernard Iremonger|       |                        |                                                          | The default table rule (used in the case of a lookup  |
212*d0dff9baSBernard Iremonger|       |                        |                                                          | miss) is to drop the packet.                          |
213*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
214*d0dff9baSBernard Iremonger|       |                        |                                                          | At run time, core A is storing the IPv4 destination   |
215*d0dff9baSBernard Iremonger|       |                        |                                                          | within the packet meta data to be later used by core  |
216*d0dff9baSBernard Iremonger|       |                        |                                                          | B as the lookup key.                                  |
217*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
218*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
219*d0dff9baSBernard Iremonger| 10    | acl                    | Access Control List (ACL) table                          | In the case of two ports, two ACL rules are added to  |
220*d0dff9baSBernard Iremonger|       |                        |                                                          | the table:                                            |
221*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
222*d0dff9baSBernard Iremonger|       |                        |                                                          | [priority = 0 (highest),                              |
223*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
224*d0dff9baSBernard Iremonger|       |                        |                                                          | IPv4 source = ANY,                                    |
225*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
226*d0dff9baSBernard Iremonger|       |                        |                                                          | IPv4 destination = 0.0.0.0/9,                         |
227*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
228*d0dff9baSBernard Iremonger|       |                        |                                                          | L4 protocol = ANY,                                    |
229*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
230*d0dff9baSBernard Iremonger|       |                        |                                                          | TCP source port = ANY,                                |
231*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
232*d0dff9baSBernard Iremonger|       |                        |                                                          | TCP destination port = ANY                            |
233*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
234*d0dff9baSBernard Iremonger|       |                        |                                                          | => send to output port 0]                             |
235*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
236*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
237*d0dff9baSBernard Iremonger|       |                        |                                                          | [priority = 0 (highest),                              |
238*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
239*d0dff9baSBernard Iremonger|       |                        |                                                          | IPv4 source = ANY,                                    |
240*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
241*d0dff9baSBernard Iremonger|       |                        |                                                          | IPv4 destination = 0.128.0.0/9,                       |
242*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
243*d0dff9baSBernard Iremonger|       |                        |                                                          | L4 protocol = ANY,                                    |
244*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
245*d0dff9baSBernard Iremonger|       |                        |                                                          | TCP source port = ANY,                                |
246*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
247*d0dff9baSBernard Iremonger|       |                        |                                                          | TCP destination port = ANY                            |
248*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
249*d0dff9baSBernard Iremonger|       |                        |                                                          | => send to output port 0].                            |
250*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
251*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
252*d0dff9baSBernard Iremonger|       |                        |                                                          | The default table rule (used in the case of a lookup  |
253*d0dff9baSBernard Iremonger|       |                        |                                                          | miss) is to drop the packet.                          |
254*d0dff9baSBernard Iremonger|       |                        |                                                          |                                                       |
255*d0dff9baSBernard Iremonger+-------+------------------------+----------------------------------------------------------+-------------------------------------------------------+
256*d0dff9baSBernard Iremonger
257*d0dff9baSBernard IremongerInput Traffic
258*d0dff9baSBernard Iremonger~~~~~~~~~~~~~
259*d0dff9baSBernard Iremonger
260*d0dff9baSBernard IremongerRegardless of the table type used for the core B pipeline,
261*d0dff9baSBernard Iremongerthe same input traffic can be used to hit all table entries with uniform distribution,
262*d0dff9baSBernard Iremongerwhich results in uniform distribution of packets sent out on the set of output NIC ports.
263*d0dff9baSBernard IremongerThe profile for input traffic is TCP/IPv4 packets with:
264*d0dff9baSBernard Iremonger
265*d0dff9baSBernard Iremonger*   destination IP address as A.B.C.D with A fixed to 0 and B, C,D random
266*d0dff9baSBernard Iremonger
267*d0dff9baSBernard Iremonger*   source IP address fixed to 0.0.0.0
268*d0dff9baSBernard Iremonger
269*d0dff9baSBernard Iremonger*   destination TCP port fixed to 0
270*d0dff9baSBernard Iremonger
271*d0dff9baSBernard Iremonger*   source TCP port fixed to 0
272*d0dff9baSBernard Iremonger
273*d0dff9baSBernard Iremonger.. |test_pipeline_app| image:: img/test_pipeline_app.png
274