fix(webconfig): read the LAN address after pinning the route

startLanMode() took the caller's IP, read before the route lock. A
Wi-Fi/Ethernet switch in between left WebConfig locked to the new link
while advertising the old link's address. It now reads the selected
link's address after lockSwitching(), as startOTAUpdate() already does.
This commit is contained in:
agessaman
2026-09-19 10:53:39 -07:00
parent eb39ca59e7
commit 3c39908720
4 changed files with 6 additions and 6 deletions
+1 -2
View File
@@ -1512,8 +1512,7 @@ bool MyMesh::startWebConfig(bool force_ap, char* reply) {
}
_webconfig->startSetupMode(reply);
} else if (activeNetworkLink().isConnected()) {
_webconfig->startLanMode(activeNetworkLink().localIP(),
!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
_webconfig->startLanMode(!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
} else if (!mqttNetworkSetupComplete(_cli.getObserverPrefs())) {
_webconfig->startSetupMode(reply);
} else {
+1 -2
View File
@@ -1314,8 +1314,7 @@ bool MyMesh::startWebConfig(bool force_ap, char* reply) {
}
_webconfig->startSetupMode(reply);
} else if (activeNetworkLink().isConnected()) {
_webconfig->startLanMode(activeNetworkLink().localIP(),
!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
_webconfig->startLanMode(!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
} else if (!mqttNetworkSetupComplete(_cli.getObserverPrefs())) {
_webconfig->startSetupMode(reply);
} else {
+3 -1
View File
@@ -301,7 +301,7 @@ bool WebConfigServer::startSetupMode(char reply[]) {
return true;
}
bool WebConfigServer::startLanMode(IPAddress ip, bool initial_setup, char reply[]) {
bool WebConfigServer::startLanMode(bool initial_setup, char reply[]) {
if (_mode != MODE_OFF || _stopping) {
strcpy(reply, "Err: webconfig busy");
return false;
@@ -313,6 +313,8 @@ bool WebConfigServer::startLanMode(IPAddress ip, bool initial_setup, char reply[
}
activeNetworkLink().lockSwitching();
_network_locked = true;
// Read the address only once the route is pinned, so it names the locked link.
const IPAddress ip = activeNetworkLink().localIP();
if (!activeNetworkLink().isConnected() || ip == IPAddress()) {
activeNetworkLink().unlockSwitching();
_network_locked = false;
+1 -1
View File
@@ -84,7 +84,7 @@ public:
static bool isRebootPending();
bool startSetupMode(char reply[]); // open SoftAP + DNS captive portal
bool startLanMode(IPAddress ip, bool initial_setup, char reply[]);
bool startLanMode(bool initial_setup, char reply[]); // bind to the selected network
void requestStop(); // stop listening and detach this session
void tick(uint32_t now); // call every loop iteration