blob: cfd21c95ad4a3cb43872afa2678208ae39d50a3b [file] [log] [blame]
Jiewen Tana0497d82015-02-02 21:59:18 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Ashlesh Gawande0421bc62020-05-08 20:42:19 -07002/*
Ashlesh Gawande0db4d4d2020-02-05 20:30:02 -08003 * Copyright (c) 2014-2020, The University of Memphis,
Jiewen Tana0497d82015-02-02 21:59:18 -08004 * Regents of the University of California,
5 * Arizona Board of Regents.
6 *
7 * This file is part of NLSR (Named-data Link State Routing).
8 * See AUTHORS.md for complete list of NLSR authors and contributors.
9 *
10 * NLSR is free software: you can redistribute it and/or modify it under the terms
11 * of the GNU General Public License as published by the Free Software Foundation,
12 * either version 3 of the License, or (at your option) any later version.
13 *
14 * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 * PURPOSE. See the GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070020 */
Jiewen Tana0497d82015-02-02 21:59:18 -080021
laqinfan35731852017-08-08 06:17:39 -050022 /*! \file dataset-interest-handler.hpp
23
24 This file details a class that is used by NLSRC and other command-line
25 tools to examine the state of NLSR. This class doesn't only handle interest
26 from local host, but also handle interests from remote router.
27 This system is not designed to
28 be used by routers to publish data to each other.
29 */
30
31#ifndef NLSR_PUBLISHER_DATASET_INTEREST_HANDLER_HPP
32#define NLSR_PUBLISHER_DATASET_INTEREST_HANDLER_HPP
33
34#include "route/routing-table-entry.hpp"
35#include "route/routing-table.hpp"
36#include "route/nexthop-list.hpp"
37#include "lsdb.hpp"
38#include "logger.hpp"
Jiewen Tana0497d82015-02-02 21:59:18 -080039
laqinfand22da512017-05-25 17:29:53 -050040#include <ndn-cxx/mgmt/dispatcher.hpp>
Jiewen Tana0497d82015-02-02 21:59:18 -080041#include <ndn-cxx/face.hpp>
laqinfand22da512017-05-25 17:29:53 -050042#include <boost/noncopyable.hpp>
Jiewen Tana0497d82015-02-02 21:59:18 -080043
44namespace nlsr {
Nick Gordon114537f2017-08-09 14:51:37 -050045namespace dataset {
laqinfan35731852017-08-08 06:17:39 -050046const ndn::Name::Component ADJACENCY_COMPONENT = ndn::Name::Component{"adjacencies"};
47const ndn::Name::Component NAME_COMPONENT = ndn::Name::Component{"names"};
48const ndn::Name::Component COORDINATE_COMPONENT = ndn::Name::Component{"coordinates"};
Nick Gordon114537f2017-08-09 14:51:37 -050049} // namespace dataset
50
Nick G97e34942016-07-11 14:46:27 -050051/*!
laqinfan35731852017-08-08 06:17:39 -050052 \brief Class to publish all dataset
laqinfand22da512017-05-25 17:29:53 -050053 \sa https://redmine.named-data.net/projects/nlsr/wiki/LSDB_DataSet
laqinfan35731852017-08-08 06:17:39 -050054 \sa https://redmine.named-data.net/projects/nlsr/wiki/Routing_Table_DataSet
Jiewen Tana0497d82015-02-02 21:59:18 -080055 */
laqinfan35731852017-08-08 06:17:39 -050056class DatasetInterestHandler : boost::noncopyable
Jiewen Tana0497d82015-02-02 21:59:18 -080057{
58public:
59 class Error : std::runtime_error
60 {
61 public:
62 explicit
63 Error(const std::string& what)
64 : std::runtime_error(what)
65 {
66 }
67 };
68
Ashlesh Gawande85998a12017-12-07 22:22:13 -060069 DatasetInterestHandler(ndn::mgmt::Dispatcher& dispatcher,
70 const Lsdb& lsdb,
71 const RoutingTable& rt);
Vince Lehmand6bb3fa2015-04-24 14:21:39 -050072
73private:
laqinfan35731852017-08-08 06:17:39 -050074 /*! \brief set dispatcher for localhost or remote router
laqinfand22da512017-05-25 17:29:53 -050075 */
Vince Lehmand6bb3fa2015-04-24 14:21:39 -050076 void
laqinfand22da512017-05-25 17:29:53 -050077 setDispatcher(ndn::mgmt::Dispatcher& dispatcher);
Vince Lehmand6bb3fa2015-04-24 14:21:39 -050078
laqinfan35731852017-08-08 06:17:39 -050079 /*! \brief provide routing-table dataset
80 */
81 void
82 publishRtStatus(const ndn::Name& topPrefix, const ndn::Interest& interest,
83 ndn::mgmt::StatusDatasetContext& context);
84
Ashlesh Gawande57a87172020-05-09 19:47:06 -070085 /*! \brief provide LSA status dataset
laqinfand22da512017-05-25 17:29:53 -050086 */
Ashlesh Gawande57a87172020-05-09 19:47:06 -070087 template <typename T>
Vince Lehmand6bb3fa2015-04-24 14:21:39 -050088 void
Ashlesh Gawande57a87172020-05-09 19:47:06 -070089 publishLsaStatus(const ndn::Name& topPrefix, const ndn::Interest& interest,
laqinfand22da512017-05-25 17:29:53 -050090 ndn::mgmt::StatusDatasetContext& context);
Jiewen Tana0497d82015-02-02 21:59:18 -080091
Jiewen Tana0497d82015-02-02 21:59:18 -080092private:
laqinfan35731852017-08-08 06:17:39 -050093 ndn::mgmt::Dispatcher& m_dispatcher;
Ashlesh Gawande85998a12017-12-07 22:22:13 -060094 const Lsdb& m_lsdb;
Ashlesh Gawande0421bc62020-05-08 20:42:19 -070095 const RoutingTable& m_routingTable;
Jiewen Tana0497d82015-02-02 21:59:18 -080096};
97
Jiewen Tana0497d82015-02-02 21:59:18 -080098} // namespace nlsr
99
laqinfan35731852017-08-08 06:17:39 -0500100#endif // NLSR_PUBLISHER_DATASET_INTEREST_HANDLER_HPP