Open Source Amateur Radio

MOP

Mesh Operations Protocol

A decentralized mesh network for amateur radio.
No sessions. No hubs. No closed-source software.
Just datagrams and beacons — short, efficient bursts.

4800 bps — OFDM Modem
0.6s TX time — 200B message
0 central servers required
▼ scroll to explore

Why We Built This

Many existing amateur radio data systems behave like “phone calls.” MOP is built for short bursts, broadcast reach, and mesh forwarding.

📞

VARA FM — Session-Based

Connect → Handshake → ARQ Setup → Send data → Wait for ACK → Disconnect. That’s multiple seconds of overhead for a short message. Not great for beacons or one-to-many traffic. One session can dominate the channel.

📡

MOP — Datagram-Based

Key PTT → Transmit a compact frame → Done. Short airtime, natural broadcast reach, and multi-hop relay without “call setup.” Open source, cross-platform, and built around radio-first constraints.

🏢

Hub-Style Messaging

When a single service is the “center,” the network inherits that dependency. If a hub is unreachable, everything feels fragile. It also limits how freely stations can roam between regions.

🕸️

MOP Mesh — Decentralized

No directory. No single point of failure. Gateways can peer directly. Route knowledge is learned from beacons and gossip. If one node goes down, the mesh can route around it. Resilience comes from redundancy.

Live Network Simulation

Watch beacons propagate, routes form, and messages travel through the mesh. Each node only acts on what it has heard — there is no central knowledge.

End Station
Relay Node
Gateway
Beacon Wave
Message Packet

Protocol Stack

Five clean layers. The modem doesn’t know about routing. The mesh doesn’t know about modulation. Each layer is replaceable.

Application
MOP Client — UI, origin ID, message composition
▼ MOPFrame bytes ▼
Mesh
MeshNode — routing table, beacons, relay, dedup, spool
▼ framed bytes ▼
MAC
CSMA/CA — carrier sense, defer, backoff, retry, ACK wait
▼ raw bytes ▼
Modem
OFDM modulation (4800 bps) / Direwolf / TCP Ether test
▼ audio samples ▼
Radio
FM transceiver — FT-991A, FT5D, any radio with a data interface
Validate

Integrity & Origin ID (Open)

Each message includes an open, non-obscuring integrity tag that lets receivers verify origin and detect tampering or corruption. Message contents remain readable to any receiving station in compliance with FCC Part 97.

Route

Beacon-Driven Discovery

Gateways beacon every 10 min, relays every 15 min. Route knowledge ripples outward through re-broadcasts. No central directory — your routing table builds itself from what you hear.

Access

CSMA/CA with Exponential Backoff

Listen before talk. If channel is busy, defer. Random backoff avoids collisions between stations that were both waiting. Directed frames get retried with exponential backoff.

Modulate

OFDM at 4800 bps

First working version of a custom OFDM modem — early tests are very promising. Built in Python with numpy + sounddevice. Beacons use 1200 baud AFSK for APRS visibility.

Transmit

Standard FM Voice Channel

3 kHz audio bandwidth. PTT via CAT command (Yaesu), VOX, or GPIO. No special hardware — any radio with a soundcard interface.

FCC note: MOP is designed for amateur radio use where transmissions are intentionally readable by any receiving station. Integrity/origin checks are used to detect corruption or spoofing, not to obscure message meaning.

Frame Structure

Every MOP packet on air or wire follows this binary format. Compact, CRC-protected, and designed for short bursts.

0x01Version
TYPEFrame Type
FLAGSBit Flags
TTLHop Limit
MSG_ID4B Dedup
FROM_CALL8B Source
TO_CALL8B Dest
PATH_NHop Count
PATH[]8B × N Hops
LEN2B Length
PAYLOADMessage Data
CRC324B Check
ACK Frame
41 bytes
@4800: 0.07s airtime
Beacon
111 bytes
@4800: 0.18s airtime
Short Message
131 bytes
@4800: 0.22s airtime
Message + 5 Hops
271 bytes
@4800: 0.45s airtime

Frame Types

0x01
BCN
Beacon — route advertisement
0x02
MSG
Message — readable data
0x03
ACK
Acknowledgment broadcast
0x04
RRQ
Route Request flood
0x05
RRP
Route Reply (directed)
0x06
EMG
Emergency — all nodes relay

Cross-Country Delivery

W6QQQ in Los Angeles sends a message to K1ZZZ in New York. No hub. No directory. Just mesh routing.

Step 01

W6QQQ Checks Routing Table

Built from beacons heard on the local frequency. Knows about KO6IKR-GW (gateway, 1 hop, has internet). Doesn’t know K1ZZZ directly.

Step 02

Transmit Message

A compact message frame is transmitted as a single datagram — ~0.6 seconds of airtime. The frame includes an open integrity/origin tag so receivers can validate what they received. No handshake. No session.

Step 03

N6XXX Relays

Relay node hears the packet. Not addressed to N6XXX. TTL > 0, no loop detected. Adds itself to PATH, decrements TTL, re-transmits toward the gateway.

Step 04

KO6IKR-GW Receives

Gateway receives the message. K1ZZZ is not in its local station list. Checks peer gossip table: K1ZZZ was reported by W1ABC-GW in New York.

Step 05

Gateway-to-Gateway Exchange

Gateway forwards the raw MOP frame to W1ABC-GW over a direct internet link. Origin validation tags reduce spoofing and accidental duplicates. No central hub involved — direct peer-to-peer.

Step 06

W1ABC-GW Spools

NY gateway receives the frame. K1ZZZ is a known local station but not currently on air. Stores in spool. Waits.

Step 07

K1ZZZ Checks Mail

K1ZZZ turns on their radio. Hears W1ABC-GW beacon. Sends MAIL-CHECK frame. Gateway responds with the queued message.

Step 08

Delivered + ACK

K1ZZZ receives and reads the message, then broadcasts ACK. ACK propagates back through the mesh to W6QQQ. ✅

MOP vs. The Rest

AspectVARA FM + Winlink1200 Baud PacketMOP Mesh
200B Message TX TimeSeconds of session overhead~2.0 sec~0.6 sec
Beacon / BroadcastLimitedNative (UI frames)Native (short bursts)
Concurrent ListenersOften limited by sessionsUnlimitedUnlimited
Channel EfficiencyPoor for short trafficGoodExcellent
RoutingOften hub-dependentManual / digipeatersAutomatic (beacons)
Data ReadabilityReadableReadableReadable
Integrity / Anti-SpoofingVariesVariesOpen integrity + origin ID
Relay / MeshSession constraintsLimited (digi)Store-and-forward mesh
Emergency ModeConventional proceduresAPRS emergencyAll-relay flood, max TTL
Open SourceVariesYes (Direwolf)Yes (everything)
Cross-PlatformVariesNative everywhereNative everywhere
Central DependencyOften yesNoneNone required
Raw ThroughputVaries~1200 bps~4800 bps

Emergency Protocol

Frame Type 0x06 — EMERGENCY

When an emergency frame is transmitted, every station in the mesh relays it — regardless of role (station, relay, or gateway). Maximum TTL for maximum propagation. Emergency traffic is sacred on amateur radio. The frame floods through the mesh like a shockwave. Every MOP station within reach will display the alert and re-broadcast it.

APRS-Visible Beacons

MOP gateway beacons are transmitted as standard AX.25 UI frames at 1200 baud AFSK. Any APRS station, Direwolf instance, or aprs.fi can see them.

// What any APRS station sees when a MOP gateway beacons: Source: KO6IKR-15 Dest: APMOP0 ← registered MOP tocall Info: !3406.25N/11812.50W#MOP-GW DM04vc INET D:3 P:2 ↑ position ↑ symbol ↑ role ↑ grid ↑ internet ↑ stations ↑ peers // This shows up on APRS maps as a gateway/digi-style symbol with the comment text above.

Actual message traffic uses the custom OFDM modem at 4800 bps. The beacon compatibility layer makes gateways visible to existing APRS infrastructure without any special software.

What's Built

The stack is implemented in Python with a clean separation of layers. Core protocol uses only stdlib; modem features can use optional packages.

mop_modem/ __init__.py ── MOPModem ABC, enums, constants frame.py ── Binary frame encode/decode, CRC32 mac.py ── CSMA/CA state machine mesh.py ── MeshNode: routing, beacons, relay, dedup, spool ax25.py ── AX.25 UI builder, APRS position format ether_server.py ── TCP RF channel simulator (collisions, busy, airtime) ether_modem.py ── TCP modem backend for testing Dependencies: Core protocol: None (pure stdlib Python) OFDM modem: numpy + sounddevice + pyserial AX.25 beacons: None (or Direwolf for TX)

Built & Working

Binary frame format with CRC32. CSMA/CA MAC layer. MeshNode routing brain with beacons, relay, dedup, spool, emergency flood. AX.25 APRS-visible beacons. TCP ether simulator with collision model. Custom OFDM modem — first working version, early tests very promising, needs more testing. 6-station mesh test passes.

🔜

Next Up

Extended OFDM modem testing. Range-limited ether model (force multi-hop). Gateway peering. Integration with MOP client app. On-air testing with FT-991A and FT5D.