From 1f9803c2a49e853ca5721f13888a61a816c4dc09 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 17 Nov 2016 23:19:45 +0100 Subject: services: static-networking: Add netmask. Reported by Mathieu Lirzin and Andreas Enge. * gnu/services/networking.scm ()[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. --- gnu/services/networking.scm | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'gnu/services/networking.scm') 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 - (($ interface ip gateway provision + (($ 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)))) -- cgit v1.2.3