(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))))