~ruther/guix-local

34d60c49cbffcee2bdaec32f0bfe2fef1c1ea8e6 — Mathieu Othacehe 9 years ago d938a58
services: connman: Rework service.

* gnu/services/networking.scm (connman-service): Remove.
(<connman-configuration>): New record specifying the package
to be used (connman) and whether vpn plugin shall be
disabled (disable-vpn?).
(connman-configuration): New exported variable.
(connman-configuration?): New exported variable.
(connman-service-type): Export it.

* doc/guix.texi (Networking Services): Adjust accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 75 insertions(+), 45 deletions(-)

M doc/guix.texi
M gnu/services/networking.scm
M doc/guix.texi => doc/guix.texi +26 -8
@@ 9263,16 9263,34 @@ NetworkManager will not modify @code{resolv.conf}.
@end deftp

@cindex Connman
@deffn {Scheme Procedure} connman-service @
       [#:connman @var{connman}]
Return a service that runs @url{https://01.org/connman,Connman}, a network
connection manager.

This service adds the @var{connman} package to the global profile, providing
several the @command{connmanctl} command to interact with the daemon and
configure networking."
@deffn {Scheme Variable} connman-service-type
This is the service type to run @url{https://01.org/connman,Connman},
a network connection manager.

Its value must be an
@code{connman-configuration} record as in this example:

@example
(service connman-service-type
         (connman-configuration
           (disable-vpn? #t)))
@end example

See below for details about @code{connman-configuration}.
@end deffn

@deftp {Data Type} connman-configuration
Data Type representing the configuration of connman.

@table @asis
@item @code{connman} (default: @var{connman})
The connman package to use.

@item @code{disable-vpn?} (default: @code{#f})
When true, enable connman's vpn plugin.
@end table
@end deftp

@cindex WPA Supplicant
@defvr {Scheme Variable} wpa-supplicant-service-type
This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA

M gnu/services/networking.scm => gnu/services/networking.scm +49 -37
@@ 80,7 80,10 @@
            network-manager-configuration-dns
            network-manager-service-type

            connman-service
            connman-configuration
            connman-configuration?
            connman-service-type

            wpa-supplicant-service-type

            openvswitch-service-type


@@ 822,45 825,54 @@ dns=" dns "
;;; Connman
;;;

(define %connman-activation
  ;; Activation gexp for Connman.
  #~(begin
      (use-modules (guix build utils))
      (mkdir-p "/var/lib/connman/")
      (mkdir-p "/var/lib/connman-vpn/")))

(define (connman-shepherd-service connman)
(define-record-type* <connman-configuration>
  connman-configuration make-connman-configuration
  connman-configuration?
  (connman      connman-configuration-connman
                (default connman))
  (disable-vpn? connman-configuration-disable-vpn?
                (default #f)))

(define (connman-activation config)
  (let ((disable-vpn? (connman-configuration-disable-vpn? config)))
    (with-imported-modules '((guix build utils))
      #~(begin
          (use-modules (guix build utils))
          (mkdir-p "/var/lib/connman/")
          (unless #$disable-vpn?
            (mkdir-p "/var/lib/connman-vpn/"))))))

(define (connman-shepherd-service config)
  "Return a shepherd service for Connman"
  (list (shepherd-service
         (documentation "Run Connman")
         (provision '(networking))
         (requirement '(user-processes dbus-system loopback wpa-supplicant))
         (start #~(make-forkexec-constructor
                   (list (string-append #$connman
                                        "/sbin/connmand")
                         "-n" "-r")))
         (stop #~(make-kill-destructor)))))
  (and
   (connman-configuration? config)
   (let ((connman      (connman-configuration-connman config))
         (disable-vpn? (connman-configuration-disable-vpn? config)))
     (list (shepherd-service
            (documentation "Run Connman")
            (provision '(networking))
            (requirement
             '(user-processes dbus-system loopback wpa-supplicant))
            (start #~(make-forkexec-constructor
                      (list (string-append #$connman
                                           "/sbin/connmand")
                            "-n" "-r"
                            #$@(if disable-vpn? '("--noplugin=vpn") '()))))
            (stop #~(make-kill-destructor)))))))

(define connman-service-type
  (service-type (name 'connman)
                (extensions
                 (list (service-extension shepherd-root-service-type
                                          connman-shepherd-service)
                       (service-extension dbus-root-service-type list)
                       (service-extension activation-service-type
                                          (const %connman-activation))
                       ;; Add connman to the system profile.
                       (service-extension profile-service-type list)))))

(define* (connman-service #:key (connman connman))
  "Return a service that runs @url{https://01.org/connman,Connman}, a network
connection manager.

This service adds the @var{connman} package to the global profile, providing
several the @command{connmanctl} command to interact with the daemon and
configure networking."
  (service connman-service-type connman))

  (let ((connman-package (compose list connman-configuration-connman)))
    (service-type (name 'connman)
                  (extensions
                   (list (service-extension shepherd-root-service-type
                                            connman-shepherd-service)
                         (service-extension dbus-root-service-type
                                            connman-package)
                         (service-extension activation-service-type
                                            connman-activation)
                         ;; Add connman to the system profile.
                         (service-extension profile-service-type
                                            connman-package))))))


;;;