vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / networking / miredo.nix
blob12be41b7e7b6b6e488b78811fda2444c78e729b3
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.miredo;
7   pidFile = "/run/miredo.pid";
8   miredoConf = pkgs.writeText "miredo.conf" ''
9     InterfaceName ${cfg.interfaceName}
10     ServerAddress ${cfg.serverAddress}
11     ${optionalString (cfg.bindAddress != null) "BindAddress ${cfg.bindAddress}"}
12     ${optionalString (cfg.bindPort != null) "BindPort ${cfg.bindPort}"}
13   '';
17   ###### interface
19   options = {
21     services.miredo = {
23       enable = mkEnableOption "the Miredo IPv6 tunneling service";
25       package = mkPackageOption pkgs "miredo" { };
27       serverAddress = mkOption {
28         default = "teredo.remlab.net";
29         type = types.str;
30         description = ''
31           The hostname or primary IPv4 address of the Teredo server.
32           This setting is required if Miredo runs as a Teredo client.
33           "teredo.remlab.net" is an experimental service for testing only.
34           Please use another server for production and/or large scale deployments.
35         '';
36       };
38       interfaceName = mkOption {
39         default = "teredo";
40         type = types.str;
41         description = ''
42           Name of the network tunneling interface.
43         '';
44       };
46       bindAddress = mkOption {
47         default = null;
48         type = types.nullOr types.str;
49         description = ''
50           Depending on the local firewall/NAT rules, you might need to force
51           Miredo to use a fixed UDP port and or IPv4 address.
52         '';
53       };
55       bindPort = mkOption {
56         default = null;
57         type = types.nullOr types.str;
58         description = ''
59           Depending on the local firewall/NAT rules, you might need to force
60           Miredo to use a fixed UDP port and or IPv4 address.
61         '';
62       };
63     };
64   };
67   ###### implementation
69   config = mkIf cfg.enable {
71     systemd.services.miredo = {
72       wantedBy = [ "multi-user.target" ];
73       after = [ "network.target" ];
74       description = "Teredo IPv6 Tunneling Daemon";
75       serviceConfig = {
76         Restart = "always";
77         RestartSec = "5s";
78         ExecStart = "${cfg.package}/bin/miredo -c ${miredoConf} -p ${pidFile} -f";
79         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
80       };
81     };
83   };