docs(series4): record a known-good RV55 config, and the office topology it reveals

Read off a Micromate modem deployed and working for months.  Recorded because
this knowledge currently lives only in a modem's web UI, and TMI has seven
working units to diff a misbehaving one against -- the fastest diagnostic
available.

Serial: PAD mode, 115200 8N1, flow control None.  (Series III units use 38400 --
a modem moved between series needs this changed and nobody would think to.)

PAD: TCP, auto-answer ON, listening port 9034, destination 50.197.32.91:12345,
idle timeout 2 min, data forwarding 500 ms, MTU 1304, TCP keepalive OFF.

Cellular: APN mw01.VZWSTATIC -- Verizon's static-IP APN, which confirms the fleet
has fixed addresses and rules out any "the IP moved" explanation.

TOPOLOGY this answers: the office ACH listener is on port 12345 at 50.197.32.91,
and field modems listen on 9034 for THOR to dial in.  Both were open questions.

Two things worth questioning in the config, flagged as hypothesis not finding:

  * TCP keepalive is Off, so nothing detects a half-open session from the modem
    side -- the 2-minute idle timeout is the only reaper.
  * An idle timer can be held open indefinitely by a client that keeps writing.
    THOR polls every 30 s (measured).  If it holds a session the unit stopped
    answering on and keeps writing into it, each write plausibly resets the idle
    timer, the session never ages out, the PAD's single slot stays occupied, and
    all new inbound fails -- while ACEmanager answers on its own service.
    Whether one-directional traffic resets that timer is NOT confirmed, and the
    single-slot behaviour is untested on a real modem.  mm_probe --slots tests
    the latter directly.

Adds an ordered diff checklist for a misbehaving modem, noting that "listen for
connections" and "destination address" fail in opposite directions -- inbound
broken with call-home working points at the listener; call-home broken with
inbound working points at the destination.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ru8Lg9HkkYvX9VWWo65SmL
This commit is contained in:
2026-09-25 15:01:46 -04:00
co-authored by Claude Opus 5
parent 704cd7b111
commit 7b2aa871bd
+74
View File
@@ -2067,6 +2067,80 @@ leak is reproducible and attributable to a specific UI action.
3. **Log what changed, not what did not.** `timed out: False` 178 times is
noise; the five `True` entries are the signal, and they are buried.
## Known-good RV55 config for a Micromate (2026-09-25)
Read off a unit **deployed and working for months**. This is the reference to
diff a misbehaving modem against — the fastest diagnostic available, since TMI
has seven working units and only one that misbehaves.
### Serial interface — Port 1
| field | value | note |
|---|---|---|
| Mode | **PAD** | |
| **Baud rate** | **115200** | Micromate rate. Series III units use **38400** — a modem moved between series needs this changed |
| Data bits / Parity / Stop bits | 8 / None / 1 | |
| Flow control | **None** | hardware FC blocks TX when the pins are not wired |
### PAD settings — Port 1
| field | value | note |
|---|---|---|
| PAD mode | TCP | |
| **Listen for connections (auto-answer)** | **On** | this is what lets THOR dial *in*. Off, and only call-home works — which would present exactly as "unreachable but it still calls home" |
| **Listening port** | **9034** | the port THOR dials |
| **Destination address** | **50.197.32.91** | the office public IP — where the unit calls home *to* |
| **Destination port** | **12345** | the office ACH listener |
| MTU | 1304 | |
| Data forwarding timeout | 500 ms | |
| **Idle timeout** | **2 min** | matches the value this project settled on for Series III |
| Connect timeout | ≈1.08 min | |
| Start only when WAN available | Off | |
| TCP reconnect on disconnect | Off (locked) | |
| **TCP keepalive** | **Off** | ⚠ see below |
| Keepalive idle / interval / count | 30 s / 10 s / 3 | configured but inactive while keepalive is Off |
### Cellular
APN `mw01.VZWSTATIC` — Verizon's **static-IP** APN, which confirms the fleet's
addresses are fixed and rules out any "the IP moved" explanation. IPv4 only,
MTU 1428, radio firmware VERIZON.
### ⚠ Two things worth questioning in this config
**TCP keepalive is Off.** Nothing detects a half-open TCP session from the
modem's side; the 2-minute **idle** timeout is the only reaper.
**And an idle timer can be held open indefinitely by a client that keeps
writing.** THOR polls every 30 s (measured — see the polling section). If it
holds a session the unit has stopped answering on, and keeps writing into it,
each write plausibly resets the modem's idle timer. The session then never ages
out, the PAD's single slot stays occupied, and every new inbound connection
fails — while ACEmanager keeps answering on its own separate service.
⚠ **Hypothesis.** Whether traffic in one direction resets that timer is not
confirmed, and the single-slot behaviour has not been tested on a real modem.
`bridges/mm_probe.py --slots N` tests the second part directly.
Turning **keepalive On** would give the modem an independent way to notice a
dead peer, rather than depending on an idle timer a chatty client can hold open.
That is a change to make deliberately and one modem at a time.
### What to diff on a misbehaving modem
In rough order of likelihood for "worked at first, then stopped":
1. **Idle timeout** — 0/disabled lets a stale session hold the slot forever
2. **Listen for connections** — Off means inbound never works, but call-home still does
3. **Baud rate** — 115200 for Micromate, 38400 for Series III
4. **Listening port** — must match what THOR dials
5. **Destination address/port** — wrong here breaks call-home but *not* inbound
6. **Data forwarding timeout** and **MTU** — affect framing, not reachability
Note 2 and 5 fail in opposite directions, which is diagnostic in itself: inbound
broken with call-home working points at the listener; call-home broken with
inbound working points at the destination.
## Thor's conventions vs the protocol's requirements
**SFM is not meant to reimplement Thor.** Thor is the only available teacher of