anchor.diff:        };
         testScript = { ... }:
           ''
  -          startAll;
  -
  -          # Wait for networking to come up
  -          $client->waitForUnit("network.target");
  -          $router->waitForUnit("network.target");
  -
  -          # Wait until we have an ip address on each interface
  -          $client->waitUntilSucceeds("ip addr show dev eth1 | grep -q '192.168.1'");
  -          $client->waitUntilSucceeds("ip addr show dev macvlan | grep -q '192.168.1'");
  -
  -          # Print lots of diagnostic information
  -          $router->log('**********************************************');
  -          $router->succeed("ip addr >&2");
  -          $router->succeed("ip route >&2");
  -          $router->execute("iptables-save >&2");
  -          $client->log('==============================================');
  -          $client->succeed("ip addr >&2");
  -          $client->succeed("ip route >&2");
  -          $client->execute("iptables-save >&2");
  -          $client->log('##############################################');
  -
  -          # Test macvlan creates routable ips
  -          $client->waitUntilSucceeds("ping -c 1 192.168.1.1");
  -          $client->waitUntilSucceeds("ping -c 1 192.168.1.2");
  -          $client->waitUntilSucceeds("ping -c 1 192.168.1.3");
  -
  -          $router->waitUntilSucceeds("ping -c 1 192.168.1.1");
  -          $router->waitUntilSucceeds("ping -c 1 192.168.1.2");
  -          $router->waitUntilSucceeds("ping -c 1 192.168.1.3");
  +          start_all()
  +
  +          with subtest("Wait for networking to come up"):
  +              client.wait_for_unit("network.target")
  +              router.wait_for_unit("network.target")
  +
  +          with subtest("Wait until we have an ip address on each interface"):
  +              client.wait_until_succeeds("ip addr show dev eth1 | grep -q '192.168.1'")
  +              client.wait_until_succeeds("ip addr show dev macvlan | grep -q '192.168.1'")
  +
  +          with subtest("Print lots of diagnostic information"):
  +              router.log("**********************************************")
  +              router.succeed("ip addr >&2")
  +              router.succeed("ip route >&2")
  +              router.execute("iptables-save >&2")
  +              client.log("==============================================")
  +              client.succeed("ip addr >&2")
  +              client.succeed("ip route >&2")
  +              client.execute("iptables-save >&2")
  +              client.log("##############################################")
  +
  +          with subtest("Test macvlan creates routable ips"):
  +              client.wait_until_succeeds("ping -c 1 192.168.1.1")
  +              client.wait_until_succeeds("ping -c 1 192.168.1.2")
  +              client.wait_until_succeeds("ping -c 1 192.168.1.3")
  +
  +              router.wait_until_succeeds("ping -c 1 192.168.1.1")
  +              router.wait_until_succeeds("ping -c 1 192.168.1.2")
  +              router.wait_until_succeeds("ping -c 1 192.168.1.3")
           '';
       };
       sit = let
  
positive.code:       nodes.client2 = node { address4 = "192.168.1.2"; remote = "192.168.1.1"; address6 = "fc00::2"; };
        testScript = { ... }:
          ''
            startAll;
  
            # Wait for networking to be configured
            $client1->waitForUnit("network.target");
            $client2->waitForUnit("network.target");
  
            # Print diagnostic information
            $client1->succeed("ip addr >&2");
            $client2->succeed("ip addr >&2");
  
            # Test ipv6
            $client1->waitUntilSucceeds("ping -c 1 fc00::1");
            $client1->waitUntilSucceeds("ping -c 1 fc00::2");
  
            $client2->waitUntilSucceeds("ping -c 1 fc00::1");
            $client2->waitUntilSucceeds("ping -c 1 fc00::2");
          '';
      };
      vlan = let
  
negative.code:       };
  
        testScript = ''
          targetList = """
          tap0: tap persist user 0
          tun0: tun persist user 0
          """.strip()
  
          with subtest("Wait for networking to come up"):
              machine.start()
              machine.wait_for_unit("network-online.target")
  
          with subtest("Test interfaces set up"):
              list = machine.succeed("ip tuntap list | sort").strip()
              assert (
                  list == targetList
              ), """
              The list of virtual interfaces does not match the expected one:
              Result:
                {}
              Expected:
                {}
              """.format(
                  list, targetList
              )
  
          with subtest("Test interfaces clean up"):
              machine.succeed("systemctl stop network-addresses-tap0")
              machine.sleep(10)
              machine.succeed("systemctl stop network-addresses-tun0")
              machine.sleep(10)
              residue = machine.succeed("ip tuntap list")
              assert (
                  residue is ""
              ), "Some virtual interface has not been properly cleaned:\n{}".format(residue)
        '';
      };
      privacy = {
  