mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
services: networking: Allow dhcp-client to use a config file.
* gnu/services/networking.scm (dhcp-client-configuration) [config-file]: New field. (dhcp-client-configuration-config-file): New accessor. (dhcp-client-shepherd-service): Use the config file when invoking dhclient if supplied. * doc/guix.texi: Document it. Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
parent
e92259e56f
commit
b539e5ae39
2 changed files with 16 additions and 2 deletions
|
@ -21035,6 +21035,9 @@ When set to @code{'all}, the DHCP client listens on all the available
|
|||
non-loopback interfaces that can be activated. Otherwise the DHCP
|
||||
client listens only on the specified interfaces.
|
||||
|
||||
@item @code{config-file} (default: @code{#f})
|
||||
The configuration file for the DHCP client.
|
||||
|
||||
@item @code{shepherd-requirement} (default: @code{'()})
|
||||
@itemx @code{shepherd-provision} (default: @code{'(networking)})
|
||||
This option can be used to provide a list of symbols naming Shepherd services
|
||||
|
|
|
@ -91,6 +91,7 @@ (define-module (gnu services networking)
|
|||
dhcp-client-configuration?
|
||||
dhcp-client-configuration-package
|
||||
dhcp-client-configuration-interfaces
|
||||
dhcp-client-configuration-config-file
|
||||
dhcp-client-configuration-shepherd-provision
|
||||
dhcp-client-configuration-shepherd-requirement
|
||||
|
||||
|
@ -319,6 +320,8 @@ (define-record-type* <dhcp-client-configuration>
|
|||
(default '()))
|
||||
(shepherd-provision dhcp-client-configuration-shepherd-provision
|
||||
(default '(networking)))
|
||||
(config-file dhcp-client-configuration-config-file
|
||||
(default #f))
|
||||
(interfaces dhcp-client-configuration-interfaces
|
||||
(default 'all))) ;'all | list of strings
|
||||
|
||||
|
@ -329,6 +332,7 @@ (define dhcp-client-shepherd-service
|
|||
(requirement (dhcp-client-configuration-shepherd-requirement config))
|
||||
(provision (dhcp-client-configuration-shepherd-provision config))
|
||||
(interfaces (dhcp-client-configuration-interfaces config))
|
||||
(config-file (dhcp-client-configuration-config-file config))
|
||||
(pid-file "/var/run/dhclient.pid"))
|
||||
(list (shepherd-service
|
||||
(documentation "Set up networking via DHCP.")
|
||||
|
@ -364,6 +368,11 @@ (define ifaces
|
|||
(_
|
||||
#~'#$interfaces))))
|
||||
|
||||
(define config-file-args
|
||||
(if #$config-file
|
||||
(list "-cf" #$config-file)
|
||||
'()))
|
||||
|
||||
(false-if-exception (delete-file #$pid-file))
|
||||
(let ((pid (fork+exec-command
|
||||
;; By default dhclient uses a
|
||||
|
@ -371,8 +380,10 @@ (define ifaces
|
|||
;; DDNS, which is incompatable with
|
||||
;; non-ISC DHCP servers; thus, pass '-I'.
|
||||
;; <https://kb.isc.org/docs/aa-01091>.
|
||||
(cons* dhclient "-nw" "-I"
|
||||
"-pf" #$pid-file ifaces))))
|
||||
`(,dhclient "-nw" "-I"
|
||||
"-pf" ,#$pid-file
|
||||
,@config-file-args
|
||||
,@ifaces))))
|
||||
(and (zero? (cdr (waitpid pid)))
|
||||
(read-pid-file #$pid-file)))))
|
||||
(stop #~(make-kill-destructor))))))
|
||||
|
|
Loading…
Reference in a new issue