This section provides an architecture-level description of HERMES as implemented by the software components referenced in Section 3.3.8. The focus is the HF data plane (store-and-forward payload transport over HF) and the radio/modem control plane that makes that possible on commodity HF transceivers.
HERMES is commonly deployed as a star topology network with two roles:
Inter-station exchange is asynchronous (store-and-forward): payloads are queued locally and later transported over an HF link during scheduled communication windows (often initiated by the gateway in round-robin fashion).
The reference implementation described in this document corresponds to HERMES v2 (sBitx-based radio control) and a VARA-compatible TCP TNC interface on localhost. In this model the station is composed of the following main processes:
sbitx_controller (from hermes-net/trx_v2-userland), started by systemd as
sbitx.service. It controls RF hardware and exposes a shared-memory control/status interface used by other services.
hermes-modem). The control socket is typically on TCP 8300 and the data socket on
8301 (base port + 1).
uucico + spool under /var/spool/uucp), which provides store-and-forward job
management and email transport integration.
uucpd (daemon) + uuport (pipe helper) from hermes-net/uucpd. This is the key
component that turns the modem/TNC into an UUCP “port”.
caller.sh (installed as caller.service) that
triggers uucico -S <station> calls according to a schedule and station list.
User devices (WiFi/LAN)
|
HTTP(S)
v
+--------------------+ +-----------------------+
| Web UI / REST API | <-----> | Mail stack (Postfix, |
| (external repos) | | Dovecot, etc) |
+--------------------+ +-----------+-----------+
|
v
+-------+-------+
| UUCP spool |
| /var/spool/uucp|
+-------+-------+
|
uucico/uuport (per session)
|
SysV SHM ring buffers (uucpd <-> uuport)
|
v
+--------+--------+
| uucpd (daemon) |
| VARA-style TNC |
+--------+--------+
|
TCP control+data (8300/8301)|
v
+---------+---------+
| Modem / TNC |
| (VARA or open) |
+---------+---------+
|
PTT ON/OFF + audio I/O
|
SysV SHM control API (sbitx_controller)
v
+---------+---------+
| sbitx_controller |
+-------------------+
On Debian-based HERMES images these components are typically started by systemd. Reference unit files are shipped in
hermes-net/system_services/init/. Some helper units for the Wine-based VARA modem are shipped by hermes-installer under
hermes-installer/conf/x11vnc/. The most relevant ones for the HF data plane are:
sbitx.service ExecStart=/usr/bin/sbitx_controller # VARA HF (Wine + GUI): headless X server + VNC helper units x11.service ExecStart=xvfb-run ... -n 69 -l xstartup vnc.service ExecStart=x11vnc -display WAIT:69 ... uucpd.service ExecStart=/usr/bin/uucpd -a 127.0.0.1 -p 8300 -r vara -o shm -f 2750p -m caller.service (gateway-only scheduler) ExecStart=/usr/bin/caller.sh # Open modem (hermes-modem) alternative: modem.service ExecStart=/usr/bin/mercury -v uucpd-mercury.service (typically installed as uucpd.service) ExecStart=/usr/bin/uucpd -a 127.0.0.1 -p 8300 -r vara -o shm -m -F
The HERMES reference architecture uses a small set of explicit interfaces. The most important ones are summarized below.
caller.sh) triggers an UUCP session: uucico -S <remote>.
uucico starts in master mode and invokes uuport (configured as a type pipe UUCP port).
uuport attaches to uucpd's shared memory buffers and becomes uucico's byte-stream “modem”.
uucpd maintains a persistent TCP connection to the modem/TNC. When it sees outgoing bytes and is not connected, it issues a
CONNECT <local> <remote> command on the TNC control socket.
PTT ON/PTT OFF on the control socket. uucpd
translates these into actual radio keying (serial CAT or shared-memory keying via sbitx_controller).
uucico
uuport
uucpd
uucpd (LISTEN ON).
CONNECTED ... on the control socket.
uucpd detects this as an inbound connection and forks /usr/sbin/uucico in slave mode, wiring its stdin/stdout to the same
shared buffers used by uuport.
uucpd perspective it behaves like VARA and
uses the same integration path (control/data sockets, PTT ON/OFF messages).
uucpd using its -r ardop mode; kept mainly for compatibility with older deployments.
ubitx_controller and different service units (see hermes-net/system_services/init).
The architecture above is grounded in the following source trees and artifacts:
hermes-net/uucpd (bridge daemon uucpd + port helper uuport + modem integration code)
hermes-net/trx_v2-userland (sbitx_controller shared-memory control API)
hermes-net/system_services/init (reference systemd unit files such as sbitx.service, uucpd.service, caller.service)
hermes-modem (open modem implementing VARA-style TCP TNC)