📡 Why this page exists

BPQ32 has a reputation for being hard to configure. It isn't, really — it's just that a mature node's configuration is one flat text file holding eight different jobs at once, with no headings to tell you where one ends and the next begins. I have been running this node for over a decade, so this page takes its live bpq32.cfg and walks through it block by block: what each section does, why the values are what they are, and which mistakes cost me the most time. Everything shown here is taken from the running node, with all credentials removed.

What the configuration actually produces
Radio 1Kenwood TS-450, CAT on COM11
40 m — 7.0540 / 7.0495 MHz
 
20 m — 14.1089 / 14.1150
 
15 m — 21.1135
Radio 2Kenwood TS-570, CAT on COM5
80 m — 3.5911
80 m — 3.5911
 
20 m — 14.1023
 
40 m — 7.04945
Third rigfixed QRG, no CAT control
30 m — 10.1473 MHz, always on
00 04 08 12 16 20

Hours UTC — dial frequencies — bands overlap deliberately: one radio, several modes

Two rigs, three interlock groups, 24 ports. The amber and cyan rows are drawn straight from two RADIO blocks in the configuration — BPQ retunes those radios itself, on a clock. The dashed row is a third rig on a fixed frequency with no CAT control, so it has no RADIO block at all.

Section 1

Reading the file before editing it

Four syntax rules explain most of the confusion. Learn these and the file stops looking arbitrary.

; a semicolon starts a comment - anything after it is ignored /* this opens a comment BLOCK several lines of notes, examples, things you switched off */ and this closes it INFOMSG: ; a colon means "multi-line text follows" This text is shown when a user types INFO. It can run for many lines. *** ; three asterisks END the text block PORT PORTNUM=7 ID=433725 9k6 ; free-text label shown by the PORTS command PACLEN=255 ENDPORT ; every PORT must be closed by ENDPORT

The four structural devices

;
Line comment. This is how you park a setting instead of deleting it — my file has whole disabled ports sitting there commented out, which is documentation of what I tried.
/* … */
Comment block. Useful for long explanations, but easy to get wrong: forget the closing */ and BPQ silently swallows the rest of your configuration.
KEYWORD: … ***
A text block, used by IDMSG, BTEXT, INFOMSG, CTEXT and ROUTES. No line inside the block may start with *** — that terminates it early and the rest of your text becomes garbage configuration.
PORT … ENDPORT
One radio, modem or link per block. Indentation is cosmetic; BPQ does not care.
The thing nobody tells beginners

Inside a PORT block, the keyword CONFIG is a hand-off. Everything before CONFIG is parsed by BPQ itself (PACLEN, FRACK, QUALITY…). Everything after it is passed straight through to the driver — the Pactor TNC, the VARA modem, the AXIP driver — and BPQ neither validates it nor understands it. That is why a typo after CONFIG produces no error message at all: BPQ faithfully forwarded your nonsense to a modem that ignored it. When a port "does nothing", check which side of CONFIG your line is on first.

Section 2 — top of file

Who the node is, and what it says

The first thirty lines are pure identity. Nothing here affects routing; it is all about what humans and maps see.

LOCATOR=45.545911,9.111432 EnableM0LTEMap=1 MAPCOMMENT=NETROM Node, Packet/Pactor GW<BR>Bollate(MI)-www.iw2ohx.net PASSWORD=[redacted] ; SYSOP password - never publish this NODECALL=IW2OHX-15 ; the node callsign NODEALIAS=BOLHF ; short alias, max 6 chars, what neighbours see IDMSG: ; periodic UI beacon from NODECALL IW2OHX-15 - Alias BOLHF - Bollate (MI) *** CTEXT: ; the greeting a connecting user receives IW2OHX-15 - BPQ32 HF/V/U LoRa/Packet/Robust Packet/Pactor Node - JN45NN *** FULL_CTEXT=1 ; 1 = greet everyone, 0 = only connects to the ALIAS

Identity block, secrets redacted

There are four separate texts and new sysops mix them up constantly. They are not interchangeable:

KeywordSeen byWhenSize limit
CTEXTA user connecting to the nodeOn connect512
INFOMSGA user who types INFOOn demand2047
IDMSGAnyone monitoring the frequencyEvery IDINTERVAL min512
BTEXTAnyone monitoring, as a beaconEvery BTINTERVAL min120

The four texts and their byte limits

My INFOMSG is the station's real front page: the whole frequency and mode schedule lives there, band by band and hour by hour, because that is the one thing every visiting operator actually wants to know. It sits close to the 2047-byte ceiling — worth knowing, because BPQ truncates rather than complaining.

Redacted on purpose

PASSWORD (sysop), CMSPASS (Winlink), every USER= line and the APRS-IS ISPasscode are real credentials in the live file and are blanked out everywhere on this page. If you ever share your own configuration for help — on groups.io, in a forum, with an AI assistant — strip those five things first.

Section 3 — global parameters

Timers and table sizes

This block tunes NET/ROM routing and AX.25 link behaviour for the whole node. The defaults in the shipped example are sane; these are mine after years of watching a busy, HF-heavy node.

OBSINIT=5 ; freshness given to a newly heard node... OBSMIN=3 ; ...below which we stop passing it on NODESINTERVAL=15 ; broadcast our routing table every 15 min L3TIMETOLIVE=25 ; max hops before a packet is dropped L4TIMEOUT=60 ; end-to-end timeout, seconds L4WINDOW=4 MAXNODES=300 ; size of the nodes table MAXROUTES=64 ; how many direct neighbours we can hold MAXCIRCUITS=128 MINQUAL=50 ; ignore routes worse than this BUFFERS=255 ; 255 = "as many as you can spare" PACLEN=236 ; 236 is the hard NET/ROM ceiling - see below T3=180 ; link keep-alive, seconds IDLETIME=720 ; drop an idle link after 12 minutes HIDENODES=1 ; nodes starting with # need "N *" to be listed

Global network and Level 2 parameters

PACLEN=236
The single most important number in the file. 236 bytes is the maximum a NET/ROM Layer 4 frame can carry. Set it higher anywhere NET/ROM is in the path and your traffic gets fragmented — you will see slow, retry-heavy sessions and blame the radio. The global value here is for sessions through other nodes; each port can override it for direct connects, which is why my HF ports use 100 and my internet ports use 253.
OBSINIT / OBSMIN
An ageing counter. A node heard once gets 5 and loses a point every NODESINTERVAL; at 3 we stop advertising it onward. This is what keeps a dead station from haunting the network for hours.
MINQUAL=50
Route quality is 0–255, higher is better. Anything below 50 never enters my table — cheap protection against a distant, marginal path being advertised as usable.
IDLETIME=720
Twelve minutes. Long enough that a Pactor session pausing to decode does not get torn down, short enough that a dead HF link frees its channel.

Section 4 — the part most people never use

RADIO blocks: BPQ tunes your rig for you

This is the feature that turns a node into an unattended HF station, and it is the feature I get asked about most. A RADIO block gives BPQ CAT control of a transceiver, plus a time-of-day schedule of frequencies to sit on. The chart at the top of this page is nothing more than a drawing of two such blocks.

RADIO 2 DEBUG COM5 9600 Kenwood TS-570 ; CAT port, baud, rig model 30,3.59112,USB,P123,VW,A500M,APPL=BBS ; the 00:00 entry 05:00 ; from 05:00 UTC, use what follows 30,14.10232,USB,P123,VW,A500M,APPL=BBS 18:00 30,7.04945,USB,P123,VW,A500M,APPL=BBS 20:00 30,3.59112,USB,P123,VW,A500M,APPL=RMSHF ****

RADIO 2 — the TS-570, four scheduled band changes a day

Reading one frequency line left to right:

30
Scan dwell / priority for this entry.
3.59112
The dial frequency in MHz — not the centre of the audio tone. Getting this distinction wrong is the classic reason two stations never hear each other on HF digital.
USB
Rig mode to select.
P123
Which Pactor levels to accept here. The TS-570 chain does Pactor 1–3; the TS-450 with its P4dragon does P1234.
VW
Also accept VARA and Winmor-class connections on this slot.
A500M / A2000M
ARDOP bandwidth cap — 500 Hz on the narrow rig, 2000 Hz on the wide one.
APPL=BBS
Where an incoming caller lands: BBS for the mailbox, RMSHF for the Winlink gateway. Same radio, same frequency, different service depending on the hour.

The times are UTC and, importantly, the list wraps at midnight — the entry written before the first timestamp is the 00:00 entry. Note also that the block terminator here is ****, four asterisks, not the three that end a text block. A small inconsistency, and a real source of head-scratching.

Choosing those hours by hand is guesswork, so I do not: a small propagation-driven generator picks the bands from live VOACAP predictions, and the schedule you see is regenerated rather than typed. Worth saying plainly, though — a RADIO block change needs the node restarted before it takes effect, so this is not something to automate blindly end to end.

Section 5 — the bulk of the file

Twenty-four ports, seven kinds of thing

A "port" in BPQ is any path packets can travel: a radio, a soundcard modem, a hardware TNC, a UDP tunnel over the internet, or the telnet server. They all use the same PORT … ENDPORT syntax, which is what makes the port list look intimidating and is also what makes it learnable — once you can read one port, you can read all of them. The table below is grouped the way the station is actually built: by which physical radio each port shares. That grouping is the INTERLOCK value, and it is the subject of the next section.

PortID in configDriverWhat it really isShares
1LoopbackINTERNALTest port that echoes back to itself. Ships with every example config; harmless to keep.
2TELNETTelnetThe node's front door for anything over IP: telnet, the web pages, Winlink CMS, and custom applications.
3WW AXUDPBPQAXIP"Wormhole" — AX.25 encapsulated in UDP to roughly thirty partner nodes worldwide.
4IW2OHX-14 HAMNETBPQAXIPDedicated UDP link to my own (X)NET node over HAMNET.
19LINUX-WSL2BPQAXIPUDP link to the Linux subsystem on the same PC, where the FlexNet daemon lives.
5144825 1k2KISS / COM4-A2 m FM packet, 1200 baud AFSK. The classic user access port.
6APRS 432500 1k2KISS / COM4-B70 cm APRS, 1200 baud. Second channel of the same dual-port TNC.
7433725 9k6KISS / COM370 cm 9600 baud G3RUH — the fast local link.
11LoRa APRS 433KISS / TCPLoRa APRS gateway, reached over the LAN rather than a serial cable.
15LoRa TNC UHFKISS / COM13LoRa packet radio on 433.750 MHz — real AX.25 sessions over LoRa.
8RPR 600bd 10147.3TRKMULTIRobust Packet on 30 m via an SCS Tracker, +1500 Hz.Interlock 1
9PR 300bd 10147.3KISSHFPlain HF packet on 30 m, +2000 Hz, soundmodem reached over HAMNET.Interlock 1
16PR 300bd 10147.3KISSHFSame, +2400 Hz — a second audio slot on the same 30 m channel.Interlock 1
10TS-450/P4DragonSCSPactorPactor 1–4 plus Robust Packet on one P4dragon modem.Interlock 2
12TS-450/ARDOPARDOPARDOP soundcard modem, 2000 Hz wide.Interlock 2
13TS-450/VARAVARAVARA HF, 2300 Hz. Also carries all the Winlink advertising.Interlock 2
14TS-570/VARAVARASecond VARA instance, second modem, second radio.Interlock 3
20TS-570/PTCIIIusbSCSPactorPactor 1–3 on an SCS PTC-IIIusb.Interlock 3
21PR 300bd +1000KISSHFHF packet, soundmodem instance 3.Interlock 3
22PR 300bd +2000KISSHFHF packet, soundmodem instance 4.Interlock 3
23RPR 300bd +1500KISSHFRobust Packet in software via WinRPR.Interlock 3
24AFSK IL2P +850KISSHFIL2P forward error correction, AFSK, QtSoundModem channel A.Interlock 3
25BPSK IL2P +2150KISSHFSame modem, channel B, BPSK. One process, two ports.Interlock 3
26ARDOP TS570 +1500ARDOPNarrow ARDOP, 500 Hz cap, on the second radio.Interlock 3

All 24 active ports, grouped by the radio they share


One radio port, annotated

Port 7 is the simplest useful port in the file — a hardware TNC in KISS mode on a serial cable. Every radio port is a variation on this.

PORT PORTNUM=7 ID=433725 9k6 COMPORT=COM3 ; serial port the TNC is on SPEED=38400 ; cable speed to the TNC, NOT the over-air rate TYPE=ASYNC PROTOCOL=KISS QUALITY=160 ; route quality offered to neighbours on this port MAXFRAME=7 ; frames outstanding before waiting for an ack FRACK=2000 ; ms to wait for that ack before retrying RESPTIME=1000 ; delayed-ack timer RETRIES=10 PACLEN=255 ; direct connects only; NET/ROM still capped at 236 TXDELAY=150 ; transmitter warm-up before data, ms SLOTTIME=100 ; CSMA: how often to re-check for a clear channel PERSIST=64 ; CSMA: probability of transmitting when it is clear ENDPORT

Port 7 — 70 cm, 9600 baud, hardware TNC

Notice how the timers scale with the medium. On this fast, local UHF port FRACK is 2 seconds. On my HF Robust Packet ports it is 8 seconds with PACLEN=100, because a 300-baud HF frame legitimately takes that long and an impatient retry only makes the congestion worse. Tuning BPQ for HF is mostly the discipline of slowing everything down.

QUALITY is a footgun

QUALITY=0 means "do not run NET/ROM routing over this port". That is exactly right for ports 5, 6, 11 and the IL2P pair — an APRS or experimental channel has no business carrying the network's routing table. But set it accidentally on a port that carries users, and you have quietly cut off a chunk of the network with no error anywhere. I keep the intent written in the file itself: QUALITY=0 ; Default to NETROM OFF.

Section 6 — the HF concept that matters most

INTERLOCK: sixteen ports, three radios

Look again at the port table. Ports 14, 20, 21, 22, 23, 24, 25 and 26 are eight separate ports — Pactor, VARA, ARDOP, three flavours of soundcard packet, two of IL2P — and they are all connected to one transceiver. Only one of them may transmit at a time. Nothing in the layout of the file tells BPQ that. One keyword does.

INTERLOCK=3 ; every port on the TS-570 carries the same value

The whole mechanism

Ports sharing an INTERLOCK number are mutually exclusive: BPQ will not key one while another in the group is active. My three groups are 1 the 30 m rig, 2 the TS-450, and 3 the TS-570. Get this wrong and the symptom is not a configuration error — it is two modems transmitting into the same antenna relay.

A real problem I have not fully solved

INTERLOCK only arbitrates within a group. My groups 2 and 3 are two different radios, so BPQ is free to run them simultaneously — and it does, which is correct. But they share a site and, on some band combinations, an antenna field. The result is self-inflicted QRM that looks exactly like interference from outside. I spent a long time chasing it in the wrong place, editing connect scripts, before working out that the mechanism was simply two legitimately independent interlock groups overlapping in time. The honest fix is to merge groups 2 and 3 into one, accepting that only one HF radio ever transmits; the interim mitigation is scheduling them apart so the overlap is rare. I mention it because "my node interferes with itself" is a question I have seen asked several times and never seen answered as a configuration-architecture issue.

Two related keywords tidy up the same problem from the driver side. BUSYHOLD 1 and BUSYWAIT 20 appear in all my Pactor and ARDOP blocks: wait one second after the channel reports clear before believing it, and give up on a connect attempt after 20 seconds of a busy channel. That is basic courtesy on a shared HF band, and it is off by default.

Section 7

Wormholes: AX.25 over the internet

Packet radio did not shrink to one town — it links continents, and it does so over UDP. The BPQAXIP driver wraps AX.25 frames in UDP datagrams so a node in Bollate and one in New Zealand are neighbours as far as the routing table is concerned.

PORT PORTNUM=3 ID=WW AXUDP DRIVER=BPQAXIP QUALITY=161 ; internet links are reliable, so quality is high PACLEN=253 ; no 1200-baud channel to be polite to FRACK=3000 CONFIG ; --- everything below is driver-only --- UDP 10093 ; the port we listen on MHEARD ; log stations heard here BROADCAST NODES ; send routing broadcasts over the tunnel BROADCAST ID MAP IW2OHX-13 192.168.1.202 UDP 10093 B MAP GB7XXX-5 gb7xxx.example.net UDP 10093 B ; ...about thirty more partner nodes, addresses omitted here ENDPORT

Port 3 — the worldwide wormhole (peer list trimmed out of respect for the other stations)

MAP call host UDP port B
One line per partner: their callsign, their hostname or IP, their UDP port, and B for "this peer speaks the BPQ AXUDP format". Dynamic-DNS names are normal here — most home stations do not have a fixed address.
QUALITY=161
Deliberately just above my best radio port. When both a radio path and an internet path to the same destination exist, I want the internet one preferred — it is faster and does not consume airtime.
Separate ports per purpose
I run three AXUDP ports rather than one big list: port 3 for worldwide partners, port 4 for my own (X)NET node over HAMNET, port 19 for the Linux subsystem on the same PC. Different UDP ports, different quality, and a fault in one does not take the others down.

Worth being precise about one thing that confuses newcomers: HAMNET and AMPRNet both use 44.x addresses but they are different networks. HAMNET is a BGP-routed European fabric; AMPRNet is the global IPIP mesh. A node can sit on both, as mine does, but the routing is independent.

Section 8

The telnet port is really the application port

Port 2 looks like "the telnet server" and is much more than that. It is the single place where BPQ meets the IP world: the login prompt, the web interface, the Winlink CMS connection, and the hooks that let your own programs become node commands.

PORT PORTNUM=2 ID=TELNET DRIVER=Telnet CONFIG TCPPORT=2324 ; telnet login HTTPPORT=8085 ; the node web pages LOCALNET=192.168.1.0/24 ; treated as trusted, no password LOCALNET=44.134.24.0/22 CMDPORT 63000 ; socket your own app listens on NETROMPORT=53119 ; NET/ROM carried over TCP MAXSESSIONS=10 CMS=1 ; enable Winlink Common Message Server CMSCALL=IW2OHX CMSPASS=[redacted] FALLBACKTORELAY=1 ; if the internet dies, hand callers to... RELAYAPPL=BBS ; ...the local BBS instead of failing USER=[redacted] ; login,password,callsign,application ENDPORT

Port 2, credentials redacted

FALLBACKTORELAY deserves a mention: it is the difference between a Winlink user on HF getting "no CMS available" and getting quietly handed to my local mailbox when my internet connection is down. Two lines, and the station keeps working during an outage — which is rather the point of amateur radio.

Turning your own code into a node command

CMDPORT is the extension point, and it is underused because the indexing catches everyone out. The numbers are TCP ports your programs listen on; BPQ refers to them by position in the list, not by port number — and that position is counted from zero. With a single entry, as I have now, the only index is HOST 0. With three it would be:

CMDPORT 4719 7373 63000 | | | | | +-- HOST 2 | +------- HOST 1 +------------ HOST 0

CMDPORT positions are zero-based — an illustration

That example is not academic: it is what my own file held until recently. Nothing was ever listening on 4719 or 7373 — they were leftovers from an earlier application — so I removed them, which shifted 63000 from index 2 to index 0 and meant the APPLICATION line had to be renumbered from HOST 2 to HOST 0 in the same edit. Change one without the other and BPQ cheerfully connects to a socket with no listener: no error, no log entry, the user's session simply dies. So — append new ports to the end rather than inserting them, because inserting one renumbers every HOST reference after it; and if an application breaks right after you touched CMDPORT, count the positions again from zero before looking anywhere else.

APPLICATION 1,RMSHF,C 2 CMS,IW2OHX ; Winlink over HF APPLICATION 2,BBS,,IW2OHX-8,BBSMI,255 ; the mailbox APPLICATION 3,RMS,C 2 CMS,IW2OHX-10,RMSMI,255 ; Winlink over telnet APPLICATION 4,CHAT,,IW2OHX-5,CHTMI,255 ; chat server APPLICATION 5,GW,C IW2OHX-1 ; shortcut to the gateway APPLICATION 6,XNET,C 4 IW2OHX-14 ; shortcut over port 4 APPLICATION 9,DXC,ATTACH 2 <host> 7300 TELNET,IW2OHX-6,DXCMI,255 APPLICATION 11,AI,C 2 HOST 0 S ; my own program

What users can type at the node prompt

The fields are: number, the command the user types, the node command it expands to, an optional callsign that reaches it directly, then an optional alias and quality to advertise it in the network's node list. So APPLICATION 2 means someone can type BBS at my prompt or connect straight to IW2OHX-8 from anywhere on the network and land in the same mailbox.

APPLICATION 11 is the one visitors comment on: type AI at the node prompt and you are talking to a language model restricted to amateur-radio questions, running on the Linux subsystem of the same PC and reached through HOST 0 — TCP 63000, the only entry in the CMDPORT list. It is about fifteen lines of configuration and a small listener program. The lesson is that the extension mechanism is genuinely easy — the only hard requirement is that your program must flush its output after every write, or the session hangs with no diagnostic. Test the listener with nc localhost 63000 before you ever wire it into BPQ.

Section 10

APRSDIGI: a second, separate network

BPQ contains a full APRS digipeater and internet gateway. It lives in its own block with its own callsign and its own rules, and it can use any subset of your ports.

APRSDIGI APRSCall IW2OHX-11 ; separate SSID from the node Symbol=& Symset=I ; the icon shown on maps APRSPath 6=LOCAL ; which ports take part; no path = receive only APRSPath 11=LOCAL Digimap 6=IS ; port 6 traffic goes to APRS-IS, not back to RF Digimap 11=11,IS ; port 11 digipeats locally AND gates to internet TraceCalls=WIDE ; WIDEn-n with callsign insertion FloodCalls=ITA ; the Italian regional flood alias DigiCalls=WIDE1-1 ; fill-in digipeating for handhelds MaxTraceHops=2 MaxFloodHops=2 LAT=4532.77N LON=00906.69E ; APRS format, not decimal degrees ISHost=rotate.aprs2.net ISPasscode=[redacted] *** ; note: three asterisks, not ENDPORT

The APRS digipeater block, passcode redacted

Digimap is the interesting one, because it is a routing matrix and its defaults are generous. Digimap 6=IS says: take everything heard on port 6, send it to the internet, and do not retransmit it on RF. That is the responsible setting for a gateway in a dense area — the alternative is contributing to the congestion. MaxTraceHops=2 is the same instinct: two hops is plenty in the Po valley, and honouring a WIDE7-7 request would just be rude.

Note the coordinate format. LAT=4532.77N is degrees-and-decimal-minutes, the APRS convention — while LOCATOR at the top of the file wants decimal degrees. Same station, same file, two formats, and a silently wrong position on the map if you mix them up.

Section 11

Ten years, ten things I would tell my earlier self

None of these are exotic. All of them cost me an evening at least once.

PACLEN > 236 breaks NET/ROM

236 bytes is the Layer 4 ceiling. Anything larger gets fragmented somewhere you cannot see. Radio ports usually want much less — 100 on HF, 200 on 1200 baud.

On Linux the filename is lowercase

bpq32.cfg, not BPQ32.cfg — and the web directory must be capitalised HTML/. Wrong case fails silently: no error, no web pages.

Do not run LinBPQ as root

Grant the three capabilities it actually needs (CAP_NET_ADMIN, CAP_NET_RAW, CAP_NET_BIND_SERVICE) with setcap and run as a normal user.

A line starting *** ends your text block

Decorative separators in an INFOMSG will truncate it and turn the remainder into configuration errors. Use >>> or --- instead.

QUALITY=0 is a silent lockout

Correct for APRS and experimental ports. Catastrophic and undiagnosable on a port that carries users, or on a locked route.

USER lines are case-sensitive

Username and password both. The callsign gets upper-cased for you; nothing else does.

After CONFIG, BPQ stops checking

Driver lines are forwarded verbatim to the modem. A typo there produces no error — just a port that does nothing.

Comment, do not delete

My file carries several disabled ports and two abandoned experiments, all commented out. That history is the most useful documentation I have.

RECONFIG reloads some things, not all

Texts and routes reload live. Structural changes to a PORT or a RADIO block need a full restart. Know which you just changed.

Keep SECURETELNET on

Default since 6.0.25 build 41. Leaving outbound telnet open on an internet-connected node is not a favour to anyone.

Section 12

Where to start, if this is your first node

Do not start from a file like mine. Twenty-four ports is more than a decade of accretion, and every one of them was added to solve a problem I actually had. Start from the minimal example that ships with BPQ32 — the loopback-only configuration whose comment header is, entertainingly, still sitting at the top of my own file — and add one port at a time.

A sequence that works:

  • Identity only. NODECALL, NODEALIAS, CTEXT, and the loopback port. Connect to yourself.
  • Add the telnet port. Now you can log in and use the node commands — PORTS, NODES, ROUTES, USERS, MHEARD. Learn to read those before adding anything else, because they are how you will diagnose everything later.
  • Add one radio port with a TNC you know works. Get a direct AX.25 connection with a friend.
  • Add one AXUDP wormhole to a nearby node. You now have a network, and NODES starts filling up on its own.
  • Only then think about HF, Pactor, VARA and INTERLOCK.

The authoritative reference is G8BPQ's own documentation, and the BPQ32 group on groups.io is where John himself answers questions — patiently, and usually within a day. This page is a companion to those, not a replacement: it is the annotated example I wish had existed when I started.