at 23.11-pre 4.2 kB view raw
1 2import ./make-test-python.nix ({ pkgs, lib, ...} : { 3 name = "babeld"; 4 meta = with pkgs.lib.maintainers; { 5 maintainers = [ hexa ]; 6 }; 7 8 nodes = 9 { client = { pkgs, lib, ... }: 10 { 11 virtualisation.vlans = [ 10 ]; 12 13 networking = { 14 useDHCP = false; 15 interfaces."eth1" = { 16 ipv4.addresses = lib.mkForce [ { address = "192.168.10.2"; prefixLength = 24; } ]; 17 ipv4.routes = lib.mkForce [ { address = "0.0.0.0"; prefixLength = 0; via = "192.168.10.1"; } ]; 18 ipv6.addresses = lib.mkForce [ { address = "2001:db8:10::2"; prefixLength = 64; } ]; 19 ipv6.routes = lib.mkForce [ { address = "::"; prefixLength = 0; via = "2001:db8:10::1"; } ]; 20 }; 21 }; 22 }; 23 24 local_router = { pkgs, lib, ... }: 25 { 26 virtualisation.vlans = [ 10 20 ]; 27 28 networking = { 29 useDHCP = false; 30 firewall.enable = false; 31 32 interfaces."eth1" = { 33 ipv4.addresses = lib.mkForce [ { address = "192.168.10.1"; prefixLength = 24; } ]; 34 ipv6.addresses = lib.mkForce [ { address = "2001:db8:10::1"; prefixLength = 64; } ]; 35 }; 36 37 interfaces."eth2" = { 38 ipv4.addresses = lib.mkForce [ { address = "192.168.20.1"; prefixLength = 24; } ]; 39 ipv6.addresses = lib.mkForce [ { address = "2001:db8:20::1"; prefixLength = 64; } ]; 40 }; 41 }; 42 43 services.babeld = { 44 enable = true; 45 interfaces.eth2 = { 46 hello-interval = 1; 47 type = "wired"; 48 }; 49 extraConfig = '' 50 local-port-readwrite 33123 51 52 import-table 254 # main 53 export-table 254 # main 54 55 in ip 192.168.10.0/24 deny 56 in ip 192.168.20.0/24 deny 57 in ip 2001:db8:10::/64 deny 58 in ip 2001:db8:20::/64 deny 59 60 in ip 192.168.30.0/24 allow 61 in ip 2001:db8:30::/64 allow 62 63 in deny 64 65 redistribute local proto 2 66 redistribute local deny 67 ''; 68 }; 69 }; 70 remote_router = { pkgs, lib, ... }: 71 { 72 virtualisation.vlans = [ 20 30 ]; 73 74 networking = { 75 useDHCP = false; 76 firewall.enable = false; 77 78 interfaces."eth1" = { 79 ipv4.addresses = lib.mkForce [ { address = "192.168.20.2"; prefixLength = 24; } ]; 80 ipv6.addresses = lib.mkForce [ { address = "2001:db8:20::2"; prefixLength = 64; } ]; 81 }; 82 83 interfaces."eth2" = { 84 ipv4.addresses = lib.mkForce [ { address = "192.168.30.1"; prefixLength = 24; } ]; 85 ipv6.addresses = lib.mkForce [ { address = "2001:db8:30::1"; prefixLength = 64; } ]; 86 }; 87 }; 88 89 services.babeld = { 90 enable = true; 91 interfaces.eth1 = { 92 hello-interval = 1; 93 type = "wired"; 94 }; 95 extraConfig = '' 96 local-port-readwrite 33123 97 98 import-table 254 # main 99 export-table 254 # main 100 101 in ip 192.168.20.0/24 deny 102 in ip 192.168.30.0/24 deny 103 in ip 2001:db8:20::/64 deny 104 in ip 2001:db8:30::/64 deny 105 106 in ip 192.168.10.0/24 allow 107 in ip 2001:db8:10::/64 allow 108 109 in deny 110 111 redistribute local proto 2 112 redistribute local deny 113 ''; 114 }; 115 116 }; 117 }; 118 119 testScript = 120 '' 121 start_all() 122 123 client.wait_for_unit("network-online.target") 124 local_router.wait_for_unit("network-online.target") 125 remote_router.wait_for_unit("network-online.target") 126 127 local_router.wait_for_unit("babeld.service") 128 remote_router.wait_for_unit("babeld.service") 129 130 local_router.wait_until_succeeds("ip route get 192.168.30.1") 131 local_router.wait_until_succeeds("ip route get 2001:db8:30::1") 132 133 remote_router.wait_until_succeeds("ip route get 192.168.10.1") 134 remote_router.wait_until_succeeds("ip route get 2001:db8:10::1") 135 136 client.succeed("ping -c1 192.168.30.1") 137 client.succeed("ping -c1 2001:db8:30::1") 138 139 remote_router.succeed("ping -c1 192.168.10.2") 140 remote_router.succeed("ping -c1 2001:db8:10::2") 141 ''; 142})