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 }