nixos/radvd: Convert to a systemd unit

Additionally, remove the automatic initialization of the ipv6 forwarding
sysctl as this should be handled by the end user. This really should not
be an issue as most people running radvd are likely forwarding ipv6
packets.

+21 -12
+1
nixos/modules/misc/ids.nix
··· 146 146 neo4j = 136; 147 147 riemann = 137; 148 148 riemanndash = 138; 149 + radvd = 139; 149 150 150 151 # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! 151 152
+20 -12
nixos/modules/services/networking/radvd.nix
··· 52 52 53 53 config = mkIf cfg.enable { 54 54 55 - environment.systemPackages = [ pkgs.radvd ]; 55 + users.extraUsers.radvd = 56 + { uid = config.ids.uids.radvd; 57 + description = "Router Advertisement Daemon User"; 58 + }; 56 59 57 - jobs.radvd = 60 + systemd.services.radvd = 58 61 { description = "IPv6 Router Advertisement Daemon"; 59 62 60 - startOn = "started network-interfaces"; 63 + wantedBy = [ "multi-user.target" ]; 61 64 62 - preStart = 63 - '' 64 - # !!! Radvd only works if IPv6 forwarding is enabled. But 65 - # this should probably be done somewhere else (and not 66 - # necessarily for all interfaces). 67 - echo 1 > /proc/sys/net/ipv6/conf/all/forwarding 68 - ''; 65 + after = [ "network.target" ]; 69 66 70 - exec = "${pkgs.radvd}/sbin/radvd -m syslog -s -C ${confFile}"; 67 + path = [ pkgs.radvd ]; 71 68 72 - daemonType = "fork"; 69 + preStart = '' 70 + mkdir -m 755 -p /run/radvd 71 + chown radvd /run/radvd 72 + ''; 73 + 74 + serviceConfig = 75 + { ExecStart = "@${pkgs.radvd}/sbin/radvd radvd" 76 + + " -p /run/radvd/radvd.pid -m syslog -u radvd -C ${confFile}"; 77 + Restart = "always"; 78 + Type = "forking"; 79 + PIDFile = "/run/radvd/radvd.pid"; 80 + }; 73 81 }; 74 82 75 83 };