Consulting djbware Publications

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 IPv6 patch.
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.


The current version of ucspi-tcp6 provides the following features:

ucspi-tcp6 is 64-bit-enabled and running on a wide range of Unix systems including OmniOS and Raspbian.


Version history

ucspi-tcp6 posseses the following family tree:


Version & Download Description fehQlibs version Verification
ucspi-tcp6 1.12.4 The tenth (and already post-final) 1.12 complies well with current C compilers while supporting the MAXCONIP feature from the cdb. fehQlibs-22 MD5: 71aac0285a59bd91c3de48af0942f275
Build: 20230518211811
ucspi-tcp6 1.11.6a The eights (and already post-final) 1.11 takes advantage of fehQlibs-15 in order to provide a better IPv4 and DNS client compatibility in particular using 'well known' hostnames like localhost. In addition, GCC 10 compliance is now given using fehQlibs-15. fehQlibs-16 and fehQlibs-15 MD5: 4e59d975055aaf5fa8cbea94fb76f92c
Build: 20200920111210
ucspi-tcp6 1.10.7 This eights 1.10 release supports fehQlibs-12 while providing maximum conformance with previous versions; in particular for tcprules. fehQlibs-10 or fehQlibs-12 MD5: b7d5652cb41354e4886488465432d49e
Build: 20200827213555

ucspi-tcp6's source files are documented in doxygen.


The main programs and helpers:

Updated man pages:

Server apps Client apps Miscellaneous
rblsmtpd date@ addcr
recordio finger@ argv0
tcprules http@ delcr
tcprulescheck mconnect fixcrio
tcpserver tcpcat tcp-environ

How to install ucspi-tcp6

Prior of installing ucspi-tcp6-1.12 you need to install the fitting fehQlibs. Please follow instructions here.

ucspi-tcp6 uses D.J. Bernstein's /package conventions for installation. Typically, un-tar the archive under /package, change to net/ucspi-tcp6/ucspi-tcp6-<version> and call package/install.
ucspi-tcp6 is pre-packaged to suite the AMD64 environment and comes with additional man-pages.

Tickets, Change Requests, communication

An EZMLM mailing list keeps you updated with current developments, bug fixes, and features discussed. This list also can be used to file

To inscribe use: ucspi mailing list

This list is also used for ucspi-ssl. As usual, I can't guarantee a certain response level; but reasonable issues will be answered.


CIDR Support

Main modification in ucspi-tcp6 is the enhanced format for tcpserver's rules.cdb. It supports now:

IPv6 for rblsmtpd RBL Lookups

rblsmtpd is able to do a RBL lookup even for IPv6 addresses constructing the TXT query in the following way:

e.f.e.f ......

However; I'm not aware of any exiting IPv6 RBL. Rather, within my package djbdnscurve6 you might find rbldns which can cope with those requirements.

DNS Stub Resolver

ucspi-tcp6 comes with a DNS stub resolver borrowed from fehQlibs. Thus IPv4 and IPv6 Name resolution is provided and allowing to specify dedicated Forwarder/Cache Servers and Name Qualification apart from /etc/resolv.conf.

In practice, you are allowed to use those services on your link-local IPv6 network, which actually protects your DNS queries and replies given a trusted network link.

*ix specific installation instructions


ucspi-tcp6 will compile with clang in case Xcode is installed.

Note: High Sierra seems to be broken beyond repair missing required symbols for fehQlibs in libc; while Mojave is working fine.

OmniOS (Illuminos)

ucspi-tcp6 starting with version 1.05 will compile under OmniOS. It has been tested with SunOS omni 5.11 and GCC 5.11 and 8.

Two tweaks are required:

  1. Link gcc to /usr/bin/cc
  2. Perhaps use conf-ld without the '-m64' argument.

RasPi/Raspbian Linux (RPi 3)

ucspi-tcp6 supports Raspbian Linux and the ARM(64) 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

sh ./

to display the recognized SW and HW architecture.

ucspi-tcp6 works seamlessly using clang under FreeBSD 12 for the ARM64 architecture but now in 64 bit mode!