Merge pull request #89781 from mdlayher/mdl-corerad-settings

This commit is contained in:
Silvan Mosberger 2020-06-14 16:48:54 +02:00 committed by GitHub
commit 00e448172f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 67 additions and 11 deletions

View File

@ -4,14 +4,48 @@ with lib;
let
cfg = config.services.corerad;
writeTOML = name: x:
pkgs.runCommandNoCCLocal name { } ''
echo '${builtins.toJSON x}' | ${pkgs.go-toml}/bin/jsontoml > $out
'';
in {
meta = {
maintainers = with maintainers; [ mdlayher ];
};
meta.maintainers = with maintainers; [ mdlayher ];
options.services.corerad = {
enable = mkEnableOption "CoreRAD IPv6 NDP RA daemon";
settings = mkOption {
type = types.uniq types.attrs;
example = literalExample ''
{
interfaces = [
# eth0 is an upstream interface monitoring for IPv6 router advertisements.
{
name = "eth0";
monitor = true;
}
# eth1 is a downstream interface advertising IPv6 prefixes for SLAAC.
{
name = "eth1";
advertise = true;
prefix = [{ prefix = "::/64"; }];
}
];
# Optionally enable Prometheus metrics.
debug = {
address = "localhost:9430";
prometheus = true;
};
}
'';
description = ''
Configuration for CoreRAD, see <link xlink:href="https://github.com/mdlayher/corerad/blob/master/internal/config/default.toml"/>
for supported values. Ignored if configFile is set.
'';
};
configFile = mkOption {
type = types.path;
example = literalExample "\"\${pkgs.corerad}/etc/corerad/corerad.toml\"";
@ -27,6 +61,9 @@ in {
};
config = mkIf cfg.enable {
# Prefer the config file over settings if both are set.
services.corerad.configFile = mkDefault (writeTOML "corerad.toml" cfg.settings);
systemd.services.corerad = {
description = "CoreRAD IPv6 NDP RA daemon";
after = [ "network.target" ];

View File

@ -3,7 +3,7 @@ import ./make-test-python.nix (
nodes = {
router = {config, pkgs, ...}: {
config = {
# This machines simulates a router with IPv6 forwarding and a static IPv6 address.
# This machine simulates a router with IPv6 forwarding and a static IPv6 address.
boot.kernel.sysctl = {
"net.ipv6.conf.all.forwarding" = true;
};
@ -14,13 +14,25 @@ import ./make-test-python.nix (
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"
advertise = true
[[interfaces.prefix]]
prefix = "::/64"
'';
#
# This configuration is identical to the example in the CoreRAD NixOS module.
settings = {
interfaces = [
{
name = "eth0";
monitor = true;
}
{
name = "eth1";
advertise = true;
prefix = [{ prefix = "::/64"; }];
}
];
debug = {
address = "localhost:9430";
prometheus = true;
};
};
};
};
};
@ -66,5 +78,12 @@ import ./make-test-python.nix (
assert (
"/64 scope global temporary" in addrs
), "SLAAC temporary address was not configured on client after router advertisement"
with subtest("Verify HTTP debug server is configured"):
out = router.succeed("curl localhost:9430/metrics")
assert (
"corerad_build_info" in out
), "Build info metric was not found in Prometheus output"
'';
})