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 that 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, they all 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 2 forwarding<l2_forward_event>`: The Network Layer 2 49 forwarding, or ``l2fwd-event`` application does forwarding based on Ethernet MAC 50 addresses like a simple switch. It demonstrates usage of poll and event mode 51 IO mechanism under a single application. 52 53* :doc:`Network Layer 3 forwarding<l3_forward>`: The Network Layer3 54 forwarding, or ``l3fwd`` application does forwarding based on Internet 55 Protocol, IPv4 or IPv6 like a simple router. 56 57* :doc:`Network Layer 3 forwarding Graph<l3_forward_graph>`: The Network Layer3 58 forwarding Graph, or ``l3fwd_graph`` application does forwarding based on IPv4 59 like a simple router with DPDK Graph framework. 60 61* :doc:`Hardware packet copying<dma>`: The Hardware packet copying, 62 or ``dmafwd`` application demonstrates how to use DMAdev library for 63 copying packets between two threads. 64 65* :doc:`Packet Distributor<dist_app>`: The Packet Distributor 66 demonstrates how to distribute packets arriving on an Rx port to different 67 cores for processing and transmission. 68 69* :doc:`Multi-Process Application<multi_process>`: The 70 multi-process application shows how two DPDK processes can work together using 71 queues and memory pools to share information. 72 73* :doc:`RX/TX callbacks Application<rxtx_callbacks>`: The RX/TX 74 callbacks sample application is a packet forwarding application that 75 demonstrates the use of user-defined callbacks on received and transmitted 76 packets. The application calculates the latency of a packet between RX 77 (packet arrival) and TX (packet transmission) by adding callbacks to the RX 78 and TX packet processing functions. 79 80* :doc:`IPsec Security Gateway<ipsec_secgw>`: The IPsec Security 81 Gateway application is a minimal example of something closer to a real world 82 example. This is also a good example of an application using the DPDK 83 Cryptodev framework. 84 85* :doc:`Precision Time Protocol (PTP) client<ptpclient>`: The PTP 86 client is another minimal implementation of a real world application. 87 In this case, the application is a PTP client that communicates with a PTP 88 time transmitter to synchronize time on a Network Interface Card (NIC) using the 89 IEEE1588 protocol. 90 91* :doc:`Quality of Service (QoS) Scheduler<qos_scheduler>`: The QoS 92 Scheduler application demonstrates the use of DPDK to provide QoS scheduling. 93 94There are many more examples shown in the following chapters. Each of the 95documented sample applications show how to compile, configure and run the 96application, as well as explaining the main functionality of the code. 97