mgmt: Initial fib manager with support for fib/add-nexthop

fw: Added FaceId to Face conversion method

Linked InternalFace's sendInterest to FibManager's
onFibRequest

refs: #1138

Change-Id: I0b18f2d41c9ba9d8749c586e3553b51a1e8b1269
diff --git a/daemon/mgmt/fib-manager.hpp b/daemon/mgmt/fib-manager.hpp
new file mode 100644
index 0000000..214b426
--- /dev/null
+++ b/daemon/mgmt/fib-manager.hpp
@@ -0,0 +1,88 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NFD_MGMT_FIB_MANAGER_HPP
+#define NFD_MGMT_FIB_MANAGER_HPP
+
+#include "common.hpp"
+#include "face/face.hpp"
+#include "mgmt/manager-base.hpp"
+
+namespace nfd {
+
+class AppFace;
+class Face;
+class Strategy;
+class Forwarder;
+class Fib;
+
+class FibManager : public ManagerBase
+{
+public:
+
+  FibManager(Fib& fib, function<shared_ptr<Face>(FaceId)> getFace);
+
+  void
+  onFibRequest(const Interest& request);
+
+  const Name&
+  getRequestPrefix() const { return FIB_MANAGER_REQUEST_PREFIX; }
+
+private:
+
+  void
+  fibInsert(const Interest& request);
+
+  void
+  fibDelete(const Interest& request);
+
+  void
+  fibAddNextHop(const Interest& request);
+
+  void
+  fibRemoveNextHop(const Interest& request);
+
+  void
+  fibStrategy(const Interest& request);
+
+  // void
+  // onConfig(ConfigFile::Node section, bool isDryRun);
+
+private:
+
+  Fib& m_managedFib;
+  function<shared_ptr<Face>(FaceId)> m_getFace;
+  std::map<Name, shared_ptr<Strategy> > m_namespaceToStrategyMap;
+
+
+
+  typedef function<void(FibManager*,
+                        const Interest&)> VerbProcessor;
+
+  typedef std::map<Name::Component, VerbProcessor> VerbDispatchTable;
+
+  typedef std::pair<Name::Component, VerbProcessor> VerbAndProcessor;
+
+
+  const VerbDispatchTable m_verbDispatch;
+
+  static const Name FIB_MANAGER_REQUEST_PREFIX;
+  static const size_t FIB_MANAGER_REQUEST_COMMAND_MIN_NCOMPS;
+  static const size_t FIB_MANAGER_REQUEST_SIGNED_INTEREST_NCOMPS;
+
+  static const Name::Component FIB_MANAGER_REQUEST_VERB_INSERT;
+  static const Name::Component FIB_MANAGER_REQUEST_VERB_DELETE;
+  static const Name::Component FIB_MANAGER_REQUEST_VERB_ADD_NEXTHOP;
+  static const Name::Component FIB_MANAGER_REQUEST_VERB_REMOVE_NEXTHOP;
+  static const Name::Component FIB_MANAGER_REQUEST_VERB_STRATEGY;
+
+  static const VerbAndProcessor FIB_MANAGER_REQUEST_VERBS[];
+
+};
+
+} // namespace nfd
+
+#endif // NFD_MGMT_FIB_MANAGER_HPP