Menu

AF_XDP Getting Started

Ashok Sunder Rajan

System Requirement

Ubuntu 18.04.4 LTS\

1. Upgrade Kernel- Install kernel sources and kernel header

Note: :Kernel 5.4.1 perferred. Tested base of XDP

Ensure liblz4-tool is installed. Else make after make menuconfig fails
$ apt install liblz4-tool

Select kernel 5.4.1::\
https://cdn.kernel.org/pub/linux/kernel/v5.x/
$ cd /usr/src\
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/<kernel-version =="linux-5.4.51">.tar.xz\</kernel-version>

$ tar -xvf <kernel-version>.tar.xz\
$ cd <kernel-version>\
$ make menuconfig</kernel-version></kernel-version>

Note: Ensure XDP sockets & monitoring interface are selected in menuconfig on-screen::

Networking support -->\
     Networking options -->\
            [ * ] XDP sockets\
            <M>   XDP sockets: monitoring interface

$ make -j64\
$ make modules_install install -j64\
$ make install -j64\
$ make headers_install\
$ pushd tools/lib/bpf\
$ make clean && make install && make install_headers\
$ popd\
$ make headers_install ARCH=x86_64 INSTALL_HDR_PATH=/usr\
$ update-grub\
$ reboot

Build libbpf in tools/lib/bpf:

$ pushd /usr/src/<kernel-version =="linux-5.4.51">/tools/lib/bpf\
$ make install_lib prefix=/usr\
$ make install_headers prefix=/usr\
$ popd</kernel-version>

2. COMPILE EBPF PROGRAM (on 18.04.4 LTS)

$ sudo apt-get update\
$ sudo apt-get upgrade\
$ sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libcap-dev libelf-dev libudev-dev libpci-dev libiberty-dev autoconf\
$ sudo apt-get install build-essential xz-utils curl\
$ pushd /usr/local\
$ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz\
$ tar -xvf clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz\
$ export PATH=/usr/local/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin:$PATH\
$ export LD_LIBRARY_PATH=/usr/local/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/lib:$LD_LIBRARY_PATH\
$ clang --version\
$ popd

EBPF CentOS (OPTIONAL):

$ sudo yum install centos-release-scl\
$ sudo yum install llvm-toolset-7\
$ scl enable llvm-toolset-7 bash\
$ sudo yum install devtoolset-3\
$ sudo yum install elfutils-libelf-devel\
$ clang --version

Export Include paths:: libbpf.so, clang+llvm\

$ export LD_LIBRARY_PATH=/usr/src/<kernel-version>/tools/lib/bpf:$LD_LIBRARY_PATH\
$ export PATH=/usr/local/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin:$PATH\
$ export LD_LIBRARY_PATH=/usr/local/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/lib:$LD_LIBRARY_PATH</kernel-version>

3. Compile AF_XDP program:

$ cd /usr/src/linux-5.4.1
$ make M=samples/bpf
Executable xdpsock built at /usr/src/linux-5.4.1/samples/bpf/