holo
Holo is a suite of routing protocols designed to address the needs of modern networks
Try the service in a VM
-
Install Nix
- Arch Linux
-
- Bash
-
$ pacman --sync --refresh --noconfirm curl git jq nix
- Debian
-
- Bash
-
$ apt install --yes curl git jq nix
- Ubuntu
-
- Bash
-
$ apt install --yes curl git jq nix
-
Download a configuration file
# default.nix { ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { }, }: ngipkgs.demo-vm ( { ... }: { programs.holo.enable = true; services.holo-daemon.enable = true; } )
-
Enable binary substituters
- Bash
-
$ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/ trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
-
Build and run a virtual machine
- Arch Linux, Debian Sid/Trixie and Ubuntu 25.04
-
- Bash
-
$ nix-build ./default.nix && ./result
- Ubuntu 24.04/24.10
-
- Bash
-
$ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
$ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"
- Usage Instructions A demo VM for testing Holo. First, we need to execute `holo-cli` with previliges because it changes the IP table and the network configuration: $ sudo holo-cli This will start a holo shell, inside which you need to run the following to set up an ospf protocol: - configure - routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main - ospf preference inter-area 50 - show changes - commit - end - exit Finally, you can print and verify the routing configuration: $ holo-cli -c 'show running format json'
Options
programs.holo
-
Whether to enable holo.
- Type:
boolean
- Default:
false
-
The holo-cli package to use.
- Type:
package
- Default:
pkgs.holo-cli
programs.holo.enable
programs.holo.package
services.holo-daemon
-
Whether to enable Holo daemon.
- Type:
boolean
- Default:
false
-
The holo-daemon package to use.
- Type:
package
- Default:
pkgs.holo-daemon
-
Configuration for the holo daemon
- Type:
TOML value
- Default:
{ }
-
Path to the holo database
- Type:
string
- Default:
"/var/run/holod/holod.db"
-
Group for the holo daemon
- Type:
string
- Default:
"holo"
-
Logging configuration for the holo daemon
- Type:
TOML value
- Default:
{ }
-
File logging configuration
- Type:
submodule
- Default:
{ }
-
Directory for log files
- Type:
string
- Default:
"/var/log/"
-
Enable or disable file logging
- Type:
boolean
- Default:
true
-
Name of the log file
- Type:
string
- Default:
"holod.log"
-
Journald logging configuration
- Type:
submodule
- Default:
{ }
-
Enable or disable journald logging
- Type:
boolean
- Default:
true
-
Plugin configuration for the holo daemon
- Type:
TOML value
- Default:
{ }
-
gRPC plugin configuration
- Type:
submodule
- Default:
{ }
-
gRPC server listening address
- Type:
string
- Default:
"[::]:50051"
-
Enable or disable gRPC plugin
- Type:
boolean
- Default:
true
-
User for the holo daemon
- Type:
string
- Default:
"holo"
services.holo-daemon.enable
services.holo-daemon.package
services.holo-daemon.settings
services.holo-daemon.settings.database_path
services.holo-daemon.settings.group
services.holo-daemon.settings.logging
services.holo-daemon.settings.logging.file
services.holo-daemon.settings.logging.file.dir
services.holo-daemon.settings.logging.file.enabled
services.holo-daemon.settings.logging.file.name
services.holo-daemon.settings.logging.journald
services.holo-daemon.settings.logging.journald.enabled
services.holo-daemon.settings.plugins
services.holo-daemon.settings.plugins.grpc
services.holo-daemon.settings.plugins.grpc.address
services.holo-daemon.settings.plugins.grpc.enabled
services.holo-daemon.settings.user
Examples
Enable the holo daemon service
{ ... }: { programs.holo.enable = true; services.holo-daemon.enable = true; }
Enable the holo program
{ ... }: { programs.holo.enable = true; }
This project is funded by NLnet through these subgrants: