net: NetworkMonitor: ignore AWDL interfaces on macOS

Refs: #5074
Change-Id: I5a97dfefda2a43c3dd4460e19725480bbf54835c
diff --git a/ndn-cxx/net/impl/network-monitor-impl-netlink.hpp b/ndn-cxx/net/impl/network-monitor-impl-netlink.hpp
index 78501ae..64616a6 100644
--- a/ndn-cxx/net/impl/network-monitor-impl-netlink.hpp
+++ b/ndn-cxx/net/impl/network-monitor-impl-netlink.hpp
@@ -37,10 +37,11 @@
 
 namespace ndn::net {
 
-class NetworkMonitorImplNetlink : public NetworkMonitorImpl
+class NetworkMonitorImplNetlink final : public NetworkMonitorImpl
 {
 public:
-  /** \brief Initialize netlink socket and start enumerating interfaces.
+  /**
+   * \brief Initialize netlink socket and start enumerating interfaces.
    */
   explicit
   NetworkMonitorImplNetlink(boost::asio::io_service& io);
diff --git a/ndn-cxx/net/impl/network-monitor-impl-noop.hpp b/ndn-cxx/net/impl/network-monitor-impl-noop.hpp
index d0a0d08..f2f2c41 100644
--- a/ndn-cxx/net/impl/network-monitor-impl-noop.hpp
+++ b/ndn-cxx/net/impl/network-monitor-impl-noop.hpp
@@ -28,7 +28,7 @@
 
 namespace ndn::net {
 
-class NetworkMonitorImplNoop : public NetworkMonitorImpl
+class NetworkMonitorImplNoop final : public NetworkMonitorImpl
 {
 public:
   explicit
diff --git a/ndn-cxx/net/impl/network-monitor-impl-osx.cpp b/ndn-cxx/net/impl/network-monitor-impl-osx.cpp
index 0b543d7..44378d5 100644
--- a/ndn-cxx/net/impl/network-monitor-impl-osx.cpp
+++ b/ndn-cxx/net/impl/network-monitor-impl-osx.cpp
@@ -226,7 +226,13 @@
 void
 NetworkMonitorImplOsx::addNewInterface(const std::string& ifName, const IfAddrs& ifaList)
 {
-  shared_ptr<NetworkInterface> interface = makeNetworkInterface();
+  // ignore AWDL interfaces (name starting with "awdl" or "llw"), see bug #5074
+  if (ifName.rfind("awdl", 0) == 0 || ifName.rfind("llw", 0) == 0) {
+    NDN_LOG_DEBUG("ignoring " << ifName);
+    return;
+  }
+
+  auto interface = makeNetworkInterface();
   interface->setName(ifName);
   interface->setState(getInterfaceState(*interface));
   updateInterfaceInfo(*interface, ifaList);
@@ -314,12 +320,12 @@
       case AF_INET: {
         addrFamily = AddressFamily::V4;
 
-        const sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(ifa->ifa_addr);
+        const auto* sin = reinterpret_cast<sockaddr_in*>(ifa->ifa_addr);
         ip::address_v4::bytes_type bytes;
         std::copy_n(reinterpret_cast<const unsigned char*>(&sin->sin_addr), bytes.size(), bytes.begin());
         ipAddr = ip::address_v4(bytes);
 
-        const sockaddr_in* sinMask = reinterpret_cast<sockaddr_in*>(ifa->ifa_netmask);
+        const auto* sinMask = reinterpret_cast<sockaddr_in*>(ifa->ifa_netmask);
         std::copy_n(reinterpret_cast<const unsigned char*>(&sinMask->sin_addr), bytes.size(), bytes.begin());
         prefixLength = computePrefixLength(bytes);
         break;
@@ -328,7 +334,7 @@
       case AF_INET6: {
         addrFamily = AddressFamily::V6;
 
-        const sockaddr_in6* sin6 = reinterpret_cast<sockaddr_in6*>(ifa->ifa_addr);
+        const auto* sin6 = reinterpret_cast<sockaddr_in6*>(ifa->ifa_addr);
         ip::address_v6::bytes_type bytes;
         std::copy_n(reinterpret_cast<const unsigned char*>(&sin6->sin6_addr), bytes.size(), bytes.begin());
         ip::address_v6 v6Addr(bytes);
@@ -336,14 +342,14 @@
           v6Addr.scope_id(if_nametoindex(netif.getName().data()));
         ipAddr = v6Addr;
 
-        const sockaddr_in6* sinMask = reinterpret_cast<sockaddr_in6*>(ifa->ifa_netmask);
+        const auto* sinMask = reinterpret_cast<sockaddr_in6*>(ifa->ifa_netmask);
         std::copy_n(reinterpret_cast<const unsigned char*>(&sinMask->sin6_addr), bytes.size(), bytes.begin());
         prefixLength = computePrefixLength(bytes);
         break;
       }
 
       case AF_LINK: {
-        const sockaddr_dl* sdl = reinterpret_cast<sockaddr_dl*>(ifa->ifa_addr);
+        const auto* sdl = reinterpret_cast<sockaddr_dl*>(ifa->ifa_addr);
         netif.setIndex(sdl->sdl_index);
 
         if (sdl->sdl_type == IFT_ETHER && sdl->sdl_alen == ethernet::ADDR_LEN) {
@@ -356,6 +362,7 @@
         }
         else {
           netif.setType(InterfaceType::UNKNOWN);
+          NDN_LOG_TRACE(netif.getName() << " has unknown type " << sdl->sdl_type);
         }
         break;
       }
@@ -365,7 +372,7 @@
       netif.setEthernetBroadcastAddress(ethernet::getBroadcastAddress());
 
       if (addrFamily == AddressFamily::V4 && ifa->ifa_broadaddr != nullptr) {
-        const sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(ifa->ifa_broadaddr);
+        const auto* sin = reinterpret_cast<sockaddr_in*>(ifa->ifa_broadaddr);
         ip::address_v4::bytes_type bytes;
         std::copy_n(reinterpret_cast<const unsigned char*>(&sin->sin_addr), bytes.size(), bytes.begin());
         broadcastAddr = ip::address_v4(bytes);
diff --git a/ndn-cxx/net/impl/network-monitor-impl-osx.hpp b/ndn-cxx/net/impl/network-monitor-impl-osx.hpp
index 099ae8b..f1866ca 100644
--- a/ndn-cxx/net/impl/network-monitor-impl-osx.hpp
+++ b/ndn-cxx/net/impl/network-monitor-impl-osx.hpp
@@ -42,12 +42,12 @@
 
 class IfAddrs;
 
-class NetworkMonitorImplOsx : public NetworkMonitorImpl
+class NetworkMonitorImplOsx final : public NetworkMonitorImpl
 {
 public:
   NetworkMonitorImplOsx(boost::asio::io_service& io);
 
-  ~NetworkMonitorImplOsx();
+  ~NetworkMonitorImplOsx() final;
 
   uint32_t
   getCapabilities() const final
diff --git a/ndn-cxx/net/network-monitor-stub.cpp b/ndn-cxx/net/network-monitor-stub.cpp
index bb8e49e..1c079c5 100644
--- a/ndn-cxx/net/network-monitor-stub.cpp
+++ b/ndn-cxx/net/network-monitor-stub.cpp
@@ -31,7 +31,7 @@
 
 namespace ndn::net {
 
-class NetworkMonitorImplStub : public NetworkMonitorImpl
+class NetworkMonitorImplStub final : public NetworkMonitorImpl
 {
 public:
   explicit