xref: /dpdk/doc/guides/sample_app_ug/intro.rst (revision 487eec3401b7a1664982f39da139980a4f5b3adc)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2010-2017 Intel Corporation.
3
4Introduction to the DPDK Sample Applications
5============================================
6
7The DPDK Sample Applications are small standalone applications which
8demonstrate various features of DPDK. They can be considered as a cookbook of
9DPDK features.  Users interested in getting started with DPDK can take the
10applications, try out the features, and then extend them to fit their needs.
11
12
13Running Sample Applications
14---------------------------
15
16Some sample applications may have their own command-line parameters described in
17their respective guides, however all of them also share the same EAL parameters.
18Please refer to :doc:`EAL parameters (Linux) <../linux_gsg/linux_eal_parameters>`
19or :doc:`EAL parameters (FreeBSD) <../freebsd_gsg/freebsd_eal_parameters>` for
20a list of available EAL command-line options.
21
22
23The DPDK Sample Applications
24----------------------------
25
26There are many sample applications available in the examples directory of DPDK.
27These examples range from simple to reasonably complex but most are designed
28to demonstrate one particular feature of DPDK. Some of the more interesting
29examples are highlighted below.
30
31
32* :doc:`Hello World<hello_world>`: As with most introductions to a
33  programming framework a good place to start is with the Hello World
34  application. The Hello World example sets up the DPDK Environment Abstraction
35  Layer (EAL), and prints a simple "Hello World" message to each of the DPDK
36  enabled cores. This application doesn't do any packet forwarding but it is a
37  good way to test if the DPDK environment is compiled and set up properly.
38
39* :doc:`Basic Forwarding/Skeleton Application<skeleton>`: The Basic
40  Forwarding/Skeleton contains the minimum amount of code required to enable
41  basic packet forwarding with DPDK. This allows you to test if your network
42  interfaces are working with DPDK.
43
44* :doc:`Network Layer 2 forwarding<l2_forward_real_virtual>`: The Network Layer 2
45  forwarding, or ``l2fwd`` application does forwarding based on Ethernet MAC
46  addresses like a simple switch.
47
48* :doc:`Network Layer 3 forwarding<l3_forward>`: The Network Layer3
49  forwarding, or ``l3fwd`` application does forwarding based on Internet
50  Protocol, IPv4 or IPv6 like a simple router.
51
52* :doc:`Hardware packet copying<ioat>`: The Hardware packet copying,
53  or ``ioatfwd`` application demonstrates how to use IOAT rawdev driver for
54  copying packets between two threads.
55
56* :doc:`Packet Distributor<dist_app>`: The Packet Distributor
57  demonstrates how to distribute packets arriving on an Rx port to different
58  cores for processing and transmission.
59
60* :doc:`Multi-Process Application<multi_process>`: The
61  multi-process application shows how two DPDK processes can work together using
62  queues and memory pools to share information.
63
64* :doc:`RX/TX callbacks Application<rxtx_callbacks>`: The RX/TX
65  callbacks sample application is a packet forwarding application that
66  demonstrates the use of user defined callbacks on received and transmitted
67  packets. The application calculates the latency of a packet between RX
68  (packet arrival) and TX (packet transmission) by adding callbacks to the RX
69  and TX packet processing functions.
70
71* :doc:`IPsec Security Gateway<ipsec_secgw>`: The IPsec Security
72  Gateway application is minimal example of something closer to a real world
73  example. This is also a good example of an application using the DPDK
74  Cryptodev framework.
75
76* :doc:`Precision Time Protocol (PTP) client<ptpclient>`: The PTP
77  client is another minimal implementation of a real world application.
78  In this case the application is a PTP client that communicates with a PTP
79  master clock to synchronize time on a Network Interface Card (NIC) using the
80  IEEE1588 protocol.
81
82* :doc:`Quality of Service (QoS) Scheduler<qos_scheduler>`: The QoS
83  Scheduler application demonstrates the use of DPDK to provide QoS scheduling.
84
85There are many more examples shown in the following chapters. Each of the
86documented sample applications show how to compile, configure and run the
87application as well as explaining the main functionality of the code.
88