guix-commits
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]