aboutsummaryrefslogtreecommitdiff
path: root/gnu/system/dmd.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/system/dmd.scm')
-rw-r--r--gnu/system/dmd.scm26
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)