summaryrefslogtreecommitdiffstats
path: root/nixos/tests/corerad.nix
diff options
context:
space:
mode:
authorMatt Layher <mdlayher@gmail.com>2020-01-07 11:52:32 -0500
committerJon <jonringer@users.noreply.github.com>2020-01-16 12:38:36 -0800
commit5089214a3dfaf8dc5b0ec3875ce676a231c30f29 (patch)
tree676a21074a74c77610dfd6a635ae903a6df83f98 /nixos/tests/corerad.nix
parent046730ebdb664bcba35e78e697585e9763f35c6c (diff)
nixos/corerad: init
Diffstat (limited to 'nixos/tests/corerad.nix')
-rw-r--r--nixos/tests/corerad.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/nixos/tests/corerad.nix b/nixos/tests/corerad.nix
new file mode 100644
index 000000000000..68b698857b4e
--- /dev/null
+++ b/nixos/tests/corerad.nix
@@ -0,0 +1,71 @@
+import ./make-test-python.nix (
+ {
+ nodes = {
+ router = {config, pkgs, ...}: {
+ config = {
+ # This machines simulates a router with IPv6 forwarding and a static IPv6 address.
+ boot.kernel.sysctl = {
+ "net.ipv6.conf.all.forwarding" = true;
+ };
+ networking.interfaces.eth1 = {
+ ipv6.addresses = [ { address = "fd00:dead:beef:dead::1"; prefixLength = 64; } ];
+ };
+ services.corerad = {
+ enable = true;
+ # Serve router advertisements to the client machine with prefix information matching
+ # any IPv6 /64 prefixes configured on this interface.
+ configFile = pkgs.writeText "corerad.toml" ''
+ [[interfaces]]
+ name = "eth1"
+ send_advertisements = true
+ [[interfaces.plugins]]
+ name = "prefix"
+ prefix = "::/64"
+ '';
+ };
+ };
+ };
+ client = {config, pkgs, ...}: {
+ # Use IPv6 SLAAC from router advertisements, and install rdisc6 so we can
+ # trigger one immediately.
+ config = {
+ boot.kernel.sysctl = {
+ "net.ipv6.conf.all.autoconf" = true;
+ };
+ environment.systemPackages = with pkgs; [
+ ndisc6
+ ];
+ };
+ };
+ };
+
+ testScript = ''
+ start_all()
+
+ with subtest("Wait for CoreRAD and network ready"):
+ # Ensure networking is online and CoreRAD is ready.
+ router.wait_for_unit("network-online.target")
+ client.wait_for_unit("network-online.target")
+ router.wait_for_unit("corerad.service")
+
+ # Ensure the client can reach the router.
+ client.wait_until_succeeds("ping -c 1 fd00:dead:beef:dead::1")
+
+ with subtest("Verify SLAAC on client"):
+ # Trigger a router solicitation and verify a SLAAC address is assigned from
+ # the prefix configured on the router.
+ client.wait_until_succeeds("rdisc6 -1 -r 10 eth1")
+ client.wait_until_succeeds(
+ "ip -6 addr show dev eth1 | grep -q 'fd00:dead:beef:dead:'"
+ )
+
+ addrs = client.succeed("ip -6 addr show dev eth1")
+
+ assert (
+ "fd00:dead:beef:dead:" in addrs
+ ), "SLAAC prefix was not found in client addresses after router advertisement"
+ assert (
+ "/64 scope global temporary" in addrs
+ ), "SLAAC temporary address was not configured on client after router advertisement"
+ '';
+ })