pktfec-tnc is a software terminal node controller (TNC) for a new digimode meant to be transmitted over FM or NBFM channels. pktfec-tnc provides:

  • a low-density parity-check (LDPC) matrix for forward error correction (FEC),
  • puncturing to reduce overhead for messages that are not a multiple of the used block size,
  • an interleaver to reduce the impact of burst errors,
  • quadrature amplitude modulation (QAM) with a selectable number of bits per symbol (2, 4, 6, 8, ...) and smooth transition to limit audio bandwidth to frequencies between approximately 960 and 2880 Hz (1.9 kHz audio bandwidth to be transported over a 6 to 25 kHz wide FM channel),
  • net bitrates from 1200 bit/s (QPSK with 2 bits per symbol) up to 3600 bit/s (QAM64 with 6 bits per symbol) and more,
  • a TCP/IP server that supports multiple clients to receive and send messages via a simplified version of the KISS protocol (data frames only).

Additionally, an IP tunneling daemon ("hamtunnel") is provided, which connects to a TUN device and prepends IP packets with a null-terminated radio call sign and a null-terminated protocol identifier ("IPv4" or "IPv6") and sends them to a KISS server for transmission and receives packets in the reverse.


pktfec-tnc requires SoX (see for audio input and output.



  • 2020-03-10: Version alpha5
    • Improved functions to send test signal and to measure dB level of incoming signal
  • 2020-03-10: Version alpha4
    • Allow sending successive packets without gap
    • Command line switches to send test signal and to measure dB level of incoming signal
  • 2020-03-08: Version alpha3
    • Bugfixes in TNC
      • Set bits per symbol to 4 by default (as documented in help)
      • Properly handle receiving multiple KISS frames at the same time
      • Properly handle KISS frames which exceed maximum size
      • Replaced unsafe use of memcpy() with memmove()
      • Fixed wrong calculation of random TX block time
      • Throw error when getting unexpected (non-option) argument
    • Added an IP tunneling daemon
  • 2019-02-15: Version alpha2
    • Some corrections in README file (including correct audio bandwidth)
    • Stricter synchronization requirement (reduce false positives)
    • Allow carrier frequency (baud-rate is half of carrier frequency) to be set on command-line of TNC
  • 2019-02-12: Initial release of version alpha1