A "DPDK-dock Development Environment" consisting of an interactive shell that can control DPDK thread operations and a DPDK thread execution environment (sd-plane)
Language: English | Japanese | French | Chinese | German | Italian | Korean | Thai | Spanish
- High-Performance Packet Processing: Leverages DPDK for zero-copy, user-space packet processing
- Layer 2/3 Forwarding: Integrated L2 and L3 forwarding with ACL, LPM, and FIB support
- Packet Generation: Built-in packet generator for testing and benchmarking
- Network Virtualization: TAP interface support and VLAN switching capabilities
- CLI Management: Interactive command-line interface for configuration and monitoring
- Multi-threading: Cooperative threading model with per-core workers
- Main Application: Core router logic and initialization
- DPDK Modules: L2/L3 forwarding and packet generation
- CLI System: Command-line interface with completion and help
- Threading: lthread-based cooperative multitasking
- Virtualization: TAP interfaces and virtual switching
- OS: Ubuntu 24.04 LTS (currently supported)
- NICs: Drivers | Supported NICs
- Memory: Hugepage support required
- CPU: Multi-core processor recommended
The project has been tested on:
- Topton (N305/N100): Mini-PC with 10G NICs (tested)
- Partaker (J3160): Mini-PC with 1G NICs (tested)
- Intel Generic PC: With Intel x520 / Mellanox ConnectX5
- Other CPUs: Should work with AMD, ARM processors, etc.
See Install Dependencies Guide for detailed instructions on installing all required dependencies including liburcu-qsbr, libpcap, lthread, and DPDK.
For Intel Core i3-n305/Celeron j3160, quick installation is possible with Debian packages.
Download and install the pre-built Debian package:
# Download the latest package for n305
wget https://www.yasuhironet.net/download/n305/sdplane_0.1.4-36_amd64.deb
wget https://www.yasuhironet.net/download/n305/sdplane-dbgsym_0.1.4-36_amd64.ddeb
# or for j3160
wget https://www.yasuhironet.net/download/j3160/sdplane_0.1.4-35_amd64.deb
wget https://www.yasuhironet.net/download/j3160/sdplane-dbgsym_0.1.4-35_amd64.ddeb
# Install the package
sudo apt install ./sdplane_0.1.4-*_amd64.deb
sudo apt install ./sdplane-dbgsym_0.1.4-*_amd64.ddebNote: Check yasuhironet.net downloads for the latest package version.
Note: Use of this pre-compiled binary on other CPUs may cause SIGILL (Illegal Instruction). In that case you have to compile by yourself.
Jump to 5. System Configuration.
See Build and Install from Source Guide for detailed instructions on building sdplane-oss from source code.
You can jump to 5. System Configuration.
See Build Debian Package Guide for instructions on creating and installing a Debian package from source.
See System Configuration Guide for instructions on configuring hugepages, network interfaces, and optional kernel modules.
When installed from Debian Package, /etc/sdplane/sdplane.conf.sample and systemd service files are automatically generated.
Create /etc/sdplane/sdplane.conf referring to the samples.
etc/sdplane.conf.sample: Main configuration templateetc/sdplane.service: systemd service fileetc/modules-load.d/: Kernel module loading configuration
example-config/sdplane-pktgen.conf: Packet generator configurationexample-config/sdplane-topton.conf: Topton hardware configurationexample-config/sdplane_l2_repeater.conf: L2 repeater configurationexample-config/sdplane_enhanced_repeater.conf: Enhanced repeater configuration with VLAN switching, router interfaces, and capture interfaces
# Run in foreground
sudo sdplane
# Run with config file
sudo sdplane -f /etc/sdplane/sdplane_enhanced_repeater.conf
# When installed via apt, run via systemd
sudo systemctl enable sdplane
sudo systemctl start sdplane
# Connect to CLI
telnet localhost 9882- Intel: Intel VT-d
- AMD: AMD IOMMU / AMD-V
These need to be enabled in BIOS settings. GRUB configuration may also need to be changed:
# /etc/default/grub
GRUB_CMDLINE_LINUX="iommu=pt intel_iommu=on"
sudo update-grub
sudo reboot#/etc/modules-load.d/vfio-pci.conf
vfio-pci
Driver installation is required from the following link:
https://network.nvidia.com/products/ethernet-drivers/linux/mlnx_en/
During installation, run ./install --dpdk.
The option --dpdk is mandatory.
Comment out the following settings in sdplane.conf as they are not needed:
#set device {pcie-id} driver unbound
#set device {pcie-id} driver {driver-name} driver_override
#set device {pcie-id} driver {driver-name} bind
For Mellanox NICs, you need to run the update port status command to refresh port information.
You can use the dpdk-devbind.py command in DPDK to check the PCIe bus numbers of NICs:
> dpdk-devbind.py -s
Network devices using kernel driver
===================================
0000:04:00.0 'NetXtreme BCM5720 Gigabit Ethernet PCIe 165f' numa_node=0 if=eno8303 drv=tg3 unused= *Active*
0000:b1:00.0 'MT27800 Family [ConnectX-5] 1017' numa_node=1 if=enp177s0np0 drv=mlx5_core unused= *Active*If configuring rib-manager, neigh-manager, and netlink-thread workers, they must be configured in this order if they are used.
Only one command that calls rte_eal_init() should be invoked from the configuration file. The rte_eal_init() function is called by commands such as rte_eal_init, pktgen init, l2fwd init, and l3fwd init.
Comprehensive user guides and command references are available:
- User Guide - Complete overview and command classification
Application Guides:
- L2 Repeater Application - Simple Layer 2 packet forwarding with MAC learning
- Enhanced Repeater Application - VLAN-aware switching with TAP interfaces
- Packet Generator Application - High-performance traffic generation and testing
Configuration Guides:
- Port Management & Statistics - DPDK port management and statistics
- Worker & lcore Management & Thread Information - Worker threads, lcore, and thread information management
- Debug & Logging - Debug and logging functions
- VTY & Shell Management - VTY and shell management
- System Information & Monitoring - System information and monitoring
- RIB & Routing - RIB and routing functions
- Queue Configuration - Queue configuration and management
- Packet Generation - Packet generation using PKTGEN
- TAP Interface - TAP interface management
- lthread Management - lthread management
- Device Management - Device and driver management
- Enhanced Repeater - Virtual switching, VLAN processing, and TAP interfaces
- DPDK Application Integration Guide - How to integrate DPDK applications into sdplane using DPDK-dock approach
- Technical Presentation/2024-11-22-sdn-onsen-yasu.pdf (Japanese)
- Technical Presentation/20250822_ENOG87_ohara.pdf (Japanese)
The project follows GNU coding standards. Use the provided scripts to check and format code:
# Check formatting
./style/check_gnu_style.sh check
# Show formatting differences
./style/check_gnu_style.sh diff
# Auto-format code
./style/check_gnu_style.sh updateThis project is licensed under the MIT License. See the LICENSE file for license details.
For questions, issues, or contributions, please contact: sdplane [at] nwlab.org
Evaluation equipment with additional features and software modifications may be available. Please visit our sales page for more information:
https://www.rca.co.jp/sdplane/
Note: The sales page is currently available in Japanese only.