xref: /dpdk/doc/guides/sample_app_ug/intro.rst (revision d629b7b5fe812f0040b83d27d2ada33b003aa918)
15630257fSFerruh Yigit..  SPDX-License-Identifier: BSD-3-Clause
25630257fSFerruh Yigit    Copyright(c) 2010-2017 Intel Corporation.
3d0dff9baSBernard Iremonger
4bef33b0aSMarko KovacevicIntroduction to the DPDK Sample Applications
5bef33b0aSMarko Kovacevic============================================
6d0dff9baSBernard Iremonger
7bef33b0aSMarko KovacevicThe DPDK Sample Applications are small standalone applications which
8bef33b0aSMarko Kovacevicdemonstrate various features of DPDK. They can be considered as a cookbook of
9bef33b0aSMarko KovacevicDPDK features.  Users interested in getting started with DPDK can take the
10bef33b0aSMarko Kovacevicapplications, try out the features, and then extend them to fit their needs.
11d0dff9baSBernard Iremonger
12d0dff9baSBernard Iremonger
133ee567cfSAnatoly BurakovRunning Sample Applications
143ee567cfSAnatoly Burakov---------------------------
153ee567cfSAnatoly Burakov
163ee567cfSAnatoly BurakovSome sample applications may have their own command-line parameters described in
173ee567cfSAnatoly Burakovtheir respective guides, however all of them also share the same EAL parameters.
183ee567cfSAnatoly BurakovPlease refer to  :doc:`../linux_gsg/linux_eal_parameters` or
193ee567cfSAnatoly Burakov:doc:`../freebsd_gsg/freebsd_eal_parameters` for a list of available EAL
203ee567cfSAnatoly Burakovcommand-line options.
213ee567cfSAnatoly Burakov
223ee567cfSAnatoly Burakov
23bef33b0aSMarko KovacevicThe DPDK Sample Applications
24bef33b0aSMarko Kovacevic----------------------------
25d0dff9baSBernard Iremonger
26bef33b0aSMarko KovacevicTable :numref:`table_sample_apps` shows a list of some of the main sample
27bef33b0aSMarko Kovacevicapplications that are available in the examples directory of DPDK:
28d0dff9baSBernard Iremonger
29bef33b0aSMarko Kovacevic .. _table_sample_apps:
30d0dff9baSBernard Iremonger
31bef33b0aSMarko Kovacevic .. table:: **Some of the DPDK Sample applications**
32d0dff9baSBernard Iremonger
33bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
34bef33b0aSMarko Kovacevic    | Bonding                               | Netmap Compatibility                 |
35bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
36bef33b0aSMarko Kovacevic    | Command Line                          | Packet Ordering                      |
37bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
38bef33b0aSMarko Kovacevic    | Distributor                           | Performance Thread                   |
39bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
40bef33b0aSMarko Kovacevic    | Ethtool                               | Precision Time Protocol (PTP) Client |
41bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
42bef33b0aSMarko Kovacevic    | Exception Path                        | Quality of Service (QoS) Metering    |
43bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
44bef33b0aSMarko Kovacevic    | Hello World                           | QoS Scheduler                        |
45bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
46bef33b0aSMarko Kovacevic    | Internet Protocol (IP) Fragmentation  | Quota and Watermark                  |
47bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
48bef33b0aSMarko Kovacevic    | IP Pipeline                           | RX/TX Callbacks                      |
49bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
50bef33b0aSMarko Kovacevic    | IP Reassembly                         | Server node EFD                      |
51bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
52bef33b0aSMarko Kovacevic    | IPsec Security Gateway                | Basic Forwarding/Skeleton App        |
53bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
54bef33b0aSMarko Kovacevic    | IPv4 multicast                        | Tunnel End Point (TEP) termination   |
55bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
56bef33b0aSMarko Kovacevic    | Kernel NIC Interface                  | Timer                                |
57bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
58bef33b0aSMarko Kovacevic    | Network Layer 2 Forwarding + variants | Vhost                                |
59bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
60bef33b0aSMarko Kovacevic    | Network Layer 3 Forwarding + variants | Vhost Xen                            |
61bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
62bef33b0aSMarko Kovacevic    | Link Status Interrupt                 | VMDQ Forwarding                      |
63bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
64bef33b0aSMarko Kovacevic    | Load Balancer                         | VMDQ and DCB Forwarding              |
65bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
66bef33b0aSMarko Kovacevic    | Multi-process                         | VM Power Management                  |
67bef33b0aSMarko Kovacevic    +---------------------------------------+--------------------------------------+
68d0dff9baSBernard Iremonger
69bef33b0aSMarko KovacevicThese examples range from simple to reasonably complex but most are designed
70bef33b0aSMarko Kovacevicto demonstrate one particular feature of DPDK. Some of the more interesting
71bef33b0aSMarko Kovacevicexamples are highlighted below.
72d0dff9baSBernard Iremonger
73d0dff9baSBernard Iremonger
74bef33b0aSMarko Kovacevic* :doc:`Hello World<hello_world>`: As with most introductions to a
75bef33b0aSMarko Kovacevic  programming framework a good place to start is with the Hello World
76bef33b0aSMarko Kovacevic  application. The Hello World example sets up the DPDK Environment Abstraction
77bef33b0aSMarko Kovacevic  Layer (EAL), and prints a simple "Hello World" message to each of the DPDK
78bef33b0aSMarko Kovacevic  enabled cores. This application doesn't do any packet forwarding but it is a
79bef33b0aSMarko Kovacevic  good way to test if the DPDK environment is compiled and set up properly.
80d0dff9baSBernard Iremonger
81bef33b0aSMarko Kovacevic* :doc:`Basic Forwarding/Skeleton Application<skeleton>`: The Basic
82bef33b0aSMarko Kovacevic  Forwarding/Skeleton contains the minimum amount of code required to enable
83bef33b0aSMarko Kovacevic  basic packet forwarding with DPDK. This allows you to test if your network
84bef33b0aSMarko Kovacevic  interfaces are working with DPDK.
85d0dff9baSBernard Iremonger
86bef33b0aSMarko Kovacevic* :doc:`Network Layer 2 forwarding<l2_forward_real_virtual>`: The Network Layer 2
87bef33b0aSMarko Kovacevic  forwarding, or ``l2fwd`` application does forwarding based on Ethernet MAC
88bef33b0aSMarko Kovacevic  addresses like a simple switch.
89bef33b0aSMarko Kovacevic
90bef33b0aSMarko Kovacevic* :doc:`Network Layer 3 forwarding<l3_forward>`: The Network Layer3
91bef33b0aSMarko Kovacevic  forwarding, or ``l3fwd`` application does forwarding based on Internet
92bef33b0aSMarko Kovacevic  Protocol, IPv4 or IPv6 like a simple router.
93bef33b0aSMarko Kovacevic
94bef33b0aSMarko Kovacevic* :doc:`Packet Distributor<dist_app>`: The Packet Distributor
95bef33b0aSMarko Kovacevic  demonstrates how to distribute packets arriving on an Rx port to different
96bef33b0aSMarko Kovacevic  cores for processing and transmission.
97bef33b0aSMarko Kovacevic
98bef33b0aSMarko Kovacevic* :doc:`Multi-Process Application<multi_process>`: The
99bef33b0aSMarko Kovacevic  multi-process application shows how two DPDK processes can work together using
100bef33b0aSMarko Kovacevic  queues and memory pools to share information.
101bef33b0aSMarko Kovacevic
102bef33b0aSMarko Kovacevic* :doc:`RX/TX callbacks Application<rxtx_callbacks>`: The RX/TX
103bef33b0aSMarko Kovacevic  callbacks sample application is a packet forwarding application that
104bef33b0aSMarko Kovacevic  demonstrates the use of user defined callbacks on received and transmitted
105bef33b0aSMarko Kovacevic  packets. The application calculates the latency of a packet between RX
106bef33b0aSMarko Kovacevic  (packet arrival) and TX (packet transmission) by adding callbacks to the RX
107bef33b0aSMarko Kovacevic  and TX packet processing functions.
108bef33b0aSMarko Kovacevic
109*d629b7b5SJohn McNamara* :doc:`IPsec Security Gateway<ipsec_secgw>`: The IPsec Security
110bef33b0aSMarko Kovacevic  Gateway application is minimal example of something closer to a real world
111bef33b0aSMarko Kovacevic  example. This is also a good example of an application using the DPDK
112bef33b0aSMarko Kovacevic  Cryptodev framework.
113bef33b0aSMarko Kovacevic
114bef33b0aSMarko Kovacevic* :doc:`Precision Time Protocol (PTP) client<ptpclient>`: The PTP
115bef33b0aSMarko Kovacevic  client is another minimal implementation of a real world application.
116bef33b0aSMarko Kovacevic  In this case the application is a PTP client that communicates with a PTP
117bef33b0aSMarko Kovacevic  master clock to synchronize time on a Network Interface Card (NIC) using the
118bef33b0aSMarko Kovacevic  IEEE1588 protocol.
119bef33b0aSMarko Kovacevic
120bef33b0aSMarko Kovacevic* :doc:`Quality of Service (QoS) Scheduler<qos_scheduler>`: The QoS
121bef33b0aSMarko Kovacevic  Scheduler application demonstrates the use of DPDK to provide QoS scheduling.
122bef33b0aSMarko Kovacevic
123bef33b0aSMarko KovacevicThere are many more examples shown in the following chapters. Each of the
124bef33b0aSMarko Kovacevicdocumented sample applications show how to compile, configure and run the
125bef33b0aSMarko Kovacevicapplication as well as explaining the main functionality of the code.
126