Subject: [bug#76001] [PATCH v2] gnu: Add jool.

From: Ashish SHUKLA <[email-masked]>
Date: Fri, 14 Feb 2025 00:49:00 +0100

* gnu/packages/networking.scm (jool): Add jool.

Change-Id: Ic517fc8c4afbb964363ec68b3d89ce9fcd00c7d8
---
 gnu/packages/networking.scm | 72 +++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 8ae7f84015..f51266c764 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -66,6 +66,7 @@
 ;;; Copyright © 2024 Alexey Abramov <[email-masked]>
 ;;; Copyright © 2024 James Smith <[email-masked]>
 ;;; Copyright © 2025 Sughosha <[email-masked]>
+;;; Copyright © 2025 Ashish SHUKLA <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,6 +93,7 @@ (define-module (gnu packages networking)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system linux-module)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -5059,6 +5061,76 @@ (define-public dnstracer
 back to the servers which know the data.")
     (license license:bsd-2)))
 
+(define-public jool
+  (package
+    (name "jool")
+    (version "4.1.13")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/NICMx/Jool")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rz8pqn692y61rv33hvr18ngjjyha0m14m4w4yr82xp3km5kfnsj"))))
+    (build-system linux-module-build-system)
+    (outputs '("out" "module"))
+    (native-inputs (list automake autoconf libtool pkg-config))
+    (inputs (list libnl iptables))
+    (arguments
+     (list
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'build
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((modules-dir
+                     (string-append
+                      (assoc-ref inputs "linux-module-builder") "/lib/modules")))
+                (invoke "make" "-C" "src/mod"
+                        (string-append "MODULES_DIR=" modules-dir))
+                (invoke "make"))))
+
+          (add-after 'configure 'really-configure
+            (lambda _
+              (setenv "CONFIG_SHELL" (which "sh"))
+              (setenv "CC" #$(cc-for-target))
+              (invoke "./configure"
+                      (string-append "--prefix=" #$output))))
+
+          (add-after 'unpack 'patch-Makefiles
+            (lambda _
+              (substitute* "src/mod/Makefile"
+                (("/sbin/depmod")
+                 "true"))
+              (substitute* "src/usr/iptables/Makefile"
+                (("^XTABLES_SO_DIR =.*$")
+                 (string-append "XTABLES_SO_DIR = " #$output "/lib/xtables")))))
+
+          (replace 'install
+            (lambda* (#:key inputs parallel-build? make-flags
+                      #:allow-other-keys)
+              (let ((modules-dir
+                     (string-append (assoc-ref inputs "linux-module-builder")
+                                    "/lib/modules"))
+                    (module-dir (string-append
+                                 #$output:module
+                                 "/lib/modules")))
+                (invoke "make" "install")
+                (invoke "make" "-C" "src/mod" "modules_install"
+                        "DEPMOD=true"
+                        "INSTALL_MOD_STRIP=1"
+                        (string-append "MODULES_DIR=" modules-dir)
+                        (string-append "MODULE_DIR=" module-dir)
+                        (string-append "INSTALL_PATH=" module-dir)
+                        (string-append "INSTALL_MOD_PATH=" module-dir))))))))
+    (home-page "https://nicmx.github.io/Jool/")
+    (synopsis "SIIT and NAT64 implementation for Linux")
+    (description "Jool implements SIIT and NAT64 for Linux.  It provides a kernel module,
+iptables (and netfilter) extensions, and CLI utilities.")
+    (license license:gpl2+)))
+
 (define-public dropwatch
   (package
     (name "dropwatch")

base-commit: 87dd002575fb5090649e56a3a2d10b86b1773c74
-- 
2.48.1