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>master
parent
e92259e56f
commit
b539e5ae39
|
@ -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
|
non-loopback interfaces that can be activated. Otherwise the DHCP
|
||||||
client listens only on the specified interfaces.
|
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{'()})
|
@item @code{shepherd-requirement} (default: @code{'()})
|
||||||
@itemx @code{shepherd-provision} (default: @code{'(networking)})
|
@itemx @code{shepherd-provision} (default: @code{'(networking)})
|
||||||
This option can be used to provide a list of symbols naming Shepherd services
|
This option can be used to provide a list of symbols naming Shepherd services
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
dhcp-client-configuration?
|
dhcp-client-configuration?
|
||||||
dhcp-client-configuration-package
|
dhcp-client-configuration-package
|
||||||
dhcp-client-configuration-interfaces
|
dhcp-client-configuration-interfaces
|
||||||
|
dhcp-client-configuration-config-file
|
||||||
dhcp-client-configuration-shepherd-provision
|
dhcp-client-configuration-shepherd-provision
|
||||||
dhcp-client-configuration-shepherd-requirement
|
dhcp-client-configuration-shepherd-requirement
|
||||||
|
|
||||||
|
@ -319,6 +320,8 @@
|
||||||
(default '()))
|
(default '()))
|
||||||
(shepherd-provision dhcp-client-configuration-shepherd-provision
|
(shepherd-provision dhcp-client-configuration-shepherd-provision
|
||||||
(default '(networking)))
|
(default '(networking)))
|
||||||
|
(config-file dhcp-client-configuration-config-file
|
||||||
|
(default #f))
|
||||||
(interfaces dhcp-client-configuration-interfaces
|
(interfaces dhcp-client-configuration-interfaces
|
||||||
(default 'all))) ;'all | list of strings
|
(default 'all))) ;'all | list of strings
|
||||||
|
|
||||||
|
@ -329,6 +332,7 @@
|
||||||
(requirement (dhcp-client-configuration-shepherd-requirement config))
|
(requirement (dhcp-client-configuration-shepherd-requirement config))
|
||||||
(provision (dhcp-client-configuration-shepherd-provision config))
|
(provision (dhcp-client-configuration-shepherd-provision config))
|
||||||
(interfaces (dhcp-client-configuration-interfaces config))
|
(interfaces (dhcp-client-configuration-interfaces config))
|
||||||
|
(config-file (dhcp-client-configuration-config-file config))
|
||||||
(pid-file "/var/run/dhclient.pid"))
|
(pid-file "/var/run/dhclient.pid"))
|
||||||
(list (shepherd-service
|
(list (shepherd-service
|
||||||
(documentation "Set up networking via DHCP.")
|
(documentation "Set up networking via DHCP.")
|
||||||
|
@ -364,6 +368,11 @@
|
||||||
(_
|
(_
|
||||||
#~'#$interfaces))))
|
#~'#$interfaces))))
|
||||||
|
|
||||||
|
(define config-file-args
|
||||||
|
(if #$config-file
|
||||||
|
(list "-cf" #$config-file)
|
||||||
|
'()))
|
||||||
|
|
||||||
(false-if-exception (delete-file #$pid-file))
|
(false-if-exception (delete-file #$pid-file))
|
||||||
(let ((pid (fork+exec-command
|
(let ((pid (fork+exec-command
|
||||||
;; By default dhclient uses a
|
;; By default dhclient uses a
|
||||||
|
@ -371,8 +380,10 @@
|
||||||
;; DDNS, which is incompatable with
|
;; DDNS, which is incompatable with
|
||||||
;; non-ISC DHCP servers; thus, pass '-I'.
|
;; non-ISC DHCP servers; thus, pass '-I'.
|
||||||
;; <https://kb.isc.org/docs/aa-01091>.
|
;; <https://kb.isc.org/docs/aa-01091>.
|
||||||
(cons* dhclient "-nw" "-I"
|
`(,dhclient "-nw" "-I"
|
||||||
"-pf" #$pid-file ifaces))))
|
"-pf" ,#$pid-file
|
||||||
|
,@config-file-args
|
||||||
|
,@ifaces))))
|
||||||
(and (zero? (cdr (waitpid pid)))
|
(and (zero? (cdr (waitpid pid)))
|
||||||
(read-pid-file #$pid-file)))))
|
(read-pid-file #$pid-file)))))
|
||||||
(stop #~(make-kill-destructor))))))
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
Reference in New Issue