Hello there,
I’m tying to deploy an Incus cluster with high availability using OVN networks
on NixOS. I’m following the official guide
( How to set up OVN with Incus - Incus documentation ) along
with some other blog posts
( Incus: Switching to an OVN Network and
Incus OVN networking setup, and when it's overkill - Big Iron ).
When I try to create the OVN network using the Incus network create CLI, I’m
getting bridge not found for localnet port 'incus-net50-ls-ext-lsp-provider' with network name 'ovn-uplink'; skipping on OVN controller logs and Error: No chassis found when running incus network info ovn.
All the NixOS code is available here
#754 - WIP: feat(hypervisor1x): init full cluster with LINSTOR and INCUS - DGNum/infrastructure - Forge git de la DGNum .
OVN setup
Since I’m running NixOS and that the OVN services does not exist on NixOS, I
packaged them (you can look at the repo above). As NixOS does not follow the FHS
scheme and for the sake of simplicity, I decided not to use the ovn-ctl script
to run the SystemD services but I instead analyzed the script to write a correct
SystemD service. I also ran the following command (as root) on each server:
ovs-vsctl set open_vswitch . external_ids:ovn-remote=tcp:10.0.254.71:6644,tcp:10.0.254.72:6644,tcp:10.0.254.73:6644 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=<local ip> external_ids:system-id="$(cat /etc/hostname)"
I’m pasting pasting the services of one of my server (it’s not exactly the same
on other servers: there is IPs change and the ExecPreStart of OVSDB changes to
join the cluster instead of creating one).
However, OVS services are the same as Ubuntu ones
( nixpkgs/nixos/modules/virtualisation/openvswitch.nix at nixos-26.05 · NixOS/nixpkgs · GitHub ).
ovn-controller.service
[Unit]
After=network.target ovs-vswitchd.service ovsdb-server.service
Description=Open Virtual Network host control daemon
[Service]
Environment="LOCALE_ARCHIVE=/nix/store/qfxqcsrsl9mmgq319a218c0xijz3d0qx-glibc-locales-2.42-84/lib/locale/locale-archive"
Environment="PATH=/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/bin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/bin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/bin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/bin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/bin:/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/sbin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/sbin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/sbin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/sbin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/sbin"
Environment="TZDIR=/nix/store/xl5gj173j6x670xn9xhldj7giiygclrm-tzdata-2026c/share/zoneinfo"
BindPaths=/run/openvswitch:/usr/local/var/run/openvswitch/
ExecStart="/nix/store/vmwmhzz4vq953z5vs9d8qav2ykfq900l-ovn-26.03.1/bin/ovn-controller" "--pidfile=/run/ovn/controller/ovn-controller.pid" "--unixctl=/run/ovn/controller/ovn-controller.ctl" "-n" "hypervisor11" "unix:/run/openvswitch/db.sock"
LogsDirectory=ovn
RuntimeDirectory=ovn/controller
StateDirectory=ovn
Type=simple
[Install]
WantedBy=multi-user.target
ovn-ovsdb-sb.service
[Unit]
After=network.target
Description=Open vSwitch database server for OVN Southbound database
[Service]
Environment="LOCALE_ARCHIVE=/nix/store/qfxqcsrsl9mmgq319a218c0xijz3d0qx-glibc-locales-2.42-84/lib/locale/locale-archive"
Environment="PATH=/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/bin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/bin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/bin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/bin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/bin:/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/sbin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/sbin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/sbin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/sbin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/sbin"
Environment="TZDIR=/nix/store/xl5gj173j6x670xn9xhldj7giiygclrm-tzdata-2026c/share/zoneinfo"
ExecStart="/nix/store/jhnzd2a8hrnicmms7022r607v5nkxm67-openvswitch-3.7.1/bin/ovsdb-server" "--pidfile=/run/ovn/ovsdb-sb/ovsdb-sb.pid" "--unixctl=/run/ovn/ovsdb-sb/ovsdb-sb.ctl" "--remote=ptcp:6644:10.0.254.71" "--remote=db:OVN_Southbound,SB_Global,connections" "/var/lib/ovn/ovnsb.db"
ExecStartPre=/nix/store/2rx3p5pidivfqspkqkl1xa3c4s35y8dp-unit-script-ovn-ovsdb-sb-pre-start/bin/ovn-ovsdb-sb-pre-start
LogsDirectory=ovn
RuntimeDirectory=ovn/ovsdb-sb
StateDirectory=ovn
Type=simple
[Install]
WantedBy=multi-user.target
ovn-ovsdb-nb.service
[Unit]
After=network.target
Description=Open vSwitch database server for OVN Northbound database
[Service]
Environment="LOCALE_ARCHIVE=/nix/store/qfxqcsrsl9mmgq319a218c0xijz3d0qx-glibc-locales-2.42-84/lib/locale/locale-archive"
Environment="PATH=/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/bin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/bin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/bin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/bin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/bin:/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/sbin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/sbin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/sbin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/sbin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/sbin"
Environment="TZDIR=/nix/store/xl5gj173j6x670xn9xhldj7giiygclrm-tzdata-2026c/share/zoneinfo"
ExecStart="/nix/store/jhnzd2a8hrnicmms7022r607v5nkxm67-openvswitch-3.7.1/bin/ovsdb-server" "--pidfile=/run/ovn/ovsdb-nb/ovsdb-nb.pid" "--unixctl=/run/ovn/ovsdb-nb/ovsdb-nb.ctl" "--remote=ptcp:6643:10.0.254.71" "--remote=db:OVN_Northbound,NB_Global,connections" "/var/lib/ovn/ovnnb.db"
ExecStartPre=/nix/store/1jg7l266x26mf0yw7vf4mm2hgm3ss2gz-unit-script-ovn-ovsdb-nb-pre-start/bin/ovn-ovsdb-nb-pre-start
LogsDirectory=ovn
RuntimeDirectory=ovn/ovsdb-nb
StateDirectory=ovn
Type=simple
[Install]
WantedBy=multi-user.target
ovn-northd.service
[Unit]
After=network.target ovn-ovsdb-nb.service ovn-ovsdb-sb.service
Description=Open Virtual Network central control daemon
[Service]
Environment="LOCALE_ARCHIVE=/nix/store/qfxqcsrsl9mmgq319a218c0xijz3d0qx-glibc-locales-2.42-84/lib/locale/locale-archive"
Environment="PATH=/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/bin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/bin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/bin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/bin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/bin:/nix/store/833invqvsk7anqnqrki5hqncrcllj825-coreutils-9.11/sbin:/nix/store/g6d53gb3cw6x1imfbw5v4088lkdkkc6i-findutils-4.10.0/sbin:/nix/store/2d2jxw071wai1hh6dj0shlgqmlz8zmy1-gnugrep-3.12/sbin:/nix/store/sazlbkll5x2dw1kkx0l2a8b74w6rgdxm-gnused-4.10/sbin:/nix/store/b4b1x5fhxpc78qlclj3kdbl9dd49g917-systemd-260.4/sbin"
Environment="TZDIR=/nix/store/xl5gj173j6x670xn9xhldj7giiygclrm-tzdata-2026c/share/zoneinfo"
ExecStart="/nix/store/vmwmhzz4vq953z5vs9d8qav2ykfq900l-ovn-26.03.1/bin/ovn-northd" "--pidfile=/run/ovn/northd/ovn-northd.pid" "--unixctl=/run/ovn/northd/ovn-northd.ctl" "--ovnnb-db=tcp:10.0.254.71:6643,tcp:10.0.254.72:6643,tcp:10.0.254.73:6643" "--ovnsb-db=tcp:10.0.254.71:6644,tcp:10.0.254.72:6644,tcp:10.0.254.73:6644"
LogsDirectory=ovn
RuntimeDirectory=ovn/northd
StateDirectory=ovn
Type=simple
[Install]
WantedBy=multi-user.target
Incus Setup
The Incus cluster setup is standard (using incus admin init and incus cluster add commands). The northbound connection is being configured with incus config set network.ovn.northbound_connection=tcp:10.0.254.71:6643,tcp:10.0.254.72:6643,tcp:10.0.254.73:6643.
I have, on each server, a VLAN device vlan-ovn attached a bridge. I created a
physical network on incus:
incus network create ovn-uplink --type physical parent=vlan-ovn --target=hypervisor11
incus network create ovn-uplink --type physical parent=vlan-ovn --target=hypervisor12
incus network create ovn-uplink --type physical parent=vlan-ovn --target=hypervisor13
incus network create ovn-uplink --type physical ipv4.gateway=10.0.254.1/24
ipv4.ovn.ranges=10.0.254.71-10.0.254.73 dns.nameservers=1.1.1.1
Then I created the OVN network using incus network create ovn --type ovn network=ovn-uplink. But I’m getting an Error: No chassis found while running
incus network info ovn.
OVN logs and debugs
On each server, the ovn-controller server logs:
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: 2026-09-21T17:33:43Z|00038|ovn_bfd|INFO|Enabled BFD on interface ovn-hyperv-1
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: 2026-09-21T17:33:43Z|00039|ovn_bfd|INFO|Enabled BFD on interface ovn-hyperv-0
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: ovs|00038|ovn_bfd|INFO|Enabled BFD on interface ovn-hyperv-1
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: ovs|00039|ovn_bfd|INFO|Enabled BFD on interface ovn-hyperv-0
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: 2026-09-21T17:33:43Z|00040|patch|INFO|bridge not found for localnet port 'incus-net50-ls-ext-lsp-provider' with network name 'ovn-uplink'; skipping
Sep 21 19:33:43 hypervisor11 ovn-controller[531292]: ovs|00040|patch|INFO|bridge not found for localnet port 'incus-net50-ls-ext-lsp-provider' with network name 'ovn-uplink'; skipping
I also give more details on OVN with control commands. ovn-nbctl, ovn-sbctl and
ovs-vsctl return:
$ ovn-nbctl --db=tcp:10.0.254.71:6643,tcp:10.0.254.72:6643,tcp:10.0.254.73:6643 show
switch f5d96311-e021-48e6-9d7e-d0575e4fcc1f (incus-net50-ls-ext)
port incus-net50-ls-ext-lsp-router
type: router
router-port: incus-net50-lr-lrp-ext
port incus-net50-ls-ext-lsp-provider
type: localnet
addresses: ["unknown"]
switch 56b01455-b741-4cf1-adfc-6c93c397ecde (incus-net50-ls-int)
port incus-net50-ls-int-lsp-router
type: router
router-port: incus-net50-lr-lrp-int
router 113c4bf0-c1d8-4326-a432-01cdfe08164a (incus-net50-lr)
port incus-net50-lr-lrp-ext
mac: "10:66:6a:f1:a4:b1"
ipv6-lla: "fe80::1266:6aff:fef1:a4b1"
networks: ["10.0.254.171/24"]
port incus-net50-lr-lrp-int
mac: "10:66:6a:f1:a4:b1"
ipv6-lla: "fe80::1266:6aff:fef1:a4b1"
networks: ["10.129.7.1/24", "fd42:27fc:181d:3b90::1/64"]
nat a2bd9a2a-2006-4b5c-b305-d5c1774de8ac
external ip: "10.0.254.171"
logical ip: "10.129.7.0/24"
type: "snat"
$ ovn-sbctl --db=tcp:10.0.254.71:6644,tcp:10.0.254.72:6644,tcp:10.0.254.73:6644 show
Chassis hypervisor13
hostname: hypervisor13
Encap geneve
ip: "10.0.254.73"
options: {csum="true"}
Chassis hypervisor12
hostname: hypervisor12
Encap geneve
ip: "10.0.254.72"
options: {csum="true"}
Chassis hypervisor11
hostname: hypervisor11
Encap geneve
ip: "10.0.254.71"
options: {csum="true"}
$ ovs-vsctl show
bc8e26d2-c12e-4b31-9636-5e6591589d8d
Bridge incusovn48
Port patch-incus-net50-ls-ext-lsp-provider-to-br-int
Interface patch-incus-net50-ls-ext-lsp-provider-to-br-int
type: patch
options: {peer=patch-br-int-to-incus-net50-ls-ext-lsp-provider}
Port vlan-ovn
Interface vlan-ovn
Port incusovn48
Interface incusovn48
Bridge br-int
fail_mode: secure
datapath_type: system
Port patch-br-int-to-incus-net50-ls-ext-lsp-provider
Interface patch-br-int-to-incus-net50-ls-ext-lsp-provider
type: patch
options: {peer=patch-incus-net50-ls-ext-lsp-provider-to-br-int}
Port ovn-hyperv-0
Interface ovn-hyperv-0
type: geneve
options: {csum="true", key=flow, local_ip="10.0.254.71", remote_ip="10.0.254.73"}
bfd_status: {diagnostic="No Diagnostic", flap_count="0", forwarding="false", remote_diagnostic="No Diagnostic", remote_state=down, state=down}
Port br-int
Interface br-int
type: internal
Port ovn-hyperv-1
Interface ovn-hyperv-1
type: geneve
options: {csum="true", key=flow, local_ip="10.0.254.71", remote_ip="10.0.254.72"}
I tried to look at Incus and OVN code but nothing looked suspicious to me. Does
anyone has any other debugging suggestions?
Thanks!