unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Cuirass: Complete IPv6 support
@ 2023-03-01  8:34 Ryan Sundberg
  2023-03-04  1:30 ` Leo Famulari
  0 siblings, 1 reply; 4+ messages in thread
From: Ryan Sundberg @ 2023-03-01  8:34 UTC (permalink / raw)
  To: guix-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 409 bytes --]

Hello Guix hackers,

I have implemented IPv6 support for Cuirass in the attached patchset.
This has been tested on a multi-node cluster running Cuirass over IPv6
with some real builds. It should maintain full backwards compatibility
with the default IPv4, only enabling IPv6 when given the arguments to
bind to IPv6 addresses. See the commit log for full details!


-- 
--
Sincerely,
Ryan Sundberg

[-- Attachment #1.1.2: 0004-remote-support-IPv6-publish-urls.patch --]
[-- Type: text/x-patch, Size: 1588 bytes --]

From 42de39c21dc234571b498ba4dd9dd0ab1a4d3f57 Mon Sep 17 00:00:00 2001
From: Ryan Sundberg <ryan@arctype.co>
Date: Tue, 17 Jan 2023 22:35:31 -0800
Subject: [PATCH 4/4] remote: support IPv6 publish urls

When the server address is IPv6, build a compatible publish-url.

* src/cuirass/remote.scm (ipv6-address?): New function
(publish-url): Build IPv6 compatible URLs
---
 src/cuirass/remote.scm | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/cuirass/remote.scm b/src/cuirass/remote.scm
index 44b342d..caec985 100644
--- a/src/cuirass/remote.scm
+++ b/src/cuirass/remote.scm
@@ -162,7 +162,11 @@
 
 (define (publish-url address port)
   "Return the publish url at ADDRESS and PORT."
-  (string-append "http://" address ":" (number->string port)))
+  (format #f "http://~a:~d"
+          (if (ipv6-address? address)
+            (format #f "[~a]" address)
+            address)
+          port))
 
 (define (avahi-service->params service)
   "Return the URL of the publish server corresponding to the service with the
@@ -223,11 +227,15 @@ properties."
                      #:verbosity 1
                      #:substitute-urls urls))
 
+(define (ipv6-address? address)
+  "Is ADDRESS an ipv6 address?"
+  (not (not (string-index address #\:))))
+
 (define (parse-host-address host)
   (cond
     ((not host)
      (values AF_INET PF_INET INADDR_ANY))
-    ((string-index host #\:)
+    ((ipv6-address? host)
      (values AF_INET6 PF_INET6 (inet-pton AF_INET6 host)))
     (else
      (values AF_INET PF_INET (inet-pton AF_INET host)))))
-- 
2.37.2


[-- Attachment #1.1.3: 0003-web-Support-binding-to-IPv6-addresses-with-listen.patch --]
[-- Type: text/x-patch, Size: 2787 bytes --]

From c2f00c82e7b2ba3789e58d772d6cde41f651ed9d Mon Sep 17 00:00:00 2001
From: Ryan Sundberg <ryan@arctype.co>
Date: Sat, 14 Jan 2023 09:20:20 -0800
Subject: [PATCH 3/4] web: Support binding to IPv6 addresses with --listen

* src/cuirass/http.scm (run-cuirass-server): Detect AF_INET6 addresses
* src/web/server/fiberized.scm (make-default-socket): Ditto
---
 src/cuirass/http.scm         | 19 +++++++++++++++----
 src/web/server/fiberized.scm |  5 ++++-
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index a9fc3ea..07359c2 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -1148,10 +1148,19 @@ passed, only display JOBS targeting this SYSTEM."
     (_
      (respond-not-found (uri->string (request-uri request))))))
 
+(define (lookup-host host)
+  (cond
+    ;; Detect IPv6 addresses and skip DNS resolution
+    ((string-index host #\:)
+     (values AF_INET6 host))
+
+    (else
+      (let* ((host-info (gethostbyname host))
+             (family (hostent:addrtype host-info)))
+        (values family (inet-ntop family (car (hostent:addr-list host-info))))))))
+
 (define* (run-cuirass-server #:key (host "localhost") (port 8080))
-  (let* ((host-info  (gethostbyname host))
-         (address    (inet-ntop (hostent:addrtype host-info)
-                                (car (hostent:addr-list host-info)))))
+  (let-values (((family address) (lookup-host host)))
     (log-info "listening on ~A:~A" address port)
 
     ;; Here we use our own web backend, call 'fiberized'.  We cannot use the
@@ -1168,7 +1177,9 @@ passed, only display JOBS targeting this SYSTEM."
     ;;
     ;; XXX: We don't do 'call-with-sigint' like 'run-server' does.
     (let* ((impl (lookup-server-impl 'fiberized))
-           (server (open-server impl `(#:host ,address #:port ,port))))
+           (server (open-server impl `(#:host ,address
+                                       #:family ,family
+                                       #:port ,port))))
       (let loop ()
         (let-values (((client request body)
                       (read-client impl server)))
diff --git a/src/web/server/fiberized.scm b/src/web/server/fiberized.scm
index 23a2bd9..78edab5 100644
--- a/src/web/server/fiberized.scm
+++ b/src/web/server/fiberized.scm
@@ -49,7 +49,10 @@
   #:use-module (cuirass utils))
 
 (define (make-default-socket family addr port)
-  (let ((sock (socket PF_INET SOCK_STREAM 0)))
+  (let* ((proto-family (cond
+                         ((= family AF_INET) PF_INET)
+                         ((= family AF_INET6) PF_INET6)))
+         (sock (socket proto-family SOCK_STREAM 0)))
     (setsockopt sock SOL_SOCKET SO_REUSEADDR 1)
     (fcntl sock F_SETFD FD_CLOEXEC)
     (bind sock family addr port)
-- 
2.37.2


[-- Attachment #1.1.4: 0002-remote-worker-Add-listen-option-to-specify-worker-ad.patch --]
[-- Type: text/x-patch, Size: 7123 bytes --]

From d688a4bce88310ed4b3001c7b3a38c13e9eff891 Mon Sep 17 00:00:00 2001
From: Ryan Sundberg <ryan@arctype.co>
Date: Fri, 13 Jan 2023 23:42:21 -0800
Subject: [PATCH 2/4] remote-worker: Add `--listen` option to specify worker
 address

- Allows binding a worker (publish port) to a specific address. IPv4 and
IPv6 addresses are supported. The default remains to bind to INADDR_ANY.
- Supports connecting to servers using IPv6.

* src/cuirass/scripts/remote-worker.scm (cuirass-remote-worker): Add --listen option
(cuirass-remote-worker): Support IPv6 addresses for 0mq
(start-worker): Enable IPv6 in 0mq socket
* src/cuirass/remote.scm (send-log): Support IPv6 addresses for sending logs
---
 src/cuirass/remote.scm                | 51 ++++++++++++++-------------
 src/cuirass/scripts/remote-worker.scm | 33 +++++++++++++----
 2 files changed, 52 insertions(+), 32 deletions(-)

diff --git a/src/cuirass/remote.scm b/src/cuirass/remote.scm
index 6a3c788..44b342d 100644
--- a/src/cuirass/remote.scm
+++ b/src/cuirass/remote.scm
@@ -346,31 +346,32 @@ PRIVATE-KEY to sign narinfos."
     (const #f)))
 
 (define* (send-log address port derivation log)
-  (let* ((sock (socket AF_INET SOCK_STREAM 0))
-         (in-addr (inet-pton AF_INET address))
-         (addr (make-socket-address AF_INET in-addr port)))
-    (connect sock addr)
-    (match (select (list sock) '() '() 10)
-      (((_) () ())
-       (match (read sock)
-         (('log-server ('version version ...))
-          (let ((header `(log
-                          (version 0)
-                          (derivation ,derivation))))
-            (write header sock)
-            (swallow-zlib-error
-             (call-with-gzip-output-port sock
-               (lambda (sock-compressed)
-                 (dump-port log sock-compressed))))
-            (close-port sock)))
-         (x
-          (log-error "invalid handshake ~s." x)
-          (close-port sock)
-          #f)))
-      ((() () ())                                 ;timeout
-       (log-error "timeout while sending log")
-       (close-port sock)
-       #f))))
+  (let-values (((af pf addr) (parse-host-address address)))
+    (let* ((sock (socket pf SOCK_STREAM 0))
+           (in-addr (inet-pton af address))
+           (addr (make-socket-address af in-addr port)))
+      (connect sock addr)
+      (match (select (list sock) '() '() 10)
+        (((_) () ())
+         (match (read sock)
+           (('log-server ('version version ...))
+            (let ((header `(log
+                            (version 0)
+                            (derivation ,derivation))))
+              (write header sock)
+              (swallow-zlib-error
+               (call-with-gzip-output-port sock
+                 (lambda (sock-compressed)
+                   (dump-port log sock-compressed))))
+              (close-port sock)))
+           (x
+            (log-error "invalid handshake ~s." x)
+            (close-port sock)
+            #f)))
+        ((() () ())                                 ;timeout
+         (log-error "timeout while sending log")
+         (close-port sock)
+         #f)))))
 
 \f
 ;;;
diff --git a/src/cuirass/scripts/remote-worker.scm b/src/cuirass/scripts/remote-worker.scm
index 47418c4..9c4a40a 100644
--- a/src/cuirass/scripts/remote-worker.scm
+++ b/src/cuirass/scripts/remote-worker.scm
@@ -75,6 +75,8 @@
 (define (show-help)
   (format #t "Usage: ~a remote-worker [OPTION]...
 Start a remote build worker.\n" (%program-name))
+  (display (G_ "
+  -a  --listen=ADDRESS      bind publish port on ADDRESS"))
   (display (G_ "
   -w, --workers=COUNT       start COUNT parallel workers"))
   (display (G_ "
@@ -111,6 +113,9 @@ Start a remote build worker.\n" (%program-name))
         (option '(#\V "version") #f #f
                 (lambda _
                   (show-version-and-exit "guix publish")))
+        (option '(#\a "listen") #t #f
+                (lambda (opt name arg result)
+                  (alist-cons 'listen arg result)))
         (option '(#\w "workers") #t #f
                 (lambda (opt name arg result)
                   (alist-cons 'workers (string->number* arg) result)))
@@ -286,6 +291,7 @@ command.  REPLY is a procedure that can be used to reply to this server."
             (address (server-address server))
             (port (server-port server))
             (endpoint (zmq-backend-endpoint address port)))
+       (zmq-set-socket-option socket ZMQ_IPV6 1)
        (zmq-connect socket endpoint)
        (let loop ()
          (log-info (G_ "~a: ping ~a.") (worker-name worker) endpoint)
@@ -373,6 +379,7 @@ and executing them.  The worker can reply on the same socket."
                 (address (server-address serv))
                 (port (server-port serv))
                 (endpoint (zmq-backend-endpoint address port)))
+           (zmq-set-socket-option socket ZMQ_IPV6 1)
            (zmq-connect socket endpoint)
            (let* ((srv-info (read-server-info socket))
                   (server (server-info->server srv-info serv))
@@ -433,6 +440,22 @@ exiting."
 
         (exit 1)))))
 
+(define (parse-server address)
+  (match
+    (let ((opening-bracket (string-index address #\[)))
+      (if opening-bracket
+        ;; IPv6 [address]:port
+        (let ((closing-bracket (string-index address #\])))
+          (list
+            (substring address (+ opening-bracket 1) closing-bracket)
+            (substring address (+ closing-bracket 2))))
+        ;; IPv4 address:port or hostname:port
+        (string-split address #\:)))
+    ((address port)
+     (server
+       (address address)
+       (port (string->number port))))))
+
 (define (cuirass-remote-worker args)
   (signal-handler)
   (with-error-handling
@@ -442,6 +465,7 @@ exiting."
                              (lambda (arg result)
                                (leave (G_ "~A: extraneous argument~%") arg))
                              %default-options))
+           (listen (assoc-ref opts 'listen))
            (workers (assoc-ref opts 'workers))
            (publish-port (assoc-ref opts 'publish-port))
            (ttl (assoc-ref opts 'ttl))
@@ -465,7 +489,7 @@ exiting."
 
         (atomic-box-set!
          %publish-pid
-         (publish-server #f publish-port
+         (publish-server listen publish-port
                          #:public-key public-key
                          #:private-key private-key))
 
@@ -476,12 +500,7 @@ exiting."
                                (name (generate-worker-name))
                                (machine (gethostname))
                                (systems systems)))
-                      (addr (string-split server-address #\:))
-                      (server (match addr
-                                ((address port)
-                                 (server
-                                  (address address)
-                                  (port (string->number port)))))))
+                      (server (parse-server server-address)))
                  (add-to-worker-pids!
                   (start-worker worker server))))
              (iota workers))
-- 
2.37.2


[-- Attachment #1.1.5: 0001-remote-server-Add-listen-option-to-specify-server-ad.patch --]
[-- Type: text/x-patch, Size: 10868 bytes --]

From 5b022b5fd7a6252eba194f259370f8356bbffc75 Mon Sep 17 00:00:00 2001
From: Ryan Sundberg <ryan@arctype.co>
Date: Fri, 13 Jan 2023 21:44:57 -0800
Subject: [PATCH 1/4] remote-server: Add `--listen` option to specify server
 address

- Sets the host address to bind for backend worker (0mq) connections.
- Sets the host address to bind for receiving logs.
- Sets the host address to bind for the publish server.

Binding to IPv4 and IPv6 addresses is supported for all ports. Default
behavior remains to bind to 0.0.0.0 (INADDR_ANY).

* src/cuirass/scripts/remote-server.scm (cuirass-remote-server): Add --listen
* src/cuirass/remote.scm (receive-logs): Add host parameter
(publish-server): Add host paramter
* src/cuirass/scripts/remote-worker: (cuirass-remote-worker): Set publish host #f
---
 src/cuirass/remote.scm                | 82 +++++++++++++++------------
 src/cuirass/scripts/remote-server.scm | 28 ++++++---
 src/cuirass/scripts/remote-worker.scm |  2 +-
 3 files changed, 67 insertions(+), 45 deletions(-)

diff --git a/src/cuirass/remote.scm b/src/cuirass/remote.scm
index 3513a81..6a3c788 100644
--- a/src/cuirass/remote.scm
+++ b/src/cuirass/remote.scm
@@ -1,5 +1,6 @@
 ;;; remote.scm -- Build on remote machines.
 ;;; Copyright © 2020 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2023 Ryan Sundberg <ryan@arctype.co>
 ;;;
 ;;; This file is part of Cuirass.
 ;;;
@@ -222,11 +223,20 @@ properties."
                      #:verbosity 1
                      #:substitute-urls urls))
 
-(define* (publish-server port
+(define (parse-host-address host)
+  (cond
+    ((not host)
+     (values AF_INET PF_INET INADDR_ANY))
+    ((string-index host #\:)
+     (values AF_INET6 PF_INET6 (inet-pton AF_INET6 host)))
+    (else
+     (values AF_INET PF_INET (inet-pton AF_INET host)))))
+
+(define* (publish-server host port
                          #:key
                          public-key
                          private-key)
-  "This procedure starts a publishing server listening on PORT in a new
+  "This procedure starts a publishing server listening on HOST and PORT in a new
 process and returns the pid of the forked process.  Use PUBLIC-KEY and
 PRIVATE-KEY to sign narinfos."
   (match (primitive-fork)
@@ -244,15 +254,16 @@ PRIVATE-KEY to sign narinfos."
            ;; Use a default locale.
            (setlocale LC_ALL "en_US.utf8")
 
-           (let* ((address (make-socket-address AF_INET INADDR_ANY 0))
-                  (socket-address
-                   (make-socket-address (sockaddr:fam address)
-                                        (sockaddr:addr address)
-                                        port))
-                  (socket (open-server-socket socket-address)))
-             ;; Do not cache missing store items on workers.
-             (run-publish-server socket store
-                                 #:narinfo-negative-ttl 0))))))
+           (let-values (((af _pf addr) (parse-host-address host)))
+             (let* ((address (make-socket-address af addr 0))
+                    (socket-address
+                      (make-socket-address (sockaddr:fam address)
+                                           (sockaddr:addr address)
+                                           port))
+                    (socket (open-server-socket socket-address)))
+               ;; Do not cache missing store items on workers.
+               (run-publish-server socket store
+                                   #:narinfo-negative-ttl 0)))))))
     (pid pid)))
 
 \f
@@ -275,7 +286,7 @@ PRIVATE-KEY to sign narinfos."
                       (cut string-take store-hash <>))))
     (string-append cache "/" hash ".log.gz")))
 
-(define (receive-logs port cache)
+(define (receive-logs host port cache)
   (define (read-log port)
     (match (false-if-exception (read port))
       (('log ('version 0)
@@ -288,28 +299,29 @@ PRIVATE-KEY to sign narinfos."
        (log-error "invalid log received.")
        #f)))
 
-  (define (wait-for-client port proc)
-    (let ((sock (socket AF_INET SOCK_STREAM 0)))
-      (setsockopt sock SOL_SOCKET SO_REUSEADDR 1)
-      (bind sock AF_INET INADDR_ANY port)
-      (listen sock 1024)
-      (while #t
-        (match (select (list sock) '() '() 60)
-          (((_) () ())
-           (match (accept sock)
-             ((client . address)
-              (catch 'system-error
-                (lambda ()
-                  (write '(log-server (version 0)) client)
-                  (force-output client)
-                  (proc client))
-                (lambda args
-                  (let ((errno (system-error-errno args)))
-                    (when (memv errno (list EPIPE ECONNRESET ECONNABORTED))
-                      (log-error "~a when replying to ~a."
-                                 (strerror errno) (fileno client)))))))))
-          ((() () ())
-           #f)))))
+  (define (wait-for-client host port proc)
+    (let-values (((af pf addr) (parse-host-address host)))
+      (let ((sock (socket pf SOCK_STREAM 0)))
+        (setsockopt sock SOL_SOCKET SO_REUSEADDR 1)
+        (bind sock af addr port)
+        (listen sock 1024)
+        (while #t
+          (match (select (list sock) '() '() 60)
+            (((_) () ())
+             (match (accept sock)
+               ((client . address)
+                (catch 'system-error
+                  (lambda ()
+                    (write '(log-server (version 0)) client)
+                    (force-output client)
+                    (proc client))
+                  (lambda args
+                    (let ((errno (system-error-errno args)))
+                      (when (memv errno (list EPIPE ECONNRESET ECONNABORTED))
+                        (log-error "~a when replying to ~a."
+                                   (strerror errno) (fileno client)))))))))
+            ((() () ())
+             #f))))))
 
   (define (client-handler client)
     (call-with-new-thread
@@ -324,7 +336,7 @@ PRIVATE-KEY to sign narinfos."
   (call-with-new-thread
    (lambda ()
      (set-thread-name "log-server")
-     (wait-for-client port client-handler))))
+     (wait-for-client host port client-handler))))
 
 (define-syntax-rule (swallow-zlib-error exp ...)
   "Swallow 'zlib-error' exceptions raised by EXP..."
diff --git a/src/cuirass/scripts/remote-server.scm b/src/cuirass/scripts/remote-server.scm
index c168318..613512d 100644
--- a/src/cuirass/scripts/remote-server.scm
+++ b/src/cuirass/scripts/remote-server.scm
@@ -1,5 +1,6 @@
 ;;; remote-server.scm -- Remote build server.
 ;;; Copyright © 2020, 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2023 Ryan Sundberg <ryan@arctype.co>
 ;;;
 ;;; This file is part of Cuirass.
 ;;;
@@ -102,6 +103,8 @@
 (define (show-help)
   (format #t (G_ "Usage: ~a remote-server [OPTION]...
 Start a remote build server.\n") (%program-name))
+  (display (G_ "
+  -a  --listen=ADDRESS      listen worker connections on ADDRESS"))
   (display (G_ "
   -b, --backend-port=PORT   listen worker connections on PORT"))
   (display (G_ "
@@ -143,6 +146,9 @@ Start a remote build server.\n") (%program-name))
         (option '(#\V "version") #f #f
                 (lambda _
                   (show-version-and-exit "guix publish")))
+        (option '(#\a "listen") #t #f
+                (lambda (opt name arg result)
+                  (alist-cons 'listen arg result)))
         (option '(#\b "backend-port") #t #f
                 (lambda (opt name arg result)
                   (alist-cons 'backend-port (string->number* arg) result)))
@@ -445,12 +451,11 @@ socket."
 (define %zmq-context
   (zmq-create-context))
 
-(define (zmq-backend-endpoint backend-port)
-  "Return a ZMQ endpoint string allowing TCP connections on BACKEND-PORT from
-all network interfaces."
-  (string-append "tcp://*:" (number->string backend-port)))
+(define (zmq-backend-endpoint backend-host backend-port)
+  "Return a ZMQ endpoint string allowing TCP connections on BACKEND-PORT. When BACKEND-HOST is false, listen from all network interfaces."
+  (string-append "tcp://" (or backend-host "*") ":" (number->string backend-port)))
 
-(define (zmq-start-proxy backend-port)
+(define (zmq-start-proxy backend-host backend-port)
   "This procedure starts a proxy between client connections from the IPC
 frontend to the workers connected through the TCP backend."
   (define (socket-ready? items socket)
@@ -473,7 +478,11 @@ frontend to the workers connected through the TCP backend."
     ;; that were hanging waiting for request-work responses.
     (zmq-set-socket-option build-socket ZMQ_PROBE_ROUTER 1)
 
-    (zmq-bind-socket build-socket (zmq-backend-endpoint backend-port))
+    ;; Enable ZMQ_IPV6 when backend-host is an ipv6 address
+    (when (and backend-host (string-index backend-host #\:))
+      (zmq-set-socket-option build-socket ZMQ_IPV6 1))
+
+    (zmq-bind-socket build-socket (zmq-backend-endpoint backend-host backend-port))
     (zmq-bind-socket fetch-socket (zmq-fetch-workers-endpoint))
 
     ;; Do not use the built-in zmq-proxy as we want to edit the envelope of
@@ -569,6 +578,7 @@ exiting."
                              (lambda (arg result)
                                (leave (G_ "~A: extraneous argument~%") arg))
                              %default-options))
+           (listen (assoc-ref opts 'listen))
            (backend-port (assoc-ref opts 'backend-port))
            (log-port (assoc-ref opts 'log-port))
            (no-publish (assoc-ref opts 'no-publish))
@@ -633,7 +643,7 @@ exiting."
         (unless no-publish
           (atomic-box-set!
            %publish-pid
-           (publish-server publish-port
+           (publish-server listen publish-port
                            #:public-key public-key
                            #:private-key private-key)))
 
@@ -652,7 +662,7 @@ exiting."
                                            (number->string publish-port)))
                       '()))))
 
-        (receive-logs log-port (%cache-directory))
+        (receive-logs listen log-port (%cache-directory))
 
         (with-database
             (start-notification-thread)
@@ -663,4 +673,4 @@ exiting."
                                         (number->string number))))
                       (iota (%fetch-workers)))
 
-            (zmq-start-proxy backend-port))))))
+            (zmq-start-proxy listen backend-port))))))
diff --git a/src/cuirass/scripts/remote-worker.scm b/src/cuirass/scripts/remote-worker.scm
index 1c47950..47418c4 100644
--- a/src/cuirass/scripts/remote-worker.scm
+++ b/src/cuirass/scripts/remote-worker.scm
@@ -465,7 +465,7 @@ exiting."
 
         (atomic-box-set!
          %publish-pid
-         (publish-server publish-port
+         (publish-server #f publish-port
                          #:public-key public-key
                          #:private-key private-key))
 
-- 
2.37.2


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Cuirass: Complete IPv6 support
  2023-03-01  8:34 [PATCH] Cuirass: Complete IPv6 support Ryan Sundberg
@ 2023-03-04  1:30 ` Leo Famulari
  2023-03-04  8:12   ` Christopher Baines
  0 siblings, 1 reply; 4+ messages in thread
From: Leo Famulari @ 2023-03-04  1:30 UTC (permalink / raw)
  To: Ryan Sundberg; +Cc: guix-devel

On Wed, Mar 01, 2023 at 12:34:08AM -0800, Ryan Sundberg wrote:
> Hello Guix hackers,
> 
> I have implemented IPv6 support for Cuirass in the attached patchset.
> This has been tested on a multi-node cluster running Cuirass over IPv6
> with some real builds. It should maintain full backwards compatibility
> with the default IPv4, only enabling IPv6 when given the arguments to
> bind to IPv6 addresses. See the commit log for full details!

Thanks, this is great! Can you send the patches to
<guix-patches@gnu.org>, so that we can use qa.guix.gnu.org for testing?

To send a multi-patch series, you'll need to first send an introductory
message to <guix-patches@gnu.org>, and then send the patches to the
special ticket-number email address that it gives you in response.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Cuirass: Complete IPv6 support
  2023-03-04  1:30 ` Leo Famulari
@ 2023-03-04  8:12   ` Christopher Baines
  2023-03-04 15:59     ` Leo Famulari
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher Baines @ 2023-03-04  8:12 UTC (permalink / raw)
  To: Leo Famulari; +Cc: Ryan Sundberg, guix-devel

[-- Attachment #1: Type: text/plain, Size: 764 bytes --]


Leo Famulari <leo@famulari.name> writes:

> On Wed, Mar 01, 2023 at 12:34:08AM -0800, Ryan Sundberg wrote:
>> Hello Guix hackers,
>> 
>> I have implemented IPv6 support for Cuirass in the attached patchset.
>> This has been tested on a multi-node cluster running Cuirass over IPv6
>> with some real builds. It should maintain full backwards compatibility
>> with the default IPv4, only enabling IPv6 when given the arguments to
>> bind to IPv6 addresses. See the commit log for full details!
>
> Thanks, this is great! Can you send the patches to
> <guix-patches@gnu.org>, so that we can use qa.guix.gnu.org for testing?

Note that these are patches for cuirass rather than guix, which
qa.guix.gnu.org doesn't currently support applying/testing.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 987 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Cuirass: Complete IPv6 support
  2023-03-04  8:12   ` Christopher Baines
@ 2023-03-04 15:59     ` Leo Famulari
  0 siblings, 0 replies; 4+ messages in thread
From: Leo Famulari @ 2023-03-04 15:59 UTC (permalink / raw)
  To: Christopher Baines
  Cc: Ryan Sundberg,
	Christopher Baines via Development of GNU Guix and the GNU System distribution.

On Sat, Mar 4, 2023, at 03:12, Christopher Baines wrote:
> Leo Famulari <leo@famulari.name> writes:
>
>> On Wed, Mar 01, 2023 at 12:34:08AM -0800, Ryan Sundberg wrote:
>>> Hello Guix hackers,
>>> 
>>> I have implemented IPv6 support for Cuirass in the attached patchset.
>>> This has been tested on a multi-node cluster running Cuirass over IPv6
>>> with some real builds. It should maintain full backwards compatibility
>>> with the default IPv4, only enabling IPv6 when given the arguments to
>>> bind to IPv6 addresses. See the commit log for full details!
>>
>> Thanks, this is great! Can you send the patches to
>> <guix-patches@gnu.org>, so that we can use qa.guix.gnu.org for testing?
>
> Note that these are patches for cuirass rather than guix, which
> qa.guix.gnu.org doesn't currently support applying/testing.

Oh right! Well, who shall review? :)


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-03-04 16:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-01  8:34 [PATCH] Cuirass: Complete IPv6 support Ryan Sundberg
2023-03-04  1:30 ` Leo Famulari
2023-03-04  8:12   ` Christopher Baines
2023-03-04 15:59     ` Leo Famulari

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).