Skip to content

Instantly share code, notes, and snippets.

@byates
Created June 16, 2025 13:50
Show Gist options
  • Save byates/820bbdd06f443b07f0b97759a2b60dd6 to your computer and use it in GitHub Desktop.
Save byates/820bbdd06f443b07f0b97759a2b60dd6 to your computer and use it in GitHub Desktop.
Helper to setup network interface for VPP/DPDK
#!/bin/bash
set -e
if [ $# -ne 1 ]; then
echo "Usage: $0 <interface-name>"
exit 1
fi
INTERFACE="$1"
# Detect virtualization environment
VIRT_ENV=$(systemd-detect-virt)
echo "Detected virtualization environment: $VIRT_ENV"
load_vfio() {
echo "Loading VFIO drivers..."
sudo modprobe vfio
sudo sh -c "echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode"
sudo modprobe vfio-pci
sudo ./dpdk-bind-and-record.py -d vfio-pci -i "$INTERFACE" -b
}
load_uio() {
echo "Loading UIO drivers..."
sudo modprobe uio
DPDK_KMODS_DIR=~/dpdk-kmods
if [ ! -d "$DPDK_KMODS_DIR" ]; then
echo "dpdk-kmods directory not found. Cloning..."
git clone git://dpdk.org/dpdk-kmods "$DPDK_KMODS_DIR"
if [ $? -ne 0 ]; then
echo "Error: Failed to clone dpdk-kmods repository." >&2
exit 1
fi
fi
make -C "$DPDK_KMODS_DIR/linux/igb_uio"
if [ $? -ne 0 ]; then
echo "Error: Failed to build igb_uio driver." >&2
exit 1
fi
sudo insmod "$DPDK_KMODS_DIR/linux/igb_uio/igb_uio.ko" wc_activate=1
sudo ./dpdk-bind-and-record.py -d igb_uio -i "$INTERFACE" -b
}
case "$VIRT_ENV" in
qemu)
load_vfio
;;
amazon)
load_uio
;;
microsoft)
echo "Microsoft virtualization detected. No driver loaded."
;;
*)
echo "Unrecognized or bare-metal environment. Defaulting to VFIO."
load_vfio
;;
esac
# Common setup for all environments
VETH_HOST="vpp1host"
VETH_PEER="vpp1out"
if ip link show "${VETH_HOST}" > /dev/null 2>&1; then
echo "Interface $VETH_HOST exists."
else
echo "Creating veth pair $VETH_HOST <-> $VETH_PEER..."
sudo ip link add name "${VETH_PEER}" type veth peer name $VETH_HOST
sudo ip link set dev $VETH_PEER up
sudo ip link set dev $VETH_HOST up
sudo ip addr add 172.16.1.4/24 dev $VETH_HOST
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment