[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#29117] [PATCH 1/2] services: networking: Add a dependency override
From: |
Marius Bakke |
Subject: |
[bug#29117] [PATCH 1/2] services: networking: Add a dependency override mechanism to <static-networking>. |
Date: |
Thu, 2 Nov 2017 20:14:45 +0100 |
* gnu/services/networking.scm (<static-networking>): Add 'requirement' record.
(static-networking-shepherd-service): Make UDEV the default requirement.
(static-networking-service): Expose 'requirement' parameter.
* doc/guix.texi (Networking Services): Document it.
---
doc/guix.texi | 5 ++++-
gnu/services/networking.scm | 14 +++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 983d0e52e..c501c77eb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -10288,9 +10288,12 @@ This is the type for statically-configured network
interfaces.
@deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @
[#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}]
+ [#:requirement @code{'(udev)}]
Return a service that starts @var{interface} with address @var{ip}. If
@var{netmask} is true, use it as the network mask. If @var{gateway} is true,
-it must be a string specifying the default network gateway.
+it must be a string specifying the default network gateway. @var{requirement}
+can be used to declare a dependency on another service before configuring the
+interface.
This procedure can be called several times, one for each network
interface of interest. Behind the scenes what it does is extend
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index b0c23aafc..e7d9d9457 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -51,6 +51,7 @@
static-networking-ip
static-networking-netmask
static-networking-gateway
+ static-networking-requirement
static-networking-service
static-networking-service-type
@@ -145,19 +146,21 @@ fe80::1%lo0 apps.facebook.com\n")
(default #f))
(provision static-networking-provision
(default #f))
+ ;; Wait for udev to be up so that interfaces are actually usable.
+ (requirement static-networking-requirement
+ (default '(udev)))
(name-servers static-networking-name-servers ;FIXME: doesn't belong here
(default '())))
(define static-networking-shepherd-service
(match-lambda
(($ <static-networking> interface ip netmask gateway provision
- name-servers)
+ requirement name-servers)
(let ((loopback? (and provision (memq 'loopback provision))))
(shepherd-service
- ;; Unless we're providing the loopback interface, wait for udev to be
up
- ;; and running so that INTERFACE is actually usable.
- (requirement (if loopback? '() '(udev)))
+ ;; Force the loopback interface to start early.
+ (requirement (if loopback? '() requirement))
(documentation
"Bring up the networking interface using a static IP address.")
@@ -262,7 +265,7 @@ network interface.")))
(define* (static-networking-service interface ip
#:key
- netmask gateway provision
+ netmask gateway provision requirement
(name-servers '()))
"Return a service that starts @var{interface} with address @var{ip}. If
@var{netmask} is true, use it as the network mask. If @var{gateway} is true,
@@ -277,6 +280,7 @@ to handle."
(list (static-networking (interface interface) (ip ip)
(netmask netmask) (gateway gateway)
(provision provision)
+ (requirement requirement)
(name-servers name-servers)))))
(define dhcp-client-service-type
--
2.15.0