Building a BPF/XDP coding environment

The following is a reliable way to create an eBPF/XDP environemnt which works outside of the coding tree.

This used to be a pain in the neck to setup but the XDP Project has managed to make it easy and accessible.

In a brand spanking new Debian Bookworm basic install, run the following commands as root.

apt install git build-essential linux-headers-amd64 pkg-config clang llvm \
        bpftool libmnl-dev m4 libpcap-dev libc6-dev-i386 libcap-dev \
        linux-perf ethtool
git clone 
cd xdp-tutorial
git submodule update --init
cd basic01-xdp-pass

I use VirtualBox for build VMs and by default it uses the “Intel PRO/1000 MT Destop” NIC driver. Unfortunately, this driver only supports XDP generic mode. I change the NIC driver to “Paravirtualized Network”, in order to ensure XDP works in native mode.

To check that everything as worked as expected run the compiled program as root:

> ./xdp_pass_user --skb-mode -d enp0s3
Success: Loading XDP prog name:xdp_prog_simple(id:51) on device:enp0s3(ifindex:2)

And then double check with bpftool:

> bpftool net show 
enp0s3(2) generic id 51


> bpftool prog dump xlated id 51
int xdp_prog_simple(struct xdp_md * ctx):
; return XDP_PASS;
   0: (b7) r0 = 2
   1: (95) exit

All done and working.