net: support multiple concurrent netlink requests

In preparation for generic netlink support

Change-Id: I3f648518800176015cf7435b4e61e6e73c83e796
Refs: #4020
diff --git a/src/net/detail/netlink-socket.hpp b/src/net/detail/netlink-socket.hpp
index e7043fc..15036ec 100644
--- a/src/net/detail/netlink-socket.hpp
+++ b/src/net/detail/netlink-socket.hpp
@@ -28,6 +28,7 @@
 #include "../network-monitor.hpp"
 
 #include <boost/asio/posix/stream_descriptor.hpp>
+#include <map>
 #include <vector>
 
 #ifndef NDN_CXX_HAVE_RTNETLINK
@@ -48,6 +49,9 @@
   void
   joinGroup(int group);
 
+  void
+  registerNotificationCallback(MessageCallback cb);
+
 protected:
   explicit
   NetlinkSocket(boost::asio::io_service& io);
@@ -58,7 +62,7 @@
   open(int protocol);
 
   void
-  startAsyncReceive(MessageCallback cb);
+  registerRequestCallback(uint32_t seq, MessageCallback cb);
 
 private:
   void
@@ -74,7 +78,7 @@
 
 private:
   std::vector<uint8_t> m_buffer; ///< buffer for netlink messages from the kernel
-  MessageCallback m_onMessage; ///< callback invoked when a valid netlink message is received
+  std::map<uint32_t, MessageCallback> m_pendingRequests; ///< request sequence number => callback
 };
 
 class RtnlSocket : public NetlinkSocket
@@ -87,9 +91,7 @@
   open();
 
   void
-  sendDumpRequest(uint16_t nlmsgType);
-
-  using NetlinkSocket::startAsyncReceive;
+  sendDumpRequest(uint16_t nlmsgType, MessageCallback cb);
 };
 
 } // namespace net