blob: 59a242b7fca9d66a9df8f673a294091887045c00 [file] [log] [blame]
/* -*- 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,
shared_ptr<AppFace> face);
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