Skip to content

Make the LoRa interface IFAC configurable through Provisioning - #117

Open
jmpuch wants to merge 1 commit into
attermann:masterfrom
jmpuch:microreticulum-ifac-provisioning
Open

jmpuch wants to merge 1 commit into
attermann:masterfrom
jmpuch:microreticulum-ifac-provisioning

Conversation

@jmpuch

@jmpuch jmpuch commented Sep 26, 2026

Copy link
Copy Markdown

Problem

A microReticulum_Firmware node cannot use an interface access code (IFAC) on its LoRa interface, so it cannot share a LoRa channel with RNS nodes that protect it with network_name / passphrase (Python RNS, RTNode…): its packets carry no code and are dropped, and theirs can't be read.

Solution

Depends on attermann/microReticulum#91 (IFAC support in the library, Interface::setup_ifac()); this PR won't build against a library without it.

  • Two fields in the General Provisioning namespace, applied at boot:

    • 8 — "LoRa IFAC Network Name" (FF_REBOOT_REQUIRED)
    • 9 — "LoRa IFAC Passphrase" (FF_REBOOT_REQUIRED | FF_SECRET: persisted, never returned by GET_STATE; deliberately not FF_WRITE_ONLY, which isn't persisted)

    Both empty (default) = IFAC off, so existing nodes are unaffected. Being ordinary Provisioning fields, they also show up in the Console's Transport Config tab.

  • rnode_ifac.py (repository root, next to rnodelogs.py): get / set <file.json> / off over USB via CMD_PROVISION_REQ. It reads the passphrase from a JSON file ({"network_name": ..., "passphrase": ...}) rather than the command line, commits, then reboots the node.

  • docs/Provisioning.md: new "LoRa interface access code (IFAC)" section.

Testing

  • nRF52 hardware — Heltec T114 (built with microReticulum#91), IFAC set with the tool: on a real LoRa link with a node running RTNode-HeltecV4 using the same IFAC, announces propagate and a Link + NomadNet page request from Python RNS instances two and three hops away succeeds. rnode_ifac.py get reads the network name back after reboot.
  • Builds of this branch against microReticulum#91: wiscore_rak4631-local (nRF52) and heltec_wifi_lora_32_V4-local (ESP32-S3) succeed. ttgo-lora32-v21-local fails in Pages.h (wifi_mode, udp_interface, wr_device_ip not declared) — the same error happens on unmodified master, unrelated to this change.
  • Not tested on ESP32 hardware.

🤖 Generated with Claude Code

The LoRa interface had no way to use an interface access code, so a node
couldn't join a LoRa channel shared with IFAC-protected RNS nodes.

Two fields in the General namespace, applied at boot:
- 8  "LoRa IFAC Network Name" (FF_REBOOT_REQUIRED)
- 9  "LoRa IFAC Passphrase"   (FF_REBOOT_REQUIRED | FF_SECRET: persisted,
     never returned by GET_STATE)
Both empty = IFAC off. Relies on Interface::setup_ifac() from microReticulum
(attermann/microReticulum#91).

rnode_ifac.py sets, reads back (network name only) or clears them over USB,
reading the passphrase from a file; documented in docs/Provisioning.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant