[aprssig] mDNS DNS-SD service discovery of KISS TNCs on TCP ports

Heikki Hannikainen hessu at hes.iki.fi
Tue Jan 26 02:47:32 EST 2021


Hi,

Introductory video: Here's how you can attach the aprs.fi iPhone app to a 
Dire Wolf 1.7 (not released yet) that's running on a Linux or Mac computer 
somewhere on the same wifi/lan segment:

https://twitter.com/aprsfi/status/1343652123452575744

Note: no IP addresses or TCP port numbers involved. Pick from list and it 
works. This is how it should happen in 2021. Ok, maybe a little 
authentication would be good too!

Many devices and pieces of software support KISS TNCs on TCP ports without 
authentication.  Connect to a TCP port, send/receive KISS encapsulated 
AX.25 frames, and it just works.  Dire Wolf has it, the Microsat WX3in1 
has some level of support, aprx igate can connect to these.  If you have a 
classic KISS TNC on a serial port of Linux device, you can run ser2net on 
a Raspberry Pi to expose it on a TCP port.

Many users of my aprs.fi iPhone/iPad app wanted to use these. But I 
personally have started to hate looking for IP addresses and ports, 
especially on while on the road with a wifi access point and dynamic IPs 
which didn't stay the same over a reboot of the system.  And I suspect 
many others feel the same: the processes of interconnecting ham software 
(wsjt-x, fldigi, logging programs, etc) are unnecessary complicated.

It turns out it's quite easy to implement automatic service discovery 
these days, thanks to good operating system and library support. DNS-SD, 
defined in RFC 6763, is the protocol used by iPhones and Androids, Windows 
and Mac computers alike, to locate printers and televisions and other 
common household items, on local networks. So I just went and did this, 
DNS-SD, for KISS TNCs on TCP ports.

Version 2.2.0 of my aprs.fi iOS app, which got released yesterday, 
supports KISS over TCP/IP with mDNS DNS-SD. I also implemented the server 
side for this on Linux and Mac and submitted it to Dire Wolf as a pull 
request. WB2OSZ has kindly merged it in the dev branch and it will come 
out in the next release, version 1.7: 
https://github.com/wb2osz/direwolf/pull/307

Note that I didn't do a Windows implementation, as I don't have a windows 
development environment and haven't done windows development since 1996 or 
so. But it shouldn't be too hard to do on Windows 10.

Here's a second video, with a little demo of the initial iGate 
implementation:

https://twitter.com/aprsfi/status/1352653897769357312

Here's a specification proposal, with debugging and testing commands:

https://github.com/hessu/aprs-specs/blob/master/TCP-KISS-DNS-SD.md

On Linux you can also configure avahi to announce a port like this by 
simply placing a file in /etc/avahi/services (see "man avahi.service"). 
One device can also do a proxy announcement on behalf of another device on 
the same segment, if that other device is not yet capable of DNS-SD.

I'd like to ask appliance/hardware/software vendors with KISS TCP support 
to implement DNS-SD. It's quite easy, just find and use a library that 
works in your environment. Your customers will love it. It's usually not 
many lines of code, just look at this MacOS implementation: 
https://github.com/wb2osz/direwolf/blob/dev/src/dns_sd_macos.c

Aprsdroid has support for it planned, too:
https://twitter.com/karrots/status/1344000609519771648

   - Hessu, OH7LZB/AF5QT




More information about the aprssig mailing list