Hull is a single-node SDN controller.
Hull uses a client-daemon architecture:
hull(client): sends JSON commands over a Unix sockethulld(daemon): owns SQLite state, TAP lifecycle, TC eBPF attach, and sync
The daemon must run as root.
Build both binaries:
make build- Start the daemon:
sudo ./target/debug/hulld- Initialize:
./target/debug/hull init- Create a switch:
./target/debug/hull switch create sw0 10.0.0.0 24- Add switch ports (TAPs are managed automatically):
./target/debug/hull switch port create sw0 swp0
./target/debug/hull switch port create sw0 swp1Optional static addressing:
./target/debug/hull switch port create sw0 swp0 --ip 10.0.0.10 --mac 52:54:00:12:34:56Unknown L2 destinations are not flooded; forwarding only uses known MAC/router state.
Hull uses environment variables to locate its data directory:
HULL_PATH— root directory for Hull data (config, database, socket)HULL_SOCKET— override the daemon socket path
Default paths (when HULL_PATH is not set):
- Data:
$XDG_DATA_HOME/hullor/var/lib/hull - Config:
{HULL_PATH}/hull.json
See commands:
./target/debug/hull --helpMIT License. See LICENSE for details.