blob: 05920405c7e9be3485a6e0de36bd476e44f37e60 [file] [log] [blame]
Nick Gordon94719252016-10-20 20:48:01 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoa3148082018-04-12 18:21:54 -04002/*
Davide Pesavento412c9822021-07-02 00:21:05 -04003 * Copyright (c) 2014-2021, Regents of the University of California,
Nick Gordon94719252016-10-20 20:48:01 +00004 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#include "nfd-rib-readvertise-destination.hpp"
Davide Pesavento2cae8ca2019-04-18 20:48:05 -040027#include "common/logger.hpp"
Junxiao Shi63b67e22017-03-06 19:46:02 +000028
Junxiao Shi63b67e22017-03-06 19:46:02 +000029#include <ndn-cxx/mgmt/nfd/control-command.hpp>
Junxiao Shi63b67e22017-03-06 19:46:02 +000030#include <ndn-cxx/mgmt/nfd/control-response.hpp>
Nick Gordon94719252016-10-20 20:48:01 +000031
32namespace nfd {
33namespace rib {
34
Davide Pesaventoa3148082018-04-12 18:21:54 -040035NFD_LOG_INIT(NfdRibReadvertiseDestination);
Junxiao Shi63b67e22017-03-06 19:46:02 +000036
Nick Gordon94719252016-10-20 20:48:01 +000037using ndn::nfd::ControlResponse;
38
39NfdRibReadvertiseDestination::NfdRibReadvertiseDestination(ndn::nfd::Controller& controller,
Yanbiao Lif48d0802018-06-01 03:00:02 -070040 Rib& rib,
41 const ndn::nfd::CommandOptions& options,
42 const ndn::nfd::ControlParameters& parameters)
Nick Gordon94719252016-10-20 20:48:01 +000043 : m_controller(controller)
Yanbiao Lif48d0802018-06-01 03:00:02 -070044 , m_commandOptions(options)
45 , m_controlParameters(parameters)
Nick Gordon94719252016-10-20 20:48:01 +000046{
Davide Pesavento412c9822021-07-02 00:21:05 -040047 m_ribInsertConn = rib.afterInsertEntry.connect([this] (const Name& name) {
48 if (name.isPrefixOf(m_commandOptions.getPrefix())) {
49 setAvailability(true);
50 }
51 });
52
53 m_ribEraseConn = rib.afterEraseEntry.connect([this] (const Name& name) {
54 if (name.isPrefixOf(m_commandOptions.getPrefix())) {
55 setAvailability(false);
56 }
57 });
Nick Gordon94719252016-10-20 20:48:01 +000058}
59
60void
Junxiao Shi63b67e22017-03-06 19:46:02 +000061NfdRibReadvertiseDestination::advertise(const nfd::rib::ReadvertisedRoute& rr,
Nick Gordon94719252016-10-20 20:48:01 +000062 std::function<void()> successCb,
63 std::function<void(const std::string&)> failureCb)
64{
Yanbiao Lif48d0802018-06-01 03:00:02 -070065 NFD_LOG_DEBUG("advertise " << rr.prefix << " on " << m_commandOptions.getPrefix());
Junxiao Shi63b67e22017-03-06 19:46:02 +000066
67 m_controller.start<ndn::nfd::RibRegisterCommand>(
Yanbiao Lif48d0802018-06-01 03:00:02 -070068 getControlParameters().setName(rr.prefix),
Davide Pesavento412c9822021-07-02 00:21:05 -040069 [=] (const ControlParameters&) { successCb(); },
Junxiao Shi63b67e22017-03-06 19:46:02 +000070 [=] (const ControlResponse& cr) { failureCb(cr.getText()); },
Yanbiao Lif48d0802018-06-01 03:00:02 -070071 getCommandOptions().setSigningInfo(rr.signer));
Nick Gordon94719252016-10-20 20:48:01 +000072}
73
74void
Junxiao Shi63b67e22017-03-06 19:46:02 +000075NfdRibReadvertiseDestination::withdraw(const nfd::rib::ReadvertisedRoute& rr,
Nick Gordon94719252016-10-20 20:48:01 +000076 std::function<void()> successCb,
77 std::function<void(const std::string&)> failureCb)
78{
Yanbiao Lif48d0802018-06-01 03:00:02 -070079 NFD_LOG_DEBUG("withdraw " << rr.prefix << " on " << m_commandOptions.getPrefix());
Junxiao Shi63b67e22017-03-06 19:46:02 +000080
81 m_controller.start<ndn::nfd::RibUnregisterCommand>(
Yanbiao Lif48d0802018-06-01 03:00:02 -070082 getControlParameters().setName(rr.prefix),
Davide Pesavento412c9822021-07-02 00:21:05 -040083 [=] (const ControlParameters&) { successCb(); },
Junxiao Shi63b67e22017-03-06 19:46:02 +000084 [=] (const ControlResponse& cr) { failureCb(cr.getText()); },
Yanbiao Lif48d0802018-06-01 03:00:02 -070085 getCommandOptions().setSigningInfo(rr.signer));
86}
87
Nick Gordon94719252016-10-20 20:48:01 +000088} // namespace rib
89} // namespace nfd