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.
This commit is contained in:
Ludovic Courtès 2016-11-17 23:19:45 +01:00
parent 056d0b4034
commit 1f9803c2a4
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 18 additions and 10 deletions

View File

@ -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

View File

@ -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))))