summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/services/networking.scm13
1 files changed, 10 insertions, 3 deletions
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index ff7bd7fde9..d532fc8d99 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -107,10 +107,16 @@ Protocol (DHCP) client, on all the non-loopback network interfaces."
(with-monad %store-monad
(return (service
- (documentation
- "Set up networking via DHCP.")
+ (documentation "Set up networking via DHCP.")
(requirement '(user-processes udev))
+
+ ;; XXX: Running with '-nw' ("no wait") avoids blocking for a
+ ;; minute when networking is unavailable, but also means that the
+ ;; interface is not up yet when 'start' completes. To wait for
+ ;; the interface to be ready, one should instead monitor udev
+ ;; events.
(provision '(networking))
+
(start #~(lambda _
;; When invoked without any arguments, 'dhclient'
;; discovers all non-loopback interfaces *that are
@@ -121,7 +127,8 @@ Protocol (DHCP) client, on all the non-loopback network interfaces."
(ifaces (filter valid?
(all-network-interfaces)))
(pid (fork+exec-command
- (cons* #$dhclient "-pf" #$pid-file
+ (cons* #$dhclient "-nw"
+ "-pf" #$pid-file
ifaces))))
(and (zero? (cdr (waitpid pid)))
(call-with-input-file #$pid-file read)))))