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