sdplane Releases
Last updated: 2026-10-10
Download
Debian packages for Ubuntu 24.04. Both libsdplane and sdplane are required.
- Configuration file (minimal switch configuration) [sdplane-switch.conf]
- Configuration file (router configuration example) [sdplane-router.conf]
Development Projects
- kait-cronos/sdplane-oss : open-source source code on GitHub
- kait-cronos : development project homepage
Prerequisites
- CPU: x86-64-v2 or later (amd64)
- OS: Ubuntu 24.04 LTS
- NIC: A DPDK-capable NIC. Most NICs are supported, including Intel and NVIDIA (Mellanox) NICs. For other NICs, check the DPDK supported NICs list. sdplane takes over the NICs specified in the configuration, so do not specify the Linux interface used for management.
- Memory: 16GB or more
Installation and Setup
-
Download the libsdplane and sdplane debs and install them. sdplane.service is enabled automatically.
wget https://www.yasuhironet.net/dist/ubuntu24.04/libsdplane_0.3.37-121~ubuntu24.04_amd64.deb https://www.yasuhironet.net/dist/ubuntu24.04/sdplane_0.1.3-943~ubuntu24.04_amd64.debsudo apt install ./libsdplane_*_amd64.deb ./sdplane_*_amd64.debThe DPDK 23.11 libraries (librte-*), liburcu and libpcap are installed automatically as dependencies, along with the recommended dpdk package (NIC drivers and tools such as dpdk-devbind.py).
-
Configure hugepages. Add the following to
/etc/default/gruband update grub.GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=8"sudo update-grub -
Load the vfio-pci driver at boot.
sudo cp /etc/sdplane/vfio-pci.conf /etc/modules-load.d/Note: If vfio-pci does not work, try uio_pci_generic. Run the following commands after step 4. vfio-pci uses the IOMMU, so it does not work where the IOMMU is unavailable, for example when VT-d / AMD-Vi is disabled in the BIOS.
sudo cp /etc/sdplane/uio_pci_generic.conf /etc/modules-load.d/sudo sed -i 's/vfio-pci/uio_pci_generic/' /etc/sdplane/sdplane.conf -
Download
sdplane-switch.conf, the minimal configuration for a switch, and place it as/etc/sdplane/sdplane.conf. Then edit the PCI addresses in theset devicelines to match your system. Uselspcito find the PCI addresses.wget https://www.yasuhironet.net/dist/sdplane-switch.confsudo mv sdplane-switch.conf /etc/sdplane/sdplane.conflspcisudo vi /etc/sdplane/sdplane.conf⚠️ If you specify the PCI address of an NVMe SSD by mistake, the system will fail to boot. Double-check the PCI addresses.
-
Reboot, and sdplane starts. Connect to the CLI with telnet.
sudo reboottelnet localhost 9882⚠️ The CLI has no authentication. Allow connections to 9882/tcp only from localhost.
Starting, Stopping and Disabling
sdplane runs as a systemd service (sdplane.service).
sudo systemctl start sdplane- Starts sdplane.
sudo systemctl stop sdplane- Stops sdplane.
sudo systemctl restart sdplane- Restarts sdplane. Use this after changing the configuration file.
systemctl status sdplane- Shows the status of sdplane.
sudo systemctl enable sdplane- Starts sdplane automatically at boot. This is enabled at installation.
sudo systemctl disable sdplane- Stops sdplane from starting automatically at boot.
Minimal Switch Configuration
sdplane-switch.conf is a minimal configuration that runs sdplane as a 4-port switch.
Note: The router worker thread supports both L2 switching and L3 forwarding, so the switch configuration below is an example of building a switch with the router worker.
The four NICs at PCI addresses 01:00.0, 01:00.1, 02:00.0 and 03:00.0 are connected to vswitch 10, which operates as a 4-port switch.
vswitch 10 also has two tap interfaces, port-1-00-0 and capture-1-00-0. From Linux, you can obtain an address with DHCP on port-1-00-0 and provide ssh, and run tcpdump on capture-1-00-0 to monitor packets.
Common Commands
Run these after connecting to the CLI with telnet.
telnet localhost 9882
show port- Lists each port's device (PCI address), link status, speed, driver and uptime.
show port statistics pps- Shows received and transmitted packets per second and error counts for each port.
show thread- Shows the lcore, type (lthread / dpdk), function and loops per second of each thread.
show vswitch- Shows each vswitch's VLAN, attached ports, and the router-if and capture-if tap interfaces.
Router Configuration
sdplane-router.conf is an example configuration that runs sdplane as a 2-port router.
Port 0 (01:00.0) is connected to vswitch 10, and port 3 (03:00.0) to vswitch 20. Ports 1 (01:00.1) and 2 (02:00.0) are also bound to sdplane but are not connected to any vswitch.
Each vswitch has a router-if and a capture-if, so Linux sees two router-ifs, port-1-00-0 and port-3-00-0. Configure addresses and routes on Linux with iproute2 or FRR so that it routes between these two interfaces. sdplane reads the Linux routing configuration and offloads packet forwarding, forwarding packets cut-through without going through Linux.
To use this configuration, place sdplane-router.conf instead of sdplane-switch.conf in step 4.
wget https://www.yasuhironet.net/dist/sdplane-router.conf
sudo mv sdplane-router.conf /etc/sdplane/sdplane.conf
sudo vi /etc/sdplane/sdplane.conf
An example with iproute2. Change the addresses to match your network.
sudo ip addr add 192.168.10.1/24 dev port-1-00-0
sudo ip addr add 192.168.20.1/24 dev port-3-00-0
Checking the Router Configuration
Check the routes configured on Linux on Linux itself.
ip route- Shows the Linux routing table. Check that routes to the router-ifs (port-1-00-0, port-3-00-0) are present.
Use the sdplane CLI to check that sdplane has picked up the Linux configuration.
show rib router-if- Shows the tap name, MAC address and IPv4 / IPv6 addresses of each router-if.
show rib ipv4 route- Shows the IPv4 routes sdplane has learned from Linux (destination, next hop, interface).
show fib ipv4 route- Shows the IPv4 routing table the router worker actually uses for forwarding.
show neighbor ipv4- Shows the ARP table (MAC addresses of next hops).
Documentation
English | 日本語 | Français | 中文 | Deutsch | Italiano | 한국어 | ไทย | Español
Contact
sdplane [at] nwlab.org