[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