NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
cleanup.cpp
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2014-2019, Regents of the University of California,
4
* 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 "
cleanup.hpp
"
27
28
namespace
nfd
{
29
30
void
31
cleanupOnFaceRemoval
(
NameTree
& nt,
Fib
& fib,
Pit
& pit,
const
Face
& face)
32
{
33
std::multimap<size_t, const name_tree::Entry*> maybeEmptyNtes;
34
35
// visit FIB and PIT entries in one pass of NameTree enumeration
36
for
(
const
name_tree::Entry
& nte : nt) {
37
fib::Entry
* fibEntry = nte.getFibEntry();
38
if
(fibEntry !=
nullptr
) {
39
fib.
removeNextHopByFace
(*fibEntry, face);
40
}
41
42
for
(
const
auto
& pitEntry : nte.getPitEntries()) {
43
pit.
deleteInOutRecords
(pitEntry.get(), face);
44
}
45
46
if
(!nte.hasTableEntries()) {
47
maybeEmptyNtes.emplace(nte.getName().size(), &nte);
48
}
49
}
50
51
// try to erase longer names first, so that children are erased before parent is checked
52
for
(
auto
i = maybeEmptyNtes.rbegin(); i != maybeEmptyNtes.rend(); ++i) {
53
nt.eraseIfEmpty(const_cast<name_tree::Entry*>(i->second),
false
);
54
}
55
56
BOOST_ASSERT(nt.size() == 0 ||
57
std::none_of(nt.begin(), nt.end(),
58
[] (
const
name_tree::Entry
& nte) {
return
nte.isEmpty(); }));
59
}
60
61
}
// namespace nfd
nfd::fib::Fib::removeNextHopByFace
void removeNextHopByFace(Entry &entry, const Face &face)
removes the NextHop record for face for any endpointId
Definition:
fib.cpp:153
nfd::cleanupOnFaceRemoval
void cleanupOnFaceRemoval(NameTree &nt, Fib &fib, Pit &pit, const Face &face)
cleanup tables when a face is destroyed
Definition:
cleanup.cpp:31
nfd::face::Face
generalization of a network interface
Definition:
face.hpp:67
nfd::pit::Pit::deleteInOutRecords
void deleteInOutRecords(Entry *entry, const Face &face)
deletes in-record and out-record for face
Definition:
pit.cpp:116
nfd::fib::Entry
represents a FIB entry
Definition:
fib-entry.hpp:51
cleanup.hpp
nfd::pit::Pit
represents the Interest Table
Definition:
pit.hpp:47
nfd
Copyright (c) 2011-2015 Regents of the University of California.
Definition:
ndn-common.hpp:40
nfd::fib::Fib
represents the Forwarding Information Base (FIB)
Definition:
fib.hpp:49
nfd::name_tree::NameTree
a common index structure for FIB, PIT, StrategyChoice, and Measurements
Definition:
name-tree.hpp:38
nfd::name_tree::Entry
an entry in the name tree
Definition:
name-tree-entry.hpp:41
ndnSIM
NFD
daemon
table
cleanup.cpp
Generated on Sun Feb 24 2019 22:16:07 for ndnSIM by
1.8.15