blob: 413320ec193c409a75db1e99db36e7b28d418f00 [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 Pesaventoe422f9e2022-06-03 01:30:23 -04003 * Copyright (c) 2014-2022, 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
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040032namespace nfd::rib {
Nick Gordon94719252016-10-20 20:48:01 +000033
Davide Pesaventoa3148082018-04-12 18:21:54 -040034NFD_LOG_INIT(NfdRibReadvertiseDestination);
Junxiao Shi63b67e22017-03-06 19:46:02 +000035
Nick Gordon94719252016-10-20 20:48:01 +000036using ndn::nfd::ControlResponse;
37
38NfdRibReadvertiseDestination::NfdRibReadvertiseDestination(ndn::nfd::Controller& controller,
Yanbiao Lif48d0802018-06-01 03:00:02 -070039 Rib& rib,
40 const ndn::nfd::CommandOptions& options,
41 const ndn::nfd::ControlParameters& parameters)
Nick Gordon94719252016-10-20 20:48:01 +000042 : m_controller(controller)
Yanbiao Lif48d0802018-06-01 03:00:02 -070043 , m_commandOptions(options)
44 , m_controlParameters(parameters)
Nick Gordon94719252016-10-20 20:48:01 +000045{
Davide Pesavento412c9822021-07-02 00:21:05 -040046 m_ribInsertConn = rib.afterInsertEntry.connect([this] (const Name& name) {
47 if (name.isPrefixOf(m_commandOptions.getPrefix())) {
48 setAvailability(true);
49 }
50 });
51
52 m_ribEraseConn = rib.afterEraseEntry.connect([this] (const Name& name) {
53 if (name.isPrefixOf(m_commandOptions.getPrefix())) {
54 setAvailability(false);
55 }
56 });
Nick Gordon94719252016-10-20 20:48:01 +000057}
58
59void
Junxiao Shi63b67e22017-03-06 19:46:02 +000060NfdRibReadvertiseDestination::advertise(const nfd::rib::ReadvertisedRoute& rr,
Nick Gordon94719252016-10-20 20:48:01 +000061 std::function<void()> successCb,
62 std::function<void(const std::string&)> failureCb)
63{
Yanbiao Lif48d0802018-06-01 03:00:02 -070064 NFD_LOG_DEBUG("advertise " << rr.prefix << " on " << m_commandOptions.getPrefix());
Junxiao Shi63b67e22017-03-06 19:46:02 +000065
66 m_controller.start<ndn::nfd::RibRegisterCommand>(
Yanbiao Lif48d0802018-06-01 03:00:02 -070067 getControlParameters().setName(rr.prefix),
Davide Pesavento412c9822021-07-02 00:21:05 -040068 [=] (const ControlParameters&) { successCb(); },
Junxiao Shi63b67e22017-03-06 19:46:02 +000069 [=] (const ControlResponse& cr) { failureCb(cr.getText()); },
Yanbiao Lif48d0802018-06-01 03:00:02 -070070 getCommandOptions().setSigningInfo(rr.signer));
Nick Gordon94719252016-10-20 20:48:01 +000071}
72
73void
Junxiao Shi63b67e22017-03-06 19:46:02 +000074NfdRibReadvertiseDestination::withdraw(const nfd::rib::ReadvertisedRoute& rr,
Nick Gordon94719252016-10-20 20:48:01 +000075 std::function<void()> successCb,
76 std::function<void(const std::string&)> failureCb)
77{
Yanbiao Lif48d0802018-06-01 03:00:02 -070078 NFD_LOG_DEBUG("withdraw " << rr.prefix << " on " << m_commandOptions.getPrefix());
Junxiao Shi63b67e22017-03-06 19:46:02 +000079
80 m_controller.start<ndn::nfd::RibUnregisterCommand>(
Yanbiao Lif48d0802018-06-01 03:00:02 -070081 getControlParameters().setName(rr.prefix),
Davide Pesavento412c9822021-07-02 00:21:05 -040082 [=] (const ControlParameters&) { successCb(); },
Junxiao Shi63b67e22017-03-06 19:46:02 +000083 [=] (const ControlResponse& cr) { failureCb(cr.getText()); },
Yanbiao Lif48d0802018-06-01 03:00:02 -070084 getCommandOptions().setSigningInfo(rr.signer));
85}
86
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040087} // namespace nfd::rib