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