python312Packages.publicsuffixlist: 1.0.2.20241207 -> 1.0.2.20241213 (#365192)
[NixPkgs.git] / nixos / modules / services / networking / corerad.nix
blob3851c22f6eeca97236ff22e93aab8aa7d8fb1c71
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
7 let
8   cfg = config.services.corerad;
9   settingsFormat = pkgs.formats.toml { };
13   meta.maintainers = with lib.maintainers; [ mdlayher ];
15   options.services.corerad = {
16     enable = lib.mkEnableOption "CoreRAD IPv6 NDP RA daemon";
18     settings = lib.mkOption {
19       type = settingsFormat.type;
20       example = lib.literalExpression ''
21         {
22           interfaces = [
23             # eth0 is an upstream interface monitoring for IPv6 router advertisements.
24             {
25               name = "eth0";
26               monitor = true;
27             }
28             # eth1 is a downstream interface advertising IPv6 prefixes for SLAAC.
29             {
30               name = "eth1";
31               advertise = true;
32               prefix = [{ prefix = "::/64"; }];
33             }
34           ];
35           # Optionally enable Prometheus metrics.
36           debug = {
37             address = "localhost:9430";
38             prometheus = true;
39           };
40         }
41       '';
42       description = ''
43         Configuration for CoreRAD, see <https://github.com/mdlayher/corerad/blob/main/internal/config/reference.toml>
44         for supported values. Ignored if configFile is set.
45       '';
46     };
48     configFile = lib.mkOption {
49       type = lib.types.path;
50       example = lib.literalExpression ''"''${pkgs.corerad}/etc/corerad/corerad.toml"'';
51       description = "Path to CoreRAD TOML configuration file.";
52     };
54     package = lib.mkPackageOption pkgs "corerad" { };
55   };
57   config = lib.mkIf cfg.enable {
58     # Prefer the config file over settings if both are set.
59     services.corerad.configFile = lib.mkDefault (settingsFormat.generate "corerad.toml" cfg.settings);
61     systemd.services.corerad = {
62       description = "CoreRAD IPv6 NDP RA daemon";
63       after = [ "network.target" ];
64       wantedBy = [ "multi-user.target" ];
65       serviceConfig = {
66         LimitNPROC = 512;
67         LimitNOFILE = 1048576;
68         CapabilityBoundingSet = "CAP_NET_ADMIN CAP_NET_RAW";
69         AmbientCapabilities = "CAP_NET_ADMIN CAP_NET_RAW";
70         NoNewPrivileges = true;
71         DynamicUser = true;
72         Type = "notify";
73         NotifyAccess = "main";
74         ExecStart = "${lib.getBin cfg.package}/bin/corerad -c=${cfg.configFile}";
75         Restart = "on-failure";
76         RestartKillSignal = "SIGHUP";
77       };
78     };
79   };