diff --git a/src/util/detail/network-monitor-impl-noop.hpp b/src/util/detail/network-monitor-impl-noop.hpp
new file mode 100644
index 0000000..944e219
--- /dev/null
+++ b/src/util/detail/network-monitor-impl-noop.hpp
@@ -0,0 +1,61 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2017 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ *
+ * @author Davide Pesavento <davide.pesavento@lip6.fr>
+ */
+
+#ifndef NDN_UTIL_NETWORK_MONITOR_IMPL_NOOP_HPP
+#define NDN_UTIL_NETWORK_MONITOR_IMPL_NOOP_HPP
+
+#include "../network-monitor.hpp"
+
+namespace ndn {
+namespace util {
+
+class NetworkMonitor::Impl
+{
+public:
+  Impl(NetworkMonitor& nm, boost::asio::io_service& io)
+  {
+  }
+
+  uint32_t
+  getCapabilities() const
+  {
+    return NetworkMonitor::CAP_NONE;
+  }
+
+  shared_ptr<NetworkInterface>
+  getNetworkInterface(const std::string&) const
+  {
+    return {};
+  }
+
+  std::vector<shared_ptr<NetworkInterface>>
+  listNetworkInterfaces() const
+  {
+    return {};
+  }
+};
+
+} // namespace util
+} // namespace ndn
+
+#endif // NDN_UTIL_NETWORK_MONITOR_IMPL_NOOP_HPP
diff --git a/src/util/detail/network-monitor-impl-osx.hpp b/src/util/detail/network-monitor-impl-osx.hpp
index c36866a..747aefd 100644
--- a/src/util/detail/network-monitor-impl-osx.hpp
+++ b/src/util/detail/network-monitor-impl-osx.hpp
@@ -45,6 +45,13 @@
 
   ~Impl();
 
+  uint32_t
+  getCapabilities() const
+  {
+    return NetworkMonitor::CAP_NONE;
+    /// \todo #3817 change to CAP_ENUM | CAP_IF_ADD_REMOVE | CAP_STATE_CHANGE | CAP_ADDR_ADD_REMOVE
+  }
+
   shared_ptr<NetworkInterface>
   getNetworkInterface(const std::string& ifname) const;
 
diff --git a/src/util/detail/network-monitor-impl-rtnl.hpp b/src/util/detail/network-monitor-impl-rtnl.hpp
index 18996f9..db31f61 100644
--- a/src/util/detail/network-monitor-impl-rtnl.hpp
+++ b/src/util/detail/network-monitor-impl-rtnl.hpp
@@ -53,6 +53,16 @@
 
   ~Impl();
 
+  uint32_t
+  getCapabilities() const
+  {
+    return NetworkMonitor::CAP_ENUM |
+           NetworkMonitor::CAP_IF_ADD_REMOVE |
+           NetworkMonitor::CAP_STATE_CHANGE |
+           NetworkMonitor::CAP_MTU_CHANGE |
+           NetworkMonitor::CAP_ADDR_ADD_REMOVE;
+  }
+
   shared_ptr<NetworkInterface>
   getNetworkInterface(const std::string& ifname) const;
 
diff --git a/src/util/network-monitor.cpp b/src/util/network-monitor.cpp
index 6689711..62d63a1 100644
--- a/src/util/network-monitor.cpp
+++ b/src/util/network-monitor.cpp
@@ -30,34 +30,7 @@
 #elif defined(NDN_CXX_HAVE_RTNETLINK)
 #include "detail/network-monitor-impl-rtnl.hpp"
 #else
-
-namespace ndn {
-namespace util {
-
-class NetworkMonitor::Impl
-{
-public:
-  Impl(NetworkMonitor&, boost::asio::io_service&)
-  {
-    BOOST_THROW_EXCEPTION(Error("Network monitoring is not supported on this platform"));
-  }
-
-  shared_ptr<NetworkInterface>
-  getNetworkInterface(const std::string&) const
-  {
-    return {};
-  }
-
-  std::vector<shared_ptr<NetworkInterface>>
-  listNetworkInterfaces() const
-  {
-    return {};
-  }
-};
-
-} // namespace util
-} // namespace ndn
-
+#include "detail/network-monitor-impl-noop.hpp"
 #endif
 
 namespace ndn {
@@ -70,6 +43,12 @@
 
 NetworkMonitor::~NetworkMonitor() = default;
 
+uint32_t
+NetworkMonitor::getCapabilities() const
+{
+  return m_impl->getCapabilities();
+}
+
 shared_ptr<NetworkInterface>
 NetworkMonitor::getNetworkInterface(const std::string& ifname) const
 {
diff --git a/src/util/network-monitor.hpp b/src/util/network-monitor.hpp
index a9cf60b..59b9dc7 100644
--- a/src/util/network-monitor.hpp
+++ b/src/util/network-monitor.hpp
@@ -82,6 +82,26 @@
 
   ~NetworkMonitor();
 
+  enum Capability : uint32_t {
+    /// NetworkMonitor is not supported and is a no-op
+    CAP_NONE = 0,
+    /// listNetworkInterfaces() and getNetworkInterface() are supported
+    CAP_ENUM = 1 << 0,
+    /// NetworkMonitor onInterfaceAdded and onInterfaceRemoved signals are supported
+    CAP_IF_ADD_REMOVE = 1 << 1,
+    /// NetworkInterface onStateChanged signal is supported
+    CAP_STATE_CHANGE = 1 << 2,
+    /// NetworkInterface onMtuChanged signal is supported
+    CAP_MTU_CHANGE = 1 << 3,
+    /// NetworkInterface onAddressAdded and onAddressRemoved signals are supported
+    CAP_ADDR_ADD_REMOVE = 1 << 4
+  };
+
+  /** \return bitwise OR'ed \p Capability supported on current platform
+   */
+  uint32_t
+  getCapabilities() const;
+
   shared_ptr<NetworkInterface>
   getNetworkInterface(const std::string& ifname) const;
 
