just skimmed through it quickly;

- is AUTORECONF needed or is the default ok?

- if ${COMPILER_LIBCXX} is used you should set COMPILER, usually with
base-clang ports-gcc, or maybe base-clang ports-gcc base-gcc (base-gcc
is only used for m88k). key thing being that archs which have gcc 4 in
base generally need ports-gcc for building C++ software in ports so
that we only use a single libstdc++ across the tree (otherwise there
are conflicts)

- probably worth doing a test build with "COMPILER=ports-gcc" to
make that it doesn't need any changes to build with ports g++ (sometimes
we need to set -std)

- license is now GPLv3

On 2024/06/05 16:53, Kirill A. Korinsky wrote:
> ports@,
> 
> Here an update for net/tcpflow to the last version. It was quite outdated,
> version 0.21 was released in 2003!
> 
> So, it required some work to migrate existed patches, and fix build.
> 
> Some patches I was made a while ago and it was already merged by upstream,
> but some of them is new and I'll send it soon.
> 
> Anyway, it works and was tested on -current/amd64.
> 
> Thus, I also would like to take care of this port.
> 
> diff --git net/tcpflow/Makefile net/tcpflow/Makefile
> index 9601500d65f..56c427c3062 100644
> --- net/tcpflow/Makefile
> +++ net/tcpflow/Makefile
> @@ -1,17 +1,30 @@
> -COMMENT=     tool for capturing data from TCP connections
> +COMMENT=             tool for capturing data from TCP connections
>  
> -DISTNAME=    tcpflow-0.21
> -REVISION=    2
> -CATEGORIES=  net
> -SITES=               http://www.circlemud.org/pub/jelson/tcpflow/
> +V=                   1.6.1
> +DISTNAME=            tcpflow-${V}
> +CATEGORIES=          net
>  
> -HOMEPAGE=       http://www.circlemud.org/~jelson/software/tcpflow/
> +SITES=                       
> https://github.com/simsong/tcpflow/releases/download/tcpflow-${V}/
> +
> +HOMEPAGE=            https://github.com/simsong/tcpflow
> +
> +MAINTAINER=          Kirill A. Korinsky <kir...@korins.ky>
>  
>  # GPLv2
> -PERMIT_PACKAGE=      Yes
> +PERMIT_PACKAGE=              Yes
> +
> +WANTLIB += ${COMPILER_LIBCXX} c crypto m pcap sqlite3 ssl z
> +
> +LIB_DEPENDS=         databases/sqlite3
> +
> +# a test for cairo has a side effect which brokes pcap test
> +# when it can't find cairo, so, disable it.
> +CONFIGURE_ARGS=              --enable-cairo=false
>  
> -WANTLIB=             c pcap 
> +AUTOCONF_VERSION=    2.71
> +AUTOMAKE_VERSION=    1.16
> +AUTORECONF=          autoreconf -i
>  
> -CONFIGURE_STYLE=        gnu
> +CONFIGURE_STYLE=     autoreconf
>  
>  .include <bsd.port.mk>
> diff --git net/tcpflow/distinfo net/tcpflow/distinfo
> index 50bb3b39178..9a4e2edfe75 100644
> --- net/tcpflow/distinfo
> +++ net/tcpflow/distinfo
> @@ -1,2 +1,2 @@
> -SHA256 (tcpflow-0.21.tar.gz) = FpKL2XIcDeaFtmNl0yC81SqXpO3w4Qh2VK2Ns3nRlGk=
> -SIZE (tcpflow-0.21.tar.gz) = 79369
> +SHA256 (tcpflow-1.6.1.tar.gz) = Q2+TsRQb4Kvlk3EJRzB9j5ESmlNTw6jDwp4roDVeFx4=
> +SIZE (tcpflow-1.6.1.tar.gz) = 450511
> diff --git net/tcpflow/patches/patch-configure_ac 
> net/tcpflow/patches/patch-configure_ac
> new file mode 100644
> index 00000000000..a9e99810a6d
> --- /dev/null
> +++ net/tcpflow/patches/patch-configure_ac
> @@ -0,0 +1,40 @@
> +Index: configure.ac
> +--- configure.ac.orig
> ++++ configure.ac
> +@@ -490,36 +490,6 @@ AC_CHECK_TYPES([sa_family_t], [], [],
> + ]]
> + )
> + 
> +-################################################################
> +-# Plugin scan_python.cpp requires header "Python.h"
> +-# If the header is not present => Disable the source code of the plugin
> +-#
> +-AC_CHECK_HEADERS(python2.7/Python.h)  # ==> #define HAVE_PYTHON2_7_PYTHON_H
> +-AC_CHECK_LIB(python2.7,Py_Initialize,,[
> +-  AC_MSG_WARN([
> +-*** Cannot find python library.
> +-*** Please install python-devel to enable scanner python.
> +-  ])
> +-  Fmissing_library="$Fmissing_library python-devel "      # Validated on 
> Fedora 25
> +-  Umissing_library="$Umissing_library libpython2.7-dev"   # Should be OK: 
> https://packages.ubuntu.com/yakkety/libpython2.7-dev
> +-  Mmissing_library="$Mmissing_library python27"           # Not sure: 
> https://github.com/macports/macports-ports/blob/master/lang/python27/Portfile
> +-])
> +-
> +-################################################################
> +-# Plugin scanner_python.cpp requires header "Python.h"
> +-# If the header is not present => Disable the source code of the plugin
> +-#
> +-AC_CHECK_HEADERS(python2.7/Python.h)  # ==> #define HAVE_PYTHON2_7_PYTHON_H
> +-AC_CHECK_LIB(python2.7,Py_Initialize,,[
> +-  AC_MSG_WARN([
> +-*** Cannot find python library.
> +-*** Please install python-devel to enable scanner python.
> +-  ])
> +-  Fmissing_library="$Fmissing_library python-devel "      # Validated on 
> Fedora 25
> +-  Umissing_library="$Umissing_library libpython2.7-dev"   # Should be OK: 
> https://packages.ubuntu.com/yakkety/libpython2.7-dev
> +-  Mmissing_library="$Mmissing_library python27"           # Not sure: 
> https://github.com/macports/macports-ports/blob/master/lang/python27/Portfile
> +-])
> +-
> + ############## drop optimization flags if requested ################
> + 
> + # Should we disable optimization?
> diff --git net/tcpflow/patches/patch-doc_tcpflow_1_in 
> net/tcpflow/patches/patch-doc_tcpflow_1_in
> index 03a6daf0bb4..f7e4f8edb3c 100644
> --- net/tcpflow/patches/patch-doc_tcpflow_1_in
> +++ net/tcpflow/patches/patch-doc_tcpflow_1_in
> @@ -1,35 +1,27 @@
> ---- doc/tcpflow.1.in.orig    Mon Feb 26 15:01:30 2001
> -+++ doc/tcpflow.1.in Mon Aug 11 11:07:02 2003
> -@@ -32,7 +32,7 @@ tcpflow \- TCP flow recorder 
> - is a program that captures data transmitted as part of TCP connections
> - (flows), and stores the data in a way that is convenient for protocol
> - analysis or debugging.  A program like
> --.IR tcpdump(4)
> -+.IR tcpdump(8)
> - shows a summary of packets seen on the wire, but usually doesn't store
> - the data that's actually being transmitted.  In contrast, tcpflow
> - reconstructs the actual data streams and stores each flow in a
> -@@ -109,7 +109,7 @@ already be in promiscuous mode for some 
> +Index: doc/tcpflow.1.in
> +--- doc/tcpflow.1.in.orig
> ++++ doc/tcpflow.1.in
> +@@ -377,7 +377,7 @@ as the root privileges are dropped after opening the f
> + .B \-l \fIroot-only*.pcap\fP\c
> + ).
> + This option has the same behaviour as the
> +-.IR tcpdump (1)
> ++.IR tcpdump (8)
> + option having the same name
> + .B \--relinquish-privileges\fB
> + .
> +@@ -386,7 +386,7 @@ option having the same name
>   Read from file.  Read packets from \fIfile\fP, which was created using the
>   .B \-w
>   option of
>  -.IR tcpdump (1).
>  +.IR tcpdump (8).
> - Standard input is used if \fIfile\fP is ``-''.
> + This option may be repeated any number of times. Standard input is used if 
> \fIfile\fP is "-".
>   Note that for this option to be useful, tcpdump's
>   .B \-s
> -@@ -132,7 +132,7 @@ The
> - specified on the command-line specifies which packets should be
> - captured.  Because tcpflow uses the the libpcap library, tcpflow has
> - the same powerful filtering language available as programs such as
> --.IR tcpdump (1).
> -+.IR tcpdump (8).
> - .LP
> - .B The following part of the man page is excerpted from the tcpdump man 
> page.
> - .LP
> -@@ -539,4 +539,4 @@ The current version of this software is 
> - .I http://www.circlemud.org/~jelson/software/tcpflow
> +@@ -642,4 +642,4 @@ An announcement mailing list for this program is at:
> + .I http://groups.google.com/group/tcpflow-users
>   .RE
>   .SH "SEE ALSO"
> --tcpdump(1), nit(4P), bpf(4), pcap(3)
> -+tcpdump(8), nit(4P), bpf(4), pcap(3)
> +-tcpdump(1), nit(4P), bpf(4), pcap(3), pcap-savefile(5), pcap-filter(7)
> ++tcpdump(8), nit(4P), bpf(4), pcap(3), pcap-savefile(5), pcap-filter(7)
> diff --git net/tcpflow/patches/patch-src_be13_api_bulk_extractor_i_h 
> net/tcpflow/patches/patch-src_be13_api_bulk_extractor_i_h
> new file mode 100644
> index 00000000000..da2b95d3922
> --- /dev/null
> +++ net/tcpflow/patches/patch-src_be13_api_bulk_extractor_i_h
> @@ -0,0 +1,24 @@
> +Index: src/be13_api/bulk_extractor_i.h
> +--- src/be13_api/bulk_extractor_i.h.orig
> ++++ src/be13_api/bulk_extractor_i.h
> +@@ -296,6 +296,8 @@ namespace be13 {
> +  *
> +  */
> + class packet_info {
> ++private:
> ++    struct timeval _ts;
> + public:
> +     // IPv4 header offsets
> +     static const size_t ip4_proto_off = 9;
> +@@ -325,7 +327,10 @@ class packet_info { (public)
> +                 const struct timeval &ts_,const uint8_t *d2,size_t dl2):
> +         
> pcap_dlt(dlt),pcap_hdr(h),pcap_data(d),ts(ts_),ip_data(d2),ip_datalen(dl2){}
> +     packet_info(const int dlt,const struct pcap_pkthdr *h,const u_char *d):
> +-        
> pcap_dlt(dlt),pcap_hdr(h),pcap_data(d),ts(h->ts),ip_data(d),ip_datalen(h->caplen){}
> ++        
> pcap_dlt(dlt),pcap_hdr(h),pcap_data(d),ts(_ts),ip_data(d),ip_datalen(h->caplen){
> ++        _ts.tv_sec  = h->ts.tv_sec;
> ++        _ts.tv_usec = h->ts.tv_usec;
> ++    }
> + 
> +     const int    pcap_dlt;              // data link type; needed by 
> libpcap, not provided
> +     const struct pcap_pkthdr *pcap_hdr; // provided by libpcap
> diff --git net/tcpflow/patches/patch-src_datalink_c 
> net/tcpflow/patches/patch-src_datalink_c
> deleted file mode 100644
> index 179d986ed47..00000000000
> --- net/tcpflow/patches/patch-src_datalink_c
> +++ /dev/null
> @@ -1,39 +0,0 @@
> ---- src/datalink.c.orig      Fri Mar 29 23:19:03 2002
> -+++ src/datalink.c   Wed May 13 10:41:44 2009
> -@@ -137,7 +137,26 @@ void dl_ppp(u_char *user, const struct pcap_pkthdr *h,
> -   process_ip(p + PPP_HDRLEN, caplen - PPP_HDRLEN);
> - }
> - 
> -+#define     PPP_ETHER_HDRLEN 8
> - 
> -+void dl_ppp_ether(u_char *user, const struct pcap_pkthdr *h, const u_char 
> *p)
> -+{
> -+  u_int caplen = h->caplen;
> -+  u_int length = h->len;
> -+
> -+  if (length != caplen) {
> -+    DEBUG(6) ("warning: only captured %d bytes of %d byte PPPoE frame",
> -+      caplen, length);
> -+  }
> -+
> -+  if (caplen < PPP_ETHER_HDRLEN) {
> -+    DEBUG(6) ("warning: received incomplete PPP frame");
> -+    return;
> -+  }
> -+
> -+  process_ip(p + PPP_ETHER_HDRLEN, caplen - PPP_ETHER_HDRLEN);
> -+}
> -+
> - /* DLT_RAW: just a raw IP packet, no encapsulation or link-layer
> -  * headers.  Used for PPP connections under some OSs including Linux
> -  * and IRIX. */
> -@@ -188,7 +207,9 @@ pcap_handler find_handler(int datalink_type, char *dev
> - #endif
> -     { dl_ethernet, DLT_EN10MB },
> -     { dl_ethernet, DLT_IEEE802 },
> -+    { dl_null, DLT_LOOP },
> -     { dl_ppp, DLT_PPP },
> -+    { dl_ppp_ether, DLT_PPP_ETHER },
> - #ifdef DLT_LINUX_SLL
> -     { dl_linux_sll, DLT_LINUX_SLL },
> - #endif
> diff --git net/tcpflow/patches/patch-src_datalink_cpp 
> net/tcpflow/patches/patch-src_datalink_cpp
> new file mode 100644
> index 00000000000..ba83ecee414
> --- /dev/null
> +++ net/tcpflow/patches/patch-src_datalink_cpp
> @@ -0,0 +1,52 @@
> +Index: src/datalink.cpp
> +--- src/datalink.cpp.orig
> ++++ src/datalink.cpp
> +@@ -71,6 +71,29 @@ void dl_null(u_char *user, const struct pcap_pkthdr *h
> + #pragma GCC diagnostic warning "-Wcast-align"
> + 
> + static uint64_t counter=0;
> ++
> ++#define     PPP_ETHER_HDRLEN 8
> ++
> ++void dl_ppp_ether(u_char *user, const struct pcap_pkthdr *h, const u_char 
> *p)
> ++{
> ++  u_int caplen = h->caplen;
> ++  u_int length = h->len;
> ++
> ++  if (length != caplen) {
> ++    DEBUG(6) ("warning: only captured %d bytes of %d byte PPPoE frame",
> ++      caplen, length);
> ++  }
> ++
> ++  if (caplen < PPP_ETHER_HDRLEN) {
> ++    DEBUG(6) ("warning: received incomplete PPP frame");
> ++    return;
> ++  }
> ++
> ++  struct timeval tv;
> ++  be13::packet_info 
> pi(DLT_PPP_ETHER,h,p,tvshift(tv,h->ts),p+PPP_ETHER_HDRLEN,caplen - 
> PPP_ETHER_HDRLEN);
> ++  be13::plugin::process_packet(pi);
> ++}
> ++
> + /* DLT_RAW: just a raw IP packet, no encapsulation or link-layer
> +  * headers.  Used for PPP connections under some OSs including Linux
> +  * and IRIX. */
> +@@ -278,14 +301,18 @@ dlt_handler_t handlers[] = {
> +     { dl_raw,     101 },
> +     { dl_ethernet, DLT_EN10MB },
> +     { dl_ethernet, DLT_IEEE802 },
> ++    { dl_null,          DLT_LOOP },
> +     { dl_ppp,           DLT_PPP },
> ++    { dl_ppp_ether,     DLT_PPP_ETHER },
> + #ifdef DLT_LINUX_SLL
> +     { dl_linux_sll,        DLT_LINUX_SLL },
> + #endif
> + #if defined(USE_WIFI) && !defined(WIN32)
> +     { dl_ieee802_11_radio, DLT_IEEE802_11 },
> +     { dl_ieee802_11_radio, DLT_IEEE802_11_RADIO },
> ++#ifdef DLT_PRISM_HEADER
> +     { dl_prism,            DLT_PRISM_HEADER},
> ++#endif
> + #endif
> +     { NULL, 0 }
> + };
> diff --git net/tcpflow/patches/patch-src_main_c 
> net/tcpflow/patches/patch-src_main_c
> deleted file mode 100644
> index 9da5db91740..00000000000
> --- net/tcpflow/patches/patch-src_main_c
> +++ /dev/null
> @@ -1,11 +0,0 @@
> ---- src/main.c.orig  Thu Aug  7 00:35:24 2003
> -+++ src/main.c       Mon Aug 11 11:04:03 2003
> -@@ -80,7 +80,7 @@ void print_usage(char *progname)
> -   fprintf(stderr, "%s version %s by Jeremy Elson 
> <jel...@circlemud.org>\n\n",
> -              PACKAGE, VERSION);
> -   fprintf(stderr, "usage: %s [-chpsv] [-b max_bytes] [-d debug_level] [-f 
> max_fds]\n", progname);
> --  fprintf(stderr, "          [-i iface] [-w file] [expression]\n\n");
> -+  fprintf(stderr, "          [-i iface] [-r file] [expression]\n\n");
> -   fprintf(stderr, "        -b: max number of bytes per flow to save\n");
> -   fprintf(stderr, "        -c: console print only (don't create files)\n");
> -   fprintf(stderr, "        -d: debug level; default is %d\n", 
> DEFAULT_DEBUG_LEVEL);
> diff --git net/tcpflow/patches/patch-src_tcpflow_h 
> net/tcpflow/patches/patch-src_tcpflow_h
> new file mode 100644
> index 00000000000..1b34fa11c67
> --- /dev/null
> +++ net/tcpflow/patches/patch-src_tcpflow_h
> @@ -0,0 +1,16 @@
> +Index: src/tcpflow.h
> +--- src/tcpflow.h.orig
> ++++ src/tcpflow.h
> +@@ -297,6 +297,12 @@ inline const timeval &tvshift(struct timeval &tv,const
> +     return tv;
> + }
> + 
> ++inline const timeval &tvshift(struct timeval &tv,const struct bpf_timeval 
> &tv_)
> ++{
> ++    tv.tv_sec  = tv_.tv_sec + datalink_tdelta;
> ++    tv.tv_usec = tv_.tv_usec;
> ++    return tv;
> ++}
> + 
> + 
> + /* util.cpp - utility functions */
> diff --git net/tcpflow/patches/patch-src_util_c 
> net/tcpflow/patches/patch-src_util_c
> deleted file mode 100644
> index da879c9f539..00000000000
> --- net/tcpflow/patches/patch-src_util_c
> +++ /dev/null
> @@ -1,20 +0,0 @@
> ---- src/util.c.orig  Wed Aug  8 12:39:40 2001
> -+++ src/util.c       Mon Aug 11 11:06:15 2003
> -@@ -65,7 +65,7 @@ void *check_malloc(size_t size)
> - void init_debug(char *argv[])
> - {
> -   debug_prefix = MALLOC(char, strlen(argv[0]) + 16);
> --  sprintf(debug_prefix, "%s[%d]", argv[0], (int) getpid());
> -+  snprintf(debug_prefix, (strlen(argv[0]) +16), "%s[%d]", argv[0], (int) 
> getpid());
> - }
> - 
> - 
> -@@ -144,7 +144,7 @@ char *flow_filename(flow_t flow)
> - 
> -   ring_pos = (ring_pos + 1) % RING_SIZE;
> - 
> --  sprintf(ring_buffer[ring_pos],
> -+  snprintf(ring_buffer[ring_pos], sizeof(ring_buffer[ring_pos]),
> -       "%03d.%03d.%03d.%03d.%05d-%03d.%03d.%03d.%03d.%05d",
> -       (u_int8_t) ((flow.src & 0xff000000) >> 24),
> -       (u_int8_t) ((flow.src & 0x00ff0000) >> 16),
> diff --git net/tcpflow/patches/patch-src_wifipcap_wifipcap_cpp 
> net/tcpflow/patches/patch-src_wifipcap_wifipcap_cpp
> new file mode 100644
> index 00000000000..ec2b1f9fb48
> --- /dev/null
> +++ net/tcpflow/patches/patch-src_wifipcap_wifipcap_cpp
> @@ -0,0 +1,51 @@
> +Index: src/wifipcap/wifipcap.cpp
> +--- src/wifipcap/wifipcap.cpp.orig
> ++++ src/wifipcap/wifipcap.cpp
> +@@ -1668,7 +1668,11 @@ void Wifipcap::Init(const char *name, bool live) {
> +     }
> + 
> +     datalink = pcap_datalink(descr);
> +-    if (datalink != DLT_PRISM_HEADER && datalink != DLT_IEEE802_11_RADIO && 
> datalink != DLT_IEEE802_11) {
> ++    if (
> ++#ifdef DLT_PRISM_HEADER
> ++        datalink != DLT_PRISM_HEADER &&
> ++#endif
> ++        datalink != DLT_IEEE802_11_RADIO && datalink != DLT_IEEE802_11) {
> +     if (datalink == DLT_EN10MB) {
> +         printf("warning: ethernet datalink type: %s\n",
> +                pcap_datalink_val_to_name(datalink));
> +@@ -1692,8 +1696,10 @@ void Wifipcap::handle_packet(WifipcapCallbacks *cbs,in
> + {
> +     /* Record start time if we don't have it */
> +     if (startTime == TIME_NONE) {
> +-    startTime = header->ts;
> +-    lastPrintTime = header->ts;
> ++    startTime.tv_sec = header->ts.tv_sec;
> ++    startTime.tv_usec = header->ts.tv_usec;
> ++    lastPrintTime.tv_sec = header->ts.tv_sec;
> ++    lastPrintTime.tv_usec = header->ts.tv_usec;
> +     }
> +     /* Print stats if necessary */
> +     if (header->ts.tv_sec > lastPrintTime.tv_sec + 
> Wifipcap::PRINT_TIME_INTERVAL) {
> +@@ -1704,7 +1710,8 @@ void Wifipcap::handle_packet(WifipcapCallbacks *cbs,in
> +         fprintf(stderr, "wifipcap: %2d days %2d hours, %10" PRId64 " 
> pkts\n", 
> +                 days, left, packetsProcessed);
> +     }
> +-    lastPrintTime = header->ts;
> ++    lastPrintTime.tv_sec = header->ts.tv_sec;
> ++    lastPrintTime.tv_usec = header->ts.tv_usec;
> +     }
> +     packetsProcessed++;
> + 
> +@@ -1715,9 +1722,11 @@ void Wifipcap::handle_packet(WifipcapCallbacks *cbs,in
> +     cbs->PacketBegin(pkt, packet, header->caplen, header->len);
> +     //int frameLen = header->caplen;
> +     switch(header_type) {
> ++#ifdef DLT_PRISM_HEADER
> +     case DLT_PRISM_HEADER:
> +         pkt.handle_prism(packet,header->caplen);
> +         break;
> ++#endif
> +     case DLT_IEEE802_11_RADIO:
> +         pkt.handle_radiotap(packet,header->caplen);
> +         break;
> diff --git net/tcpflow/patches/patch-src_wifipcap_wifipcap_h 
> net/tcpflow/patches/patch-src_wifipcap_wifipcap_h
> new file mode 100644
> index 00000000000..3dbcb866dd8
> --- /dev/null
> +++ net/tcpflow/patches/patch-src_wifipcap_wifipcap_h
> @@ -0,0 +1,12 @@
> +Index: src/wifipcap/wifipcap.h
> +--- src/wifipcap/wifipcap.h.orig
> ++++ src/wifipcap/wifipcap.h
> +@@ -12,7 +12,7 @@
> + #include <stdint.h>
> + #include <inttypes.h>
> + 
> +-#include <pcap/pcap.h>
> ++#include <pcap.h>
> + #include <netinet/in.h>
> + 
> + #include "arp.h"
> 
> 
> --
> wbr, Kirill
> 

Reply via email to