{"id":19836686,"url":"https://github.com/markqvist/tncattach","last_synced_at":"2026-03-06T19:35:25.373Z","repository":{"id":44427851,"uuid":"266753603","full_name":"markqvist/tncattach","owner":"markqvist","description":"Attach TNC devices as network interfaces","archived":false,"fork":false,"pushed_at":"2024-12-22T13:27:16.000Z","size":39,"stargazers_count":147,"open_issues_count":5,"forks_count":34,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-05-24T19:05:15.058Z","etag":null,"topics":["amateur-radio","kiss","networking","packet-radio","tnc"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/markqvist.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"markqvist","custom":"https://unsigned.io/donate"}},"created_at":"2020-05-25T10:44:55.000Z","updated_at":"2025-05-24T13:41:56.000Z","dependencies_parsed_at":"2024-11-12T12:12:50.548Z","dependency_job_id":"f2debf4d-3993-4c37-97ea-c003c3879eca","html_url":"https://github.com/markqvist/tncattach","commit_stats":{"total_commits":47,"total_committers":4,"mean_commits":11.75,"dds":"0.17021276595744683","last_synced_commit":"d9b3d2b6aefd50c6c535dbb42a8a80bfa84f1bfd"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/markqvist/tncattach","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markqvist%2Ftncattach","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markqvist%2Ftncattach/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markqvist%2Ftncattach/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markqvist%2Ftncattach/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/markqvist","download_url":"https://codeload.github.com/markqvist/tncattach/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/markqvist%2Ftncattach/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30193650,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amateur-radio","kiss","networking","packet-radio","tnc"],"created_at":"2024-11-12T12:12:11.049Z","updated_at":"2026-03-06T19:35:24.252Z","avatar_url":"https://github.com/markqvist.png","language":"C","funding_links":["https://ko-fi.com/markqvist","https://unsigned.io/donate"],"categories":[],"sub_categories":[],"readme":"TNC Attach\n==========\nAttach 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.\n\n## Installation\n\nCurrently it is recommended to compile and install __tncattach__ from source with the below commands.\n\nIf that is not possible for you, precompiled __amd64__ and __armhf__ (Raspberry Pi and similar) binaries have been provided in the releases section. You can [download the latest release here](https://github.com/markqvist/tncattach/releases).\n\n```sh\n# If you don't already have a compiler installed\nsudo apt install build-essential\n\n# Clone repository from GitHub\ngit clone https://github.com/markqvist/tncattach.git\n\n# Move into source directory\ncd tncattach\n\n# Make program\nmake\n\n# Install to system\nsudo make install\n```\n\n## Using tncattach\n\nUsing __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.\n\n```\nUsage: tncattach [OPTION...] port baudrate\n\nAttach TNC devices as system network interfaces\n\n  -m, --mtu=MTU              Specify interface MTU\n  -e, --ethernet             Create a full ethernet device\n  -i, --ipv4=IP_ADDRESS      Configure an IPv4 address on interface\n  -n, --noipv6               Filter IPv6 traffic from reaching TNC\n      --noup                 Only create interface, don't bring it up\n  -T, --kisstcp              Use KISS over TCP instead of serial port\n  -H, --tcphost=TCP_HOST     Host to connect to when using KISS over TCP\n  -P, --tcpport=TCP_PORT     TCP port when using KISS over TCP\n  -t, --interval=SECONDS     Maximum interval between station identifications\n  -s, --id=CALLSIGN          Station identification data\n  -d, --daemon               Run tncattach as a daemon\n  -v, --verbose              Enable verbose output\n  -?, --help                 Give this help list\n      --usage                Give a short usage message\n  -V, --version              Print program version\n```\n\nThe 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.\n\nIf you want to connect to a virtual KISS TNC over a TCP connection, you can use the -T option, along with the -H and -P options to specify the host and port.\n\nAdditionally, 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.\n\nIf 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.\n\n## Station Identification\n\nYou can configure tncattach to automatically transmit station identification beacons according to a given interval, by using the --id and --interval options. Identification will be transmitted as raw data frames with whatever content has been specified in the --id option. Useful for amateur radio use, or other areas where station identification is necessary.\n\nIdentification beacons will be transmitted when:\n\n - There is outgoing data to send, and the specified interval has elapsed.\n - The specified interval elapses, and data has been sent since the last ID beacon.\n - The program exits, if any data frames have been transmitted since the last ID beacon.\n\nThe above methodology should comply with station identification rules for amateur radio in most parts of the world, and complies with US Part 97 rules.\n\n## Examples\n\nCreate an ethernet device with a USB-connected TNC, set the MTU, filter IPv6 traffic, and set an IPv4 address:\n\n```sh\n# Attach interface\nsudo tncattach /dev/ttyUSB0 115200 --ethernet --mtu 576 --noipv6 --ipv4 10.92.0.10/24\n```\n\nCreate an ethernet device with a TCP-connected TNC, set the MTU, filter IPv6 traffic, and set an IPv4 address:\n\n```sh\n# Attach interface\nsudo tncattach -T -H localhost -P 8001 --ethernet --mtu 576 --noipv6 --ipv4 10.92.0.10/24\n```\n\nYou can interact with the interface like any other using the __ip__ or __ifconfig__ utilities:\n\n```sh\n# Check interface is running\nifconfig\n\ntnc0: flags=579\u003cUP,BROADCAST,RUNNING,ALLMULTI\u003e  mtu 576\n        inet 10.92.0.10  netmask 255.255.255.0  broadcast 10.92.0.255\n        ether 02:56:ad:f2:40:33  txqueuelen 1000  (Ethernet)\n        RX packets 0  bytes 0 (0.0 B)\n        RX errors 0  dropped 0  overruns 0  frame 0\n        TX packets 0  bytes 0 (0.0 B)\n        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n```\n\nCreate a point-to-point link:\n\n```sh\n# Attach interface\nsudo tncattach /dev/ttyUSB0 115200 --mtu 400 --noipv6 --noup\n\n# Configure IP addresses for point-to-point link\nsudo ifconfig tnc0 10.93.0.1 pointopoint 10.93.0.2\n\n# Check interface\nifconfig\n\ntnc0: flags=4305\u003cUP,POINTOPOINT,RUNNING,NOARP,MULTICAST\u003e  mtu 400\n        inet 10.93.0.1  netmask 255.255.255.255  destination 10.93.0.2\n        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)\n        RX packets 0  bytes 0 (0.0 B)\n        RX errors 0  dropped 0  overruns 0  frame 0\n        TX packets 0  bytes 0 (0.0 B)\n        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n\n```\n\n## Worth Knowing on Raspbian\n\nOn some versions of Raspbian (and probably other operating systems), the DHCP client daemon _dhcpcd_ interferes with TNC interfaces, by overriding their MTU and trying to auto-configure link-local addresses. You probably don't want this, and it can be disabled by editing the __/etc/dhcpcd.conf__ file, adding a statement telling _dhcpcd_ to ignore your TNC interface:\n\n```\n# Add the following statement somewhere at the beginning\n# of /etc/dhcpcd.conf to prevent dhcpcd from changing MTU\n\ndenyinterfaces tnc0\n```\n\n## Support tncattach development\nYou can help support the continued development of open, free and private communications systems by donating via one of the following channels:\n\n- Ethereum: 0x81F7B979fEa6134bA9FD5c701b3501A2e61E897a\n- Bitcoin: 3CPmacGm34qYvR6XWLVEJmi2aNe3PZqUuq\n- Ko-Fi: https://ko-fi.com/markqvist\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkqvist%2Ftncattach","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarkqvist%2Ftncattach","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarkqvist%2Ftncattach/lists"}