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