UCSPI for IPv6
What is ucspi-tcp6?
Dan Bernstein's UNIX Client-Server Program Interface, UCSPI is a cornerstone of reliable network communication under Unix.
IPv6 capabilities have been included by Felix von Leitner's
Based on some additional research at the University of Applied Sciences in Frankfurt/Main (Germany), now a full-featured version is available supporting in addition compactified IPv6 addresses and the well-known classless prefix-notation for IPv4 and IPv6 networks.
ucspi-tcp6 has been build to confirm with Dan Bernstein's slashpackage scheme and uses a binary-compatible CDB for communication control.
ucspi-tcp6 is a fork of Dan Bernsteins's ucspi-tcp 0.88 version, including:
- rblsmtpd Greetdelay add-on and removal of the compiled-in default-RBL,
- Felix von Leitner's's IPv6 patch ucspi-tcp-0.88-ipv6.diff19.bz2,
- Jens Wehrenbrecht's IPv4 CIDR extension, and
- Li Minh Bui's IPv6 support for compactified IPv6 addresses and CIDR notation support.
- Version 0.97 of ucspi-tcp6 provides a native understanding of IPv4-mapped IPv6 addresses and supports the inverse IPv6 nibble format for rblsmtpd RBL and anti-RBL lookups.
- Interrogation mode is working now (option changed from '-I' to '-i').
- Greetdelay option reworked.
- Version 0.98: RBLSMTPD interrogation information is promoted now to the client; e.g. qmail-smtpd.
- Version 0.99: Added environment variables TCP6REMOTEIP, TCP6REMOTEPORT, TCP6REMOTEHOST; unified helper scripts for IPv4 and IPv6 operations.
- Version 0.99a: Fixed wrong command path in scripts (date@ ...); included description of TCP6* envrionment variables in man tcp-environ.
- Version 0.99.1: Fixed wrong hostname termination and thus wrong DNS lookup
(for mainly tcpclient).
Fixed wrong interface index parameter propagation (for tcpserver).
- Version 1.00: Final release. Fixed bug in tcpserver with core dump evaluating IPv4 addresses in the cdb running in the AMD64 environment (tx. John Levine). Fixed serveral flaws for AMD64 architecture.
- Version 1.01: Fix for tcpserver's paranoid IPv4 evaluation if a DNS AAAA exists in addition for the same FQDN.
- Version 1.02: Fix for a potential segfault in CIDR address evaluation.
Fixes for compiler errors and easier installation.
- Version 1.03: Fix for POSIX poll API returning negative numbers under some conditions; may result in occasional high load conditions running tcpserver.
- Version 1.04: Bugfix for wrong IPv6 flag in rblsmtpd even receiving data for IPv4 connections (tx. Sebastian)
How to install ucspi-tcp6
ucspi-tcp6 uses D.J. Bernstein's /package
conventions for installation.
Typically, un-tar the archive under /package, change to host/ucspi-tcp6-<version>
and call package/install.
ucspi-tcp6 is pre-packaged to suite the AMD64 environment and comes with additional man-pages.
Description of the main programs
Creating the rules cdb:
Main modification in ucspi-tcp6 is the enhanced format for tcpserver's rules.cdb. It supports now:
- Compactified IPv6 host addresses in the format:
- Classless IPv4/IPv6 net addresses declared in the common CIDR /prefix
- Evaluation of the CIDR addresses considers the longest matching prefix.
Thus, you can specify:
Note for MacOS X User
ucspi-tcp6 will compile with clang in case xcode is installed.
You need (perhaps) to adjust conf-cc and conf-ld in ucspi-tcp6's main directory.
MacOS X relocated the standard
You can add that statement into the conf-cc file prior of compilation.
Note for RasPi/Raspian Linux
ucspi-tcp6 supports Raspian Linux and the ARM architecture out-of-the box.
Some samples are provided in the conf-cc and conf-ld file how to improve performance depending on the supporting HW architecture. See gcc ARM options for a comprehensive compilation of possibilities.
Within the src directory of ucspi-tcp6 use
to display the recognized SW and HW architecture.