Attach TNC devices as network interfaces
Go to file
Mark Qvist 9f7aaa5a60 Updated readme 2020-05-27 09:48:17 +02:00
.gitignore Serial driver and basic KISS interface implemented 2020-05-25 16:31:55 +02:00
Constants.h Basic implementation done 2020-05-26 17:59:56 +02:00
KISS.c Basic implementation done 2020-05-26 17:59:56 +02:00
KISS.h Basic implementation done 2020-05-26 17:59:56 +02:00
LICENSE Initial commit 2020-05-25 13:29:33 +02:00
README.md Updated readme 2020-05-27 09:48:17 +02:00
Serial.c Basic implementation done 2020-05-26 17:59:56 +02:00
Serial.h Basic implementation done 2020-05-26 17:59:56 +02:00
TAP.c Basic implementation done 2020-05-26 17:59:56 +02:00
TAP.h Compile fix on armhf 2020-05-26 21:37:21 +02:00
makefile Compile fix on armhf 2020-05-26 21:37:21 +02:00
tncattach.c Basic implementation done 2020-05-26 17:59:56 +02:00

README.md

TNC Attach

Attach KISS TNC devices as network interfaces in Linux. This program allows you to attach TNCs or any KISS-compatible device as a network interface. This program does not need any kernel modules, and has no external dependencies outside the standard Linux and GNU C libraries.

Installation

Currently it is recommended to compile and install tncattach from source with the below commands. If that is not possible for you, precompiled amd64 and armhf (Raspberry Pi) binaries exist in the releases section.

# If you don't already have a compiler installed
sudo apt install build-essential

# Clone repository from GitHub
git clone https://github.com/markqvist/tncattach.git

# Move into source directory
cd tncattach

# Make program
make

# Install to system
sudo make install

Using tncattach

Using tncattach is simple. Run the program from the command line, specifying which serial port the TNC is connected to, and the serial port baud-rate, and tncattach takes care of the rest. In most cases, depending on what you intend to do, you probably want to use some of the options, though. See the examples section below for usage examples.

Usage: tncattach [OPTION...] port baudrate

Attach TNC devices as system network interfaces

  -d, --daemon               Run tncattach as a daemon
  -e, --ethernet             Create a full ethernet device
  -i, --ipv4=IP_ADDRESS      Configure an IPv4 address on interface
  -m, --mtu=MTU              Specify interface MTU
  -n, --noipv6               Filter IPv6 traffic from reaching TNC
      --noup                 Only create interface, don't bring it up
  -v, --verbose              Enable verbose output
  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

The program supports attaching TNCs as point-to-point tunnel devices, or generic ethernet devices. The ethernet mode is suitable for point-to-multipoint setups, and can be enabled with the corresponding command line switch. If you only need point-to-point links, it is advisable to just use the standard point-to-point mode, since it doesn't incur the ethernet header overhead on each packet.

Additionally, it is worth noting that tncattach can filter out IPv6 packets from reaching the TNC. Most operating systems attempts to autoconfigure IPv6 when an interface is brought up, which results in a substantial amount of IPv6 traffic generated by router solicitations and similar, which is usually unwanted for packet radio links and similar.

If you intend to use tncattach on a system with mDNS services enabled (avahi-daemon, for example), you may want to consider modifying your mDNS setup to exclude TNC interfaces, or turning it off entirely, since it will generate a lot of traffic that might be unwanted.

Examples

Create an ethernet device with a USB-connected TNC, set the MTU, filter IPv6 traffic, and set an IPv4 address:

# Attach interface
sudo tncattach /dev/ttyUSB0 115200 --ethernet --mtu 576 --noipv6 --ipv4 10.92.0.10/24

You can interact with the interface like any other using the ip or ifconfig utilities:

# Check interface is running
ifconfig
tnc0: flags=579<UP,BROADCAST,RUNNING,ALLMULTI>  mtu 576
        inet 10.92.0.10  netmask 255.255.255.0  broadcast 10.92.0.255
        ether 02:56:ad:f2:40:33  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Create a point-to-point link:

# Attach interface
sudo tncattach /dev/ttyUSB0 115200 --mtu 400 --noipv6 --noup

# Configure IP addresses for point-to-point link
sudo ifconfig tnc0 10.93.0.1 pointopoint 10.93.0.2

# Check interface
ifconfig

tnc0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 400
        inet 10.93.0.1  netmask 255.255.255.255  destination 10.93.0.2
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0