xref: /dpdk/doc/guides/prog_guide/source_org.rst (revision fc1f2750a3ec6da919e3c86e59d56f34ec97154b)
1*fc1f2750SBernard Iremonger..  BSD LICENSE
2*fc1f2750SBernard Iremonger    Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
3*fc1f2750SBernard Iremonger    All rights reserved.
4*fc1f2750SBernard Iremonger
5*fc1f2750SBernard Iremonger    Redistribution and use in source and binary forms, with or without
6*fc1f2750SBernard Iremonger    modification, are permitted provided that the following conditions
7*fc1f2750SBernard Iremonger    are met:
8*fc1f2750SBernard Iremonger
9*fc1f2750SBernard Iremonger    * Redistributions of source code must retain the above copyright
10*fc1f2750SBernard Iremonger    notice, this list of conditions and the following disclaimer.
11*fc1f2750SBernard Iremonger    * Redistributions in binary form must reproduce the above copyright
12*fc1f2750SBernard Iremonger    notice, this list of conditions and the following disclaimer in
13*fc1f2750SBernard Iremonger    the documentation and/or other materials provided with the
14*fc1f2750SBernard Iremonger    distribution.
15*fc1f2750SBernard Iremonger    * Neither the name of Intel Corporation nor the names of its
16*fc1f2750SBernard Iremonger    contributors may be used to endorse or promote products derived
17*fc1f2750SBernard Iremonger    from this software without specific prior written permission.
18*fc1f2750SBernard Iremonger
19*fc1f2750SBernard Iremonger    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20*fc1f2750SBernard Iremonger    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21*fc1f2750SBernard Iremonger    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22*fc1f2750SBernard Iremonger    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23*fc1f2750SBernard Iremonger    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*fc1f2750SBernard Iremonger    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25*fc1f2750SBernard Iremonger    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26*fc1f2750SBernard Iremonger    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27*fc1f2750SBernard Iremonger    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28*fc1f2750SBernard Iremonger    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29*fc1f2750SBernard Iremonger    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30*fc1f2750SBernard Iremonger
31*fc1f2750SBernard Iremonger**Part 2: Development Environment**
32*fc1f2750SBernard Iremonger
33*fc1f2750SBernard IremongerSource Organization
34*fc1f2750SBernard Iremonger===================
35*fc1f2750SBernard Iremonger
36*fc1f2750SBernard IremongerThis section describes the organization of sources in the Intel® DPDK framework.
37*fc1f2750SBernard Iremonger
38*fc1f2750SBernard IremongerMakefiles and Config
39*fc1f2750SBernard Iremonger--------------------
40*fc1f2750SBernard Iremonger
41*fc1f2750SBernard Iremonger.. note::
42*fc1f2750SBernard Iremonger
43*fc1f2750SBernard Iremonger    In the following descriptions,
44*fc1f2750SBernard Iremonger    RTE_SDK is the environment variable that points to the base directory into which the tarball was extracted.
45*fc1f2750SBernard Iremonger    See
46*fc1f2750SBernard Iremonger    :ref:`Useful Variables Provided by the Build System <Useful_Variables_Provided_by_the_Build_System>`
47*fc1f2750SBernard Iremonger    for descriptions of other variables.
48*fc1f2750SBernard Iremonger
49*fc1f2750SBernard IremongerMakefiles that are provided by the Intel® DPDK libraries and applications are located in $(RTE_SDK)/mk.
50*fc1f2750SBernard Iremonger
51*fc1f2750SBernard IremongerConfig templates are located in $(RTE_SDK)/config. The templates describe the options that are enabled for each target.
52*fc1f2750SBernard IremongerThe config file also contains items that can be enabled and disabled for many of the Intel® DPDK libraries,
53*fc1f2750SBernard Iremongerincluding debug options.
54*fc1f2750SBernard IremongerThe user should look at the config file and become familiar with the options.
55*fc1f2750SBernard IremongerThe config file is also used to create a header file, which will be located in the new build directory.
56*fc1f2750SBernard Iremonger
57*fc1f2750SBernard IremongerLibraries
58*fc1f2750SBernard Iremonger---------
59*fc1f2750SBernard Iremonger
60*fc1f2750SBernard IremongerLibraries are located in subdirectories of $(RTE_SDK)/lib.
61*fc1f2750SBernard IremongerBy convention, we call a library any code that provides an API to an application.
62*fc1f2750SBernard IremongerTypically, it generates an archive file (.a), but a kernel module should also go in the same directory.
63*fc1f2750SBernard Iremonger
64*fc1f2750SBernard IremongerThe lib directory contains::
65*fc1f2750SBernard Iremonger
66*fc1f2750SBernard Iremonger    lib
67*fc1f2750SBernard Iremonger    +-- librte_cmdline      # command line interface helper
68*fc1f2750SBernard Iremonger    +-- librte_distributor  # packet distributor
69*fc1f2750SBernard Iremonger    +-- librte_eal          # environment abstraction layer
70*fc1f2750SBernard Iremonger    +-- librte_ether        # generic interface to poll mode driver
71*fc1f2750SBernard Iremonger    +-- librte_hash         # hash library
72*fc1f2750SBernard Iremonger    +-- librte_ip_frag      # IP fragmentation library
73*fc1f2750SBernard Iremonger    +-- librte_ivshmem      # QEMU IVSHMEM library
74*fc1f2750SBernard Iremonger    +-- librte_kni          # kernel NIC interface
75*fc1f2750SBernard Iremonger    +-- librte_kvargs       # argument parsing library
76*fc1f2750SBernard Iremonger    +-- librte_lpm          # longest prefix match library
77*fc1f2750SBernard Iremonger    +-- librte_malloc       # malloc-like functions
78*fc1f2750SBernard Iremonger    +-- librte_mbuf         # packet and control mbuf manipulation library
79*fc1f2750SBernard Iremonger    +-- librte_mempool      # memory pool manager (fixedsized objects)
80*fc1f2750SBernard Iremonger    +-- librte_meter        # QoS metering library
81*fc1f2750SBernard Iremonger    +-- librte_net          # various IP-related headers
82*fc1f2750SBernard Iremonger    +-- librte_pmd_bond     # bonding poll mode driver
83*fc1f2750SBernard Iremonger    +-- librte_pmd_e1000    # 1GbE poll mode drivers (igb and em)
84*fc1f2750SBernard Iremonger    +-- librte_pmd_ixgbe    # 10GbE poll mode driver
85*fc1f2750SBernard Iremonger    +-- librte_pmd_i40e     # 40GbE poll mode driver
86*fc1f2750SBernard Iremonger    +-- librte_pmd_pcap     # PCAP poll mode driver
87*fc1f2750SBernard Iremonger    +-- librte_pmd_ring     # ring poll mode driver
88*fc1f2750SBernard Iremonger    +-- librte_pmd_virtio   # virtio poll mode driver
89*fc1f2750SBernard Iremonger    +-- librte_pmd_vmxnet3  # VMXNET3 poll mode driver
90*fc1f2750SBernard Iremonger    +-- librte_pmd_xenvirt  # Xen virtio poll mode driver
91*fc1f2750SBernard Iremonger    +-- librte_power        # power management library
92*fc1f2750SBernard Iremonger    +-- librte_ring         # software rings (act as lockless FIFOs)
93*fc1f2750SBernard Iremonger    +-- librte_sched        # QoS scheduler and dropper library
94*fc1f2750SBernard Iremonger    +-- librte_timer        # timer library
95*fc1f2750SBernard Iremonger
96*fc1f2750SBernard IremongerApplications
97*fc1f2750SBernard Iremonger------------
98*fc1f2750SBernard Iremonger
99*fc1f2750SBernard IremongerApplications are sources that contain a main() function.
100*fc1f2750SBernard IremongerThey are located in the $(RTE_SDK)/app and $(RTE_SDK)/examples directories.
101*fc1f2750SBernard Iremonger
102*fc1f2750SBernard IremongerThe app directory contains sample applications that are used to test the Intel® DPDK (autotests).
103*fc1f2750SBernard IremongerThe examples directory contains sample applications that show how libraries can be used.
104*fc1f2750SBernard Iremonger
105*fc1f2750SBernard Iremonger::
106*fc1f2750SBernard Iremonger
107*fc1f2750SBernard Iremonger    app
108*fc1f2750SBernard Iremonger    +-- chkincs            # test prog to check include depends
109*fc1f2750SBernard Iremonger    +-- test               # autotests, to validate DPDK features
110*fc1f2750SBernard Iremonger    `-- test-pmd           # test and bench poll mode driver examples
111*fc1f2750SBernard Iremonger
112*fc1f2750SBernard Iremonger    examples
113*fc1f2750SBernard Iremonger    +-- cmdline            # Example of using cmdline library
114*fc1f2750SBernard Iremonger    +-- dpdk_qat           # Example showing integration with Intel QuickAssist
115*fc1f2750SBernard Iremonger    +-- exception_path     # Sending packets to and from Linux ethernet device (TAP)
116*fc1f2750SBernard Iremonger    +-- helloworld         # Helloworld basic example
117*fc1f2750SBernard Iremonger    +-- ip_reassembly      # Example showing IP Reassembly
118*fc1f2750SBernard Iremonger    +-- ip_fragmentation   # Example showing IPv4 Fragmentation
119*fc1f2750SBernard Iremonger    +-- ipv4_multicast     # Example showing IPv4 Multicast
120*fc1f2750SBernard Iremonger    +-- kni                # Kernel NIC Interface example
121*fc1f2750SBernard Iremonger    +-- l2fwd              # L2 Forwarding example with and without SR-IOV
122*fc1f2750SBernard Iremonger    +-- l3fwd              # L3 Forwarding example
123*fc1f2750SBernard Iremonger    +-- l3fwd-power        # L3 Forwarding example with power management
124*fc1f2750SBernard Iremonger    +-- l3fwd-vf           # L3 Forwarding example with SR-IOV
125*fc1f2750SBernard Iremonger    +-- link_status_interrupt # Link status change interrupt example
126*fc1f2750SBernard Iremonger    +-- load_balancer      # Load balancing across multiple cores/sockets
127*fc1f2750SBernard Iremonger    +-- multi_process      # Example applications with multiple DPDK processes
128*fc1f2750SBernard Iremonger    +-- qos_meter          # QoS metering example
129*fc1f2750SBernard Iremonger    +-- qos_sched          # QoS scheduler and dropper example
130*fc1f2750SBernard Iremonger    +-- timer              # Example of using librte_timer library
131*fc1f2750SBernard Iremonger    +-- vmdq_dcb           # Intel 82599 Ethernet Controller VMDQ and DCB receiving
132*fc1f2750SBernard Iremonger    +-- vmdq               # Example of VMDQ receiving for both Intel 10G (82599) and 1G (82576, 82580 and I350) Ethernet Controllers
133*fc1f2750SBernard Iremonger    `-- vhost              # Example of userspace vhost and switch
134*fc1f2750SBernard Iremonger
135*fc1f2750SBernard Iremonger.. note::
136*fc1f2750SBernard Iremonger
137*fc1f2750SBernard Iremonger    The actual examples directory may contain additional sample applications to those shown above.
138*fc1f2750SBernard Iremonger    Check the latest Intel® DPDK source files for details.
139