From b8ffff399dae44351cf7cf12beaef78551ccf5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=85dne=20Hovda?= Date: Wed, 20 May 2026 19:24:43 +0200 Subject: [PATCH] extosdep: notify network config updates --- osdep/ExtOsdep.cpp | 13 +++++++++++++ osdep/ExtOsdep.hpp | 8 ++++++++ service/OneService.cpp | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/osdep/ExtOsdep.cpp b/osdep/ExtOsdep.cpp index 4efab5a6c0..771668d72b 100644 --- a/osdep/ExtOsdep.cpp +++ b/osdep/ExtOsdep.cpp @@ -256,6 +256,18 @@ bool ExtOsdep::getBindAddrs(std::map& ret) return resp->result; } +void ExtOsdep::configUpdate(uint64_t nwid, uint64_t revision) +{ + zt_eod_msg_configupdate msg; + memset(&msg, 0, sizeof(msg)); + msg.cmd = ZT_EOD_MSG_CONFIGUPDATE; + msg.nwid = nwid; + msg.revision = revision; + + Mutex::Lock l(eodMutex); + __eodSend(msg); +} + ExtOsdepTap::ExtOsdepTap( const char* homePath, const MAC& mac, @@ -499,6 +511,7 @@ bool ExtOsdepTap::removeIp(const InetAddress& ip) for (auto i = allIps.begin(); i != allIps.end(); ++i) { if (*i == ip) { doRemoveIp(*i); + allIps.erase(i); return true; } } diff --git a/osdep/ExtOsdep.hpp b/osdep/ExtOsdep.hpp index d7028902c2..c1951239fe 100644 --- a/osdep/ExtOsdep.hpp +++ b/osdep/ExtOsdep.hpp @@ -34,6 +34,7 @@ #define ZT_EOD_MSG_ADDROUTERESP 17 #define ZT_EOD_MSG_DELROUTE 18 #define ZT_EOD_MSG_DELROUTERESP 19 +#define ZT_EOD_MSG_CONFIGUPDATE 20 struct zt_eod_msg_addtap { unsigned char cmd; @@ -105,6 +106,12 @@ struct zt_eod_msg_route { unsigned char src[16]; } __attribute__((packed)); +struct zt_eod_msg_configupdate { + unsigned char cmd; + uint64_t nwid; + uint64_t revision; +} __attribute__((packed)); + struct zt_eod_mgmt_req { uint32_t method; uint32_t pathlen; @@ -144,6 +151,7 @@ class ExtOsdep { static void routeAddDel(bool, const InetAddress& target, const InetAddress& via, const InetAddress& src, const char* ifaceName); static bool getBindAddrs(std::map&); + static void configUpdate(uint64_t nwid, uint64_t revision); static bool mgmtRecv(void* cookie, void* data, unsigned long len, std::function); static bool mgmtWritable(void*); diff --git a/service/OneService.cpp b/service/OneService.cpp index 227b575f7e..d937586496 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -3607,6 +3607,9 @@ class OneServiceImpl : public OneService { #endif syncManagedStuff(n, true, true, true); n.tap()->setMtu(nwc->mtu); +#ifdef ZT_EXTOSDEP + ExtOsdep::configUpdate(nwid, (uint64_t)nwc->netconfRevision); +#endif } else { _nets.erase(nwid); @@ -3619,6 +3622,9 @@ class OneServiceImpl : public OneService { if (n.tap()) { // sanity check #if defined(__WINDOWS__) && ! defined(ZT_SDK) std::string winInstanceId(((WindowsEthernetTap*)(n.tap().get()))->instanceId()); +#endif +#ifdef ZT_EXTOSDEP + ExtOsdep::configUpdate(nwid, (uint64_t)n.config().netconfRevision); #endif *nuptr = (void*)0; n.tap().reset();