51. Extending the DPDK

This chapter describes how a developer can extend the DPDK to provide a new library, a new target, or support a new target.

51.1. Example: Adding a New Library libfoo

To add a new library to the DPDK, proceed as follows:

  1. Add a new configuration option:

    for f in config/\*; do \
        echo CONFIG_RTE_LIBFOO=y >> $f; done
    
  2. Create a new directory with sources:

    mkdir ${RTE_SDK}/lib/libfoo
    touch ${RTE_SDK}/lib/libfoo/foo.c
    touch ${RTE_SDK}/lib/libfoo/foo.h
    
  3. Add a foo() function in libfoo.

    Definition is in foo.c:

    void foo(void)
    {
    }
    

    Declaration is in foo.h:

    extern void foo(void);
    
  4. Update lib/Makefile:

    vi ${RTE_SDK}/lib/Makefile
    # add:
    # DIRS-$(CONFIG_RTE_LIBFOO) += libfoo
    
  5. Create a new Makefile for this library, for example, derived from mempool Makefile:

    cp ${RTE_SDK}/lib/librte_mempool/Makefile ${RTE_SDK}/lib/libfoo/
    
    vi ${RTE_SDK}/lib/libfoo/Makefile
    # replace:
    # librte_mempool -> libfoo
    # rte_mempool -> foo
    
  6. Update mk/DPDK.app.mk, and add -lfoo in LDLIBS variable when the option is enabled. This will automatically add this flag when linking a DPDK application.

  7. Build the DPDK with the new library (we only show a specific target here):

    cd ${RTE_SDK}
    make config T=x86_64-native-linuxapp-gcc
    make
    
  8. Check that the library is installed:

    ls build/lib
    ls build/include
    

51.1.1. Example: Using libfoo in the Test Application

The test application is used to validate all functionality of the DPDK. Once you have added a library, a new test case should be added in the test application.

  • A new test_foo.c file should be added, that includes foo.h and calls the foo() function from test_foo(). When the test passes, the test_foo() function should return 0.

  • Makefile, test.h and commands.c must be updated also, to handle the new test case.

  • Test report generation: autotest.py is a script that is used to generate the test report that is available in the ${RTE_SDK}/doc/rst/test_report/autotests directory. This script must be updated also. If libfoo is in a new test family, the links in ${RTE_SDK}/doc/rst/test_report/test_report.rst must be updated.

  • Build the DPDK with the updated test application (we only show a specific target here):

    cd ${RTE_SDK}
    make config T=x86_64-native-linuxapp-gcc
    make