Subject: [PATCH] gnu: Add hping.

From: Marius Bakke <[email-masked]>
Date: Tue, 24 Oct 2017 08:06:36 +0200

* gnu/packages/networking.scm (hping): New public variable.
---
 gnu/packages/networking.scm | 67 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index a6c104297..4c1771459 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2017 Rutger Helling <[email-masked]>
 ;;; Copyright © 2017 Gábor Boskovits <[email-masked]>
 ;;; Copyright © 2017 Thomas Danckaert <[email-masked]>
+;;; Copyright © 2017 Marius Bakke <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +39,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
@@ -75,6 +77,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
@@ -563,6 +566,70 @@ send out a ping packet and move on to the next target in a round-robin
 fashion.")
     (license license:expat)))
 
+(define-public hping
+  (let ((commit "3547c7691742c6eaa31f8402e0ccbb81387c1b99")
+        (revision "0"))
+    (package
+      (name "hping")
+      (version (string-append "3.0.0-" revision "-" (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/antirez/hping")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0y0n1ybij3yg9lfgzcwfmjz1sjg913zcqrv391xx83dm0j80sdpb"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'configure 'prepare-build
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((tcl (assoc-ref inputs "tcl")))
+                 ;; Search for bpf.h in the right place.
+                 (substitute* '("libpcap_stuff.c" "script.c")
+                   (("<net/bpf\\.h>") "<pcap/bpf.h>"))
+                 ;; Likewise for TCL.
+                 (substitute* "configure"
+                   (("/usr/include/tcl.h")
+                    (string-append tcl "/include/tcl.h"))
+                   (("ls -1 /usr/local/lib")
+                    (string-append "ls -1 " tcl "/lib")))
+                 ;; Required environment variables.
+                 (setenv "CC" "gcc")
+                 (setenv "TCLSH" (which "tclsh"))
+                 #t)))
+           (add-before 'install 'pre-install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (sbin (string-append out "/sbin"))
+                      (man (string-append out "/share/man")))
+                 (mkdir-p sbin)
+                 (mkdir-p (string-append man "/man8"))
+                 (substitute* "Makefile"
+                   (("/usr/sbin") sbin)
+                   (("\\$\\{INSTALL_MANPATH\\}") man))
+                 ;; Fix references to wrong executable name.
+                 (substitute* "docs/hping3.8"
+                   (("hping2") "hping3")
+                   (("HPING2") "HPING3"))
+                 #t))))
+         #:tests? #f))                  ;no tests
+      (inputs
+       `(("libpcap" ,libpcap)
+         ("tcl" ,tcl)))
+      (home-page "http://www.hping.org/")
+      (synopsis "Network testing tool")
+      (description
+       "hping is a command-line oriented TCP/IP packet assembler/analyzer.
+The interface is inspired by the @command{ping(8)} command, but hping isn't
+only able to send ICMP echo requests.  It supports TCP, UDP, ICMP and RAW-IP
+protocols, has a traceroute mode, the ability to send files between a covered
+channel, and many other features.")
+      (license license:gpl2))))         ;strlcpy.c is BSD-3
+
 (define-public httping
   (package
     (name "httping")
-- 
2.14.3