diff options
Diffstat (limited to 'gnu/system/dmd.scm')
-rw-r--r-- | gnu/system/dmd.scm | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/gnu/system/dmd.scm b/gnu/system/dmd.scm index b248d9f0c5..bcafd910dd 100644 --- a/gnu/system/dmd.scm +++ b/gnu/system/dmd.scm @@ -27,6 +27,8 @@ #:select (mingetty inetutils)) #:use-module ((gnu packages package-management) #:select (guix)) + #:use-module ((gnu packages linux) + #:select (net-tools)) #:use-module (ice-9 match) #:use-module (srfi srfi-1) #:export (service? @@ -155,20 +157,34 @@ (inputs `(("guix" ,guix)))))) (define* (static-networking-service store interface ip - #:key (inetutils inetutils)) - "Return a service that starts INTERFACE with address IP." + #:key + gateway + (inetutils inetutils) + (net-tools net-tools)) + "Return a service that starts INTERFACE with address IP. If GATEWAY is +true, it must be a string specifying the default network gateway." ;; TODO: Eventually we should do this using Guile's networking procedures, ;; like 'configure-qemu-networking' does, but the patch that does this is ;; not yet in stock Guile. (let ((ifconfig (string-append (package-output store inetutils) - "/bin/ifconfig"))) + "/bin/ifconfig")) + (route (string-append (package-output store net-tools) + "/sbin/route"))) (service (provision '(networking)) - (start `(make-forkexec-constructor ,ifconfig ,interface ,ip "up")) + (start `(lambda _ + (and (zero? (system* ,ifconfig ,interface ,ip "up")) + ,(if gateway + `(zero? (system* ,route "add" "-net" "default" + "gw" ,gateway)) + #t)))) (stop `(make-forkexec-constructor ,ifconfig ,interface "down")) (respawn? #f) - (inputs `(("inetutils" ,inetutils)))))) + (inputs `(("inetutils" ,inetutils) + ,@(if gateway + `(("net-tools" ,net-tools)) + '())))))) (define (dmd-configuration-file store services) |