From e5c91f382aa363de058b4bd7bb2d1a5fa48b2ad6 Mon Sep 17 00:00:00 2001 From: Lloyd Date: Fri, 6 Mar 2026 21:21:30 +0000 Subject: [PATCH] Add mesh configuration for loop detection and update API endpoint handling --- repeater/engine.py | 4 ++++ repeater/web/api_endpoints.py | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/repeater/engine.py b/repeater/engine.py index 56428b0..ec49dc9 100644 --- a/repeater/engine.py +++ b/repeater/engine.py @@ -918,6 +918,10 @@ class RepeaterHandler(BaseHandler): "rx_delay_base": delays_config.get("rx_delay_base", 0.0), }, "web": self.config.get("web", {}), # Include web configuration + "mesh": { + "loop_detect": self.config.get("mesh", {}).get("loop_detect", "off"), + "global_flood_allow": self.config.get("mesh", {}).get("global_flood_allow", True), + }, }, "public_key": None, } diff --git a/repeater/web/api_endpoints.py b/repeater/web/api_endpoints.py index fda3c21..b9744be 100644 --- a/repeater/web/api_endpoints.py +++ b/repeater/web/api_endpoints.py @@ -1598,10 +1598,20 @@ class APIEndpoints: self.config["kiss"]["baud_rate"] = int(data["kiss_baud_rate"]) applied.append("kiss.baud_rate") + # Update flood loop detection mode + if "loop_detect" in data: + mode = str(data["loop_detect"]).strip().lower() + if mode not in ("off", "minimal", "moderate", "strict"): + return self._error("loop_detect must be one of: off, minimal, moderate, strict") + if "mesh" not in self.config: + self.config["mesh"] = {} + self.config["mesh"]["loop_detect"] = mode + applied.append(f"loop_detect={mode}") + if not applied: return self._error("No valid settings provided") - live_sections = ["repeater", "delays", "radio"] + live_sections = ["repeater", "delays", "radio", "mesh"] if "kiss" in self.config: live_sections.append("kiss") # Save to config file and live update daemon in one operation