73 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# Module for the IPv6 Router Advertisement Daemon.
 | 
						|
 | 
						|
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  cfg = config.services.radvd;
 | 
						|
 | 
						|
  confFile = pkgs.writeText "radvd.conf" cfg.config;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    services.radvd.enable = mkOption {
 | 
						|
      default = false;
 | 
						|
      description =
 | 
						|
        ''
 | 
						|
          Whether to enable the Router Advertisement Daemon
 | 
						|
          (<command>radvd</command>), which provides link-local
 | 
						|
          advertisements of IPv6 router addresses and prefixes using
 | 
						|
          the Neighbor Discovery Protocol (NDP).  This enables
 | 
						|
          stateless address autoconfiguration in IPv6 clients on the
 | 
						|
          network.
 | 
						|
        '';
 | 
						|
    };
 | 
						|
 | 
						|
    services.radvd.config = mkOption {
 | 
						|
      example =
 | 
						|
        ''
 | 
						|
          interface eth0 {
 | 
						|
            AdvSendAdvert on;
 | 
						|
            prefix 2001:db8:1234:5678::/64 { };
 | 
						|
          };
 | 
						|
        '';
 | 
						|
      description =
 | 
						|
        ''
 | 
						|
          The contents of the radvd configuration file.
 | 
						|
        '';
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = mkIf cfg.enable {
 | 
						|
 | 
						|
    users.users.radvd =
 | 
						|
      { uid = config.ids.uids.radvd;
 | 
						|
        description = "Router Advertisement Daemon User";
 | 
						|
      };
 | 
						|
 | 
						|
    systemd.services.radvd =
 | 
						|
      { description = "IPv6 Router Advertisement Daemon";
 | 
						|
        wantedBy = [ "multi-user.target" ];
 | 
						|
        after = [ "network.target" ];
 | 
						|
        serviceConfig =
 | 
						|
          { ExecStart = "@${pkgs.radvd}/bin/radvd radvd -n -u radvd -C ${confFile}";
 | 
						|
            Restart = "always";
 | 
						|
          };
 | 
						|
      };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
}
 |