[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/04: services: dhcp-client: Turn up the interfaces before calling 'dhc
From: |
Ludovic Courtès |
Subject: |
04/04: services: dhcp-client: Turn up the interfaces before calling 'dhclient'. |
Date: |
Sun, 17 May 2015 21:25:31 +0000 |
civodul pushed a commit to branch master
in repository guix.
commit 9bb34f9c9232757f275f458bb2621fe976f8d8fd
Author: Ludovic Courtès <address@hidden>
Date: Sun May 17 23:24:30 2015 +0200
services: dhcp-client: Turn up the interfaces before calling 'dhclient'.
Somehow, as of Linux 4.0.2, the interfaces are down by default, which
prevents 'dhclient' from actually using them.
* gnu/services/networking.scm (dhcp-client-service): Call
'set-network-interface-up' on each item of IFACES.
---
gnu/services/networking.scm | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 33ecf9c..102202c 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -165,20 +165,24 @@ Protocol (DHCP) client, on all the non-loopback network
interfaces."
(provision '(networking))
(start #~(lambda _
- (false-if-exception (delete-file #$pid-file))
-
;; When invoked without any arguments, 'dhclient'
;; discovers all non-loopback interfaces *that are
;; up*. However, the relevant interfaces are
;; typically down at this point. Thus we perform our
;; own interface discovery here.
- (let* ((valid? (negate loopback-network-interface?))
- (ifaces (filter valid?
- (all-network-interfaces)))
- (pid (fork+exec-command
- (cons* #$dhclient "-nw"
- "-pf" #$pid-file
- ifaces))))
+ (define valid?
+ (negate loopback-network-interface?))
+ (define ifaces
+ (filter valid? (all-network-interfaces)))
+
+ ;; XXX: Make sure the interfaces are up so that
+ ;; 'dhclient' can actually send/receive over them.
+ (for-each set-network-interface-up ifaces)
+
+ (false-if-exception (delete-file #$pid-file))
+ (let ((pid (fork+exec-command
+ (cons* #$dhclient "-nw"
+ "-pf" #$pid-file ifaces))))
(and (zero? (cdr (waitpid pid)))
(let loop ()
(catch 'system-error