diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 0216ea9d9bd5..da31c58481b8 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1460,6 +1460,7 @@ in systemd-machinectl = runTest ./systemd-machinectl.nix; systemd-misc = runTest ./systemd-misc.nix; systemd-networkd = runTest ./systemd-networkd.nix; + systemd-networkd-batadv = runTest ./systemd-networkd-batadv.nix; systemd-networkd-bridge = runTest ./systemd-networkd-bridge.nix; systemd-networkd-dhcpserver = runTest ./systemd-networkd-dhcpserver.nix; systemd-networkd-dhcpserver-static-leases = runTest ./systemd-networkd-dhcpserver-static-leases.nix; diff --git a/nixos/tests/systemd-networkd-batadv.nix b/nixos/tests/systemd-networkd-batadv.nix new file mode 100644 index 000000000000..20de645f25c7 --- /dev/null +++ b/nixos/tests/systemd-networkd-batadv.nix @@ -0,0 +1,134 @@ +{ lib, ... }: +{ + name = "systemd-networkd-batadv"; + + meta = with lib.maintainers; { + maintainers = [ herbetom ]; + }; + + nodes = { + machineA = + { config, pkgs, ... }: + { + virtualisation.vlans = [ 1 ]; + systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug"; + + networking = { + useNetworkd = true; + useDHCP = false; + firewall.enable = false; + }; + + # Use default batman_adv module from kernel + boot.extraModulePackages = [ ]; + + environment.systemPackages = [ + pkgs.batctl + pkgs.jq + ]; + + systemd.network = { + networks."10-eth1" = { + matchConfig.Name = "eth1"; + networkConfig = { + BatmanAdvanced = config.systemd.network.netdevs."20-bat0".netdevConfig.Name; + IPv6AcceptRA = false; + }; + }; + netdevs."20-bat0" = { + netdevConfig = { + Name = "bat0"; + Kind = "batadv"; + MACAddress = "00:00:5e:00:53:00"; + }; + batmanAdvancedConfig = { + OriginatorIntervalSec = "5"; + RoutingAlgorithm = "batman-iv"; + }; + }; + networks."20-bat0" = { + matchConfig.Name = config.systemd.network.netdevs."20-bat0".netdevConfig.Name; + networkConfig.IPv6AcceptRA = false; + address = [ + "10.0.0.1/24" + "2001:db8::a/64" + ]; + + }; + }; + }; + machineB = + { config, pkgs, ... }: + { + virtualisation.vlans = [ 1 ]; + systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug"; + + networking = { + useNetworkd = true; + useDHCP = false; + firewall.enable = false; + }; + + # Use batman_adv module from nixpkgs + boot.extraModulePackages = [ config.boot.kernelPackages.batman_adv ]; + + environment.systemPackages = [ + pkgs.batctl + pkgs.jq + ]; + + systemd.network = { + networks."10-eth1" = { + matchConfig.Name = "eth1"; + networkConfig = { + BatmanAdvanced = config.systemd.network.netdevs."20-bat0".netdevConfig.Name; + IPv6AcceptRA = false; + }; + }; + netdevs."20-bat0" = { + netdevConfig = { + Name = "bat0"; + Kind = "batadv"; + MACAddress = "00:00:5e:00:53:10"; + }; + batmanAdvancedConfig = { + OriginatorIntervalSec = "5"; + RoutingAlgorithm = "batman-iv"; + }; + }; + networks."20-bat0" = { + matchConfig.Name = config.systemd.network.netdevs."20-bat0".netdevConfig.Name; + networkConfig.IPv6AcceptRA = false; + address = [ + "10.0.0.2/24" + "2001:db8::b/64" + ]; + + }; + }; + }; + }; + + testScript = '' + start_all() + + machineA.wait_for_unit("default.target") + machineB.wait_for_unit("default.target") + + print(machineA.succeed("batctl -v").strip()) + print(machineB.succeed("batctl -v").strip()) + + machineA.wait_until_succeeds('batctl neighbors_json | jq -e ".[0].neigh_address | select(length > 0)"') + + print(machineA.succeed("batctl n").strip()) + print(machineB.succeed("batctl n").strip()) + + print(machineA.wait_until_succeeds("batctl ping -c 5 00:00:5e:00:53:10").strip()) + print(machineB.wait_until_succeeds("batctl ping -c 5 00:00:5e:00:53:00").strip()) + + print(machineA.wait_until_succeeds("ping -c 5 2001:db8::b")) + print(machineB.wait_until_succeeds("ping -c 5 10.0.0.1")) + + machineA.fail("ping -c 3 10.0.0.99") + ''; +} diff --git a/pkgs/os-specific/linux/batman-adv/default.nix b/pkgs/os-specific/linux/batman-adv/default.nix index 653769aa8a9b..0288be84dd6a 100644 --- a/pkgs/os-specific/linux/batman-adv/default.nix +++ b/pkgs/os-specific/linux/batman-adv/default.nix @@ -4,6 +4,7 @@ fetchurl, kernel, kernelModuleMakeFlags, + nixosTests, }: let @@ -31,6 +32,10 @@ stdenv.mkDerivation rec { -e /depmod/d Makefile ''; + passthru.tests = { + systemd-networkd-batadv = nixosTests.systemd-networkd-batadv; + }; + meta = { homepage = "https://www.open-mesh.org/projects/batman-adv/wiki/Wiki"; description = "B.A.T.M.A.N. routing protocol in a linux kernel module for layer 2";