aboutsummaryrefslogtreecommitdiff
path: root/gnu/services/networking.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-11-17 23:19:45 +0100
committerLudovic Courtès <ludo@gnu.org>2016-11-17 23:21:48 +0100
commit1f9803c2a49e853ca5721f13888a61a816c4dc09 (patch)
tree19bbe7c8b6e748018c877f127781115f7d3a9424 /gnu/services/networking.scm
parent056d0b40341a1b28516a6c2e0fed820360be42b5 (diff)
downloadguix-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.
Diffstat (limited to 'gnu/services/networking.scm')
-rw-r--r--gnu/services/networking.scm22
1 files changed, 15 insertions, 7 deletions
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))))