vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / scion / scion-ip-gateway.nix
blob1801828c8ad0ecd0e64bafb4a5d194b6dfcd6656
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
10 let
11   globalCfg = config.services.scion;
12   cfg = config.services.scion.scion-ip-gateway;
13   toml = pkgs.formats.toml { };
14   json = pkgs.formats.json { };
15   connectionDir = if globalCfg.stateless then "/run" else "/var/lib";
16   defaultConfig = {
17     tunnel = { };
18     gateway = {
19       traffic_policy_file = "${trafficConfigFile}";
20     };
21   };
22   defaultTrafficConfig = {
23     ASes = { };
24     ConfigVersion = 9001;
25   };
26   configFile = toml.generate "scion-ip-gateway.toml" (recursiveUpdate defaultConfig cfg.config);
27   trafficConfigFile = json.generate "scion-ip-gateway-traffic.json" (
28     recursiveUpdate defaultTrafficConfig cfg.trafficConfig
29   );
32   options.services.scion.scion-ip-gateway = {
33     enable = mkEnableOption "the scion-ip-gateway service";
34     config = mkOption {
35       default = { };
36       type = toml.type;
37       example = literalExpression ''
38         {
39           tunnel = {
40             src_ipv4 = "172.16.100.1";
41           };
42         }
43       '';
44       description = ''
45         scion-ip-gateway daemon configuration
46       '';
47     };
48     trafficConfig = mkOption {
49       default = { };
50       type = json.type;
51       example = literalExpression ''
52         {
53           ASes = {
54             "2-ffaa:0:b" = {
55               Nets = [
56                   "172.16.1.0/24"
57               ];
58             };
59           };
60           ConfigVersion = 9001;
61         }
62       '';
63       description = ''
64         scion-ip-gateway traffic configuration
65       '';
66     };
67   };
68   config = mkIf cfg.enable {
69     systemd.services.scion-ip-gateway = {
70       description = "SCION IP Gateway Service";
71       after = [
72         "network-online.target"
73         "scion-dispatcher.service"
74       ];
75       wants = [
76         "network-online.target"
77         "scion-dispatcher.service"
78       ];
79       wantedBy = [ "multi-user.target" ];
80       serviceConfig = {
81         Type = "simple";
82         Group = if (config.services.scion.scion-dispatcher.enable == true) then "scion" else null;
83         ExecStart = "${globalCfg.package}/bin/scion-ip-gateway --config ${configFile}";
84         DynamicUser = true;
85         AmbientCapabilities = [ "CAP_NET_ADMIN" ];
86         Restart = "on-failure";
87         KillMode = "control-group";
88         RemainAfterExit = false;
89       };
90     };
91   };