diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-11-17 23:19:45 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-11-17 23:21:48 +0100 |
commit | 1f9803c2a49e853ca5721f13888a61a816c4dc09 (patch) | |
tree | 19bbe7c8b6e748018c877f127781115f7d3a9424 | |
parent | 056d0b40341a1b28516a6c2e0fed820360be42b5 (diff) | |
download | guix-1f9803c2a49e853ca5721f13888a61a816c4dc09.tar guix-1f9803c2a49e853ca5721f13888a61a816c4dc09.tar.gz |
services: static-networking: Add netmask.
Reported by Mathieu Lirzin and Andreas Enge.
* gnu/services/networking.scm (<static-networking>)[netmask]: New
field.
(static-networking-service-type): Honor it.
* gnu/services/networking.scm (static-networking-service): Add #:netmask
and honor it.
* doc/guix.texi (Networking Services): Adjust accordingly.
-rw-r--r-- | doc/guix.texi | 6 | ||||
-rw-r--r-- | gnu/services/networking.scm | 22 |
2 files changed, 18 insertions, 10 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 1a809c340d..0e70830d02 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -8363,10 +8363,10 @@ Protocol (DHCP) client, on all the non-loopback network interfaces. @end deffn @deffn {Scheme Procedure} static-networking-service @var{interface} @var{ip} @ - [#:gateway #f] [#:name-servers @code{'()}] + [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] Return a service that starts @var{interface} with address @var{ip}. If -@var{gateway} is true, it must be a string specifying the default network -gateway. +@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. @end deffn @cindex wicd diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 2adde23789..884c542439 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -112,6 +112,8 @@ fe80::1%lo0 apps.facebook.com\n") static-networking? (interface static-networking-interface) (ip static-networking-ip) + (netmask static-networking-netmask + (default #f)) (gateway static-networking-gateway) (provision static-networking-provision) (name-servers static-networking-name-servers) @@ -121,7 +123,7 @@ fe80::1%lo0 apps.facebook.com\n") (shepherd-service-type 'static-networking (match-lambda - (($ <static-networking> interface ip gateway provision + (($ <static-networking> interface ip netmask gateway provision name-servers net-tools) (let ((loopback? (memq 'loopback provision))) @@ -139,12 +141,18 @@ fe80::1%lo0 apps.facebook.com\n") (start #~(lambda _ ;; Return #t if successfully started. (let* ((addr (inet-pton AF_INET #$ip)) - (sockaddr (make-socket-address AF_INET addr 0))) + (sockaddr (make-socket-address AF_INET addr 0)) + (mask (and #$netmask + (inet-pton AF_INET #$netmask))) + (maskaddr (and mask + (make-socket-address AF_INET + mask 0)))) (configure-network-interface #$interface sockaddr (logior IFF_UP #$(if loopback? #~IFF_LOOPBACK - 0)))) + 0)) + #:netmask maskaddr)) #$(if gateway #~(zero? (system* (string-append #$net-tools "/sbin/route") @@ -176,16 +184,16 @@ fe80::1%lo0 apps.facebook.com\n") (define* (static-networking-service interface ip #:key - gateway + netmask gateway (provision '(networking)) (name-servers '()) (net-tools net-tools)) "Return a service that starts @var{interface} with address @var{ip}. If -@var{gateway} is true, it must be a string specifying the default network -gateway." +@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." (service static-networking-service-type (static-networking (interface interface) (ip ip) - (gateway gateway) + (netmask netmask) (gateway gateway) (provision provision) (name-servers name-servers) (net-tools net-tools)))) |