diff --git a/services/ip.scm b/services/ip.scm new file mode 100644 index 0000000..5fef31c --- /dev/null +++ b/services/ip.scm @@ -0,0 +1,35 @@ +(define-module (services ip) + #:use-module (gnu packages linux) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (ice-9 match) + #:export (ip-shepherd-service ip-configuration)) + +(define-record-type* + ip-configuration make-ip-configuration ip-configuration? + (package ip-configuration-package (default iproute)) + (commands ip-configuration-commands (default '()))) + +(define ip-shepherd-service + (match-lambda + (($ package commands) + (list + (shepherd-service + (provision '(ip)) + (documentation (format #f "Run iproute2 commands.")) + (one-shot? #t) + (start + #~(lambda _ + (system* (string-append #$package "/sbin/ip") "-batch" + #$(plain-file "ip" (string-join commands "\n")))))))))) + +(define-public ip-service-type + (service-type + (name 'ip) + (extensions + (list + (service-extension shepherd-root-service-type ip-shepherd-service))) + (description "Run the given list of iproute2 commands.") + (default-value (ip-configuration))))