From 8b8c1881a83e99dbb045abc7210d7f0fc37f53f9 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sun, 11 Jan 2026 17:33:23 -0600 Subject: [PATCH] Add NoHopPorts --- src/mesh/Router.cpp | 7 +++++++ src/platform/portduino/PortduinoGlue.cpp | 3 +++ src/platform/portduino/PortduinoGlue.h | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mesh/Router.cpp b/src/mesh/Router.cpp index cb67952b7..149cafe88 100644 --- a/src/mesh/Router.cpp +++ b/src/mesh/Router.cpp @@ -757,6 +757,13 @@ void Router::handleReceived(meshtastic_MeshPacket *p, RxSource src) skipHandle = true; } } + for (const auto &port : portduino_config.nohop_ports) { + if (port == p->decoded.portnum) { + p->hop_start -= p->hop_limit; + p->hop_limit = 0; + break; + } + } #endif } else { printPacket("packet decoding failed or skipped (no PSK?)", p); diff --git a/src/platform/portduino/PortduinoGlue.cpp b/src/platform/portduino/PortduinoGlue.cpp index 1e1fa588b..707b44992 100644 --- a/src/platform/portduino/PortduinoGlue.cpp +++ b/src/platform/portduino/PortduinoGlue.cpp @@ -850,6 +850,9 @@ bool loadConfig(const char *configPath) portduino_config.whitelist_enabled = true; } } + if (yamlConfig["Routing"]["NoHopPorts"]) { + portduino_config.nohop_ports = (yamlConfig["Routing"]["NoHopPorts"]).as>(); + } } if (yamlConfig["General"]) { portduino_config.MaxNodes = (yamlConfig["General"]["MaxNodes"]).as(200); diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index d9c050d33..f712c3619 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -188,6 +188,7 @@ extern struct portduino_config_struct { // Routing bool whitelist_enabled = false; std::vector whitelist_ports = {}; + std::vector nohop_ports = {}; // General std::string mac_address = ""; @@ -524,9 +525,10 @@ extern struct portduino_config_struct { } // Routing - if (whitelist_enabled) { + if (whitelist_enabled || nohop_ports.size() > 0) { out << YAML::Key << "Routing" << YAML::Value << YAML::BeginMap; out << YAML::Key << "WhitelistPorts" << YAML::Value << whitelist_ports; + out << YAML::Key << "NoHopPorts" << YAML::Value << nohop_ports; out << YAML::EndMap; // Routing }