From 2cfd4a4207833dc82c081d2da91f5ae93f23449d Mon Sep 17 00:00:00 2001 From: Yuri Benditovich Date: Sat, 24 Jun 2023 13:36:01 +0300 Subject: [PATCH] netkvmp-prot: add device notification to trigger working thread When network devices come to enabled/disabled state or added/removed - process the change immediately and not only via periodical polling Signed-off-by: Yuri Benditovich --- NetKVM/ProtocolService/ProtocolService.cpp | 16 +++++++++++++--- NetKVM/ProtocolService/stdafx.h | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/NetKVM/ProtocolService/ProtocolService.cpp b/NetKVM/ProtocolService/ProtocolService.cpp index 02fb2907..eccd5e8b 100644 --- a/NetKVM/ProtocolService/ProtocolService.cpp +++ b/NetKVM/ProtocolService/ProtocolService.cpp @@ -395,7 +395,7 @@ public: m_Filter.u.DeviceInterface.ClassGuid = GUID_DEVINTERFACE_NET; Register(&m_Filter); } - CM_NOTIFY_FILTER m_Filter; + CM_NOTIFY_FILTER m_Filter = {}; }; class CNetkvmDeviceFile @@ -768,7 +768,8 @@ public: class CProtocolServiceImplementation : public CServiceImplementation, - public CThreadOwner + public CThreadOwner, + public CDeviceNotificationOwner { public: CProtocolServiceImplementation() : @@ -812,6 +813,7 @@ protected: } virtual void ThreadProc() { + CNetworkDeviceNotification dn(*this); CoInitialize(NULL); do { @@ -856,7 +858,15 @@ private: CEvent m_ThreadEvent; CVirtioAdaptersArray m_Adapters; CMutex m_AdaptersMutex; - bool m_NoRestoreOnStop = false; + bool Notification(CM_NOTIFY_ACTION action, PCM_NOTIFY_EVENT_DATA data, DWORD dataSize) override + { + UNREFERENCED_PARAMETER(action); + UNREFERENCED_PARAMETER(data); + UNREFERENCED_PARAMETER(dataSize); + Log(" => Network change notification"); + m_ThreadEvent.Set(); + return true; + } private: NETKVMD_ADAPTER m_IoctlBuffer[256]; void SyncVirtioAdapters() diff --git a/NetKVM/ProtocolService/stdafx.h b/NetKVM/ProtocolService/stdafx.h index 471f49f9..40cc41be 100644 --- a/NetKVM/ProtocolService/stdafx.h +++ b/NetKVM/ProtocolService/stdafx.h @@ -17,6 +17,7 @@ #include #include #include +#include #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit //#include