From c8b3c180df43a4881e8b14aae5307009330a7a87 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Fri, 11 Aug 2023 17:34:56 +0200 Subject: [PATCH] Add ip-service-type For setting up custom networks with ip -batch. --- services/ip.scm | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 services/ip.scm 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))))