vuls: init at 0.27.0
[NixPkgs.git] / nixos / tests / babeld.nix
blobe497aa5b64e1519bbc063543ec25f6aa0559fb7f
2 import ./make-test-python.nix ({ pkgs, lib, ...} : {
3   name = "babeld";
4   meta = with pkgs.lib.maintainers; {
5     maintainers = [ hexa ];
6   };
8   nodes =
9     { client = { pkgs, lib, ... }:
10       {
11         virtualisation.vlans = [ 10 ];
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       };
24       local_router = { pkgs, lib, ... }:
25       {
26         virtualisation.vlans = [ 10 20 ];
28         networking = {
29           useDHCP = false;
30           firewall.enable = false;
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           };
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         };
43         services.babeld = {
44           enable = true;
45           interfaces.eth2 = {
46             hello-interval = 1;
47             type = "wired";
48           };
49           extraConfig = ''
50             local-port-readwrite 33123
52             import-table 254 # main
53             export-table 254 # main
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
60             in ip 192.168.30.0/24 allow
61             in ip 2001:db8:30::/64 allow
63             in deny
65             redistribute local proto 2
66             redistribute local deny
67           '';
68         };
69       };
70       remote_router = { pkgs, lib, ... }:
71       {
72         virtualisation.vlans = [ 20 30 ];
74         networking = {
75           useDHCP = false;
76           firewall.enable = false;
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           };
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         };
89         services.babeld = {
90           enable = true;
91           interfaces.eth1 = {
92             hello-interval = 1;
93             type = "wired";
94           };
95           extraConfig = ''
96             local-port-readwrite 33123
98             import-table 254 # main
99             export-table 254 # main
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
106             in ip 192.168.10.0/24 allow
107             in ip 2001:db8:10::/64 allow
109             in deny
111             redistribute local proto 2
112             redistribute local deny
113           '';
114         };
116       };
117     };
119   testScript =
120     ''
121       start_all()
123       local_router.wait_for_unit("babeld.service")
124       remote_router.wait_for_unit("babeld.service")
126       local_router.wait_until_succeeds("ip route get 192.168.30.1")
127       local_router.wait_until_succeeds("ip route get 2001:db8:30::1")
129       remote_router.wait_until_succeeds("ip route get 192.168.10.1")
130       remote_router.wait_until_succeeds("ip route get 2001:db8:10::1")
132       client.succeed("ping -c1 192.168.30.1")
133       client.succeed("ping -c1 2001:db8:30::1")
135       remote_router.succeed("ping -c1 192.168.10.2")
136       remote_router.succeed("ping -c1 2001:db8:10::2")
137     '';