NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
process-nack-traits.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 "
process-nack-traits.hpp
"
27
#include "
common/logger.hpp
"
28
29
namespace
nfd
{
30
namespace
fw {
31
32
NFD_LOG_INIT
(
ProcessNackTraits
);
33
34
void
35
ProcessNackTraitsBase::processNack
(
const
Face
& inFace,
const
lp::Nack
& nack,
36
const
shared_ptr<pit::Entry>& pitEntry)
37
{
38
int
nOutRecordsNotNacked = 0;
39
Face
* lastFaceNotNacked =
nullptr
;
40
lp::NackReason
leastSevereReason =
lp::NackReason::NONE
;
41
for
(
const
pit::OutRecord
& outR : pitEntry->getOutRecords()) {
42
const
lp::NackHeader
* inNack = outR.getIncomingNack();
43
if
(inNack ==
nullptr
) {
44
++nOutRecordsNotNacked;
45
lastFaceNotNacked = &outR.getFace();
46
continue
;
47
}
48
49
if
(
isLessSevere
(inNack->
getReason
(), leastSevereReason)) {
50
leastSevereReason = inNack->
getReason
();
51
}
52
}
53
54
lp::NackHeader
outNack;
55
outNack.
setReason
(leastSevereReason);
56
57
if
(nOutRecordsNotNacked == 1) {
58
BOOST_ASSERT(lastFaceNotNacked !=
nullptr
);
59
pit::InRecordCollection::iterator inR = pitEntry->getInRecord(*lastFaceNotNacked);
60
if
(inR != pitEntry->in_end()) {
61
// one out-record not Nacked, which is also a downstream
62
NFD_LOG_DEBUG
(nack.
getInterest
() <<
" nack-from="
<< inFace.
getId
() <<
63
" nack="
<< nack.
getReason
() <<
64
" nack-to(bidirectional)="
<< lastFaceNotNacked->
getId
() <<
65
" out-nack="
<< outNack.
getReason
());
66
this->sendNackForProcessNackTraits(pitEntry, *lastFaceNotNacked, outNack);
67
return
;
68
}
69
}
70
71
if
(nOutRecordsNotNacked > 0) {
72
NFD_LOG_DEBUG
(nack.
getInterest
() <<
" nack-from="
<< inFace.
getId
() <<
73
" nack="
<< nack.
getReason
() <<
74
" waiting="
<< nOutRecordsNotNacked);
75
// continue waiting
76
return
;
77
}
78
79
NFD_LOG_DEBUG
(nack.
getInterest
() <<
" nack-from="
<< inFace.
getId
() <<
80
" nack="
<< nack.
getReason
() <<
81
" nack-to=all out-nack="
<< outNack.
getReason
());
82
this->sendNacksForProcessNackTraits(pitEntry, outNack);
83
}
84
85
}
// namespace fw
86
}
// namespace nfd
ndn::lp::NackHeader::setReason
NackHeader & setReason(NackReason reason)
set reason code
Definition:
nack-header.cpp:135
ndn::lp::NackHeader
represents a Network NACK header
Definition:
nack-header.hpp:58
nfd::pit::OutRecord
Contains information about an Interest toward an outgoing face.
Definition:
pit-out-record.hpp:37
ndn::lp::NackReason
NackReason
indicates the reason type of a network NACK
Definition:
nack-header.hpp:37
nfd::fw::ProcessNackTraits
Definition:
process-nack-traits.hpp:71
nfd
Copyright (c) 2011-2015 Regents of the University of California.
Definition:
ndn-common.hpp:40
ndn::lp::Nack::getReason
NackReason getReason() const
Definition:
nack.hpp:90
nfd::face::Face
generalization of a network interface
Definition:
face.hpp:53
ndn::lp::isLessSevere
bool isLessSevere(lp::NackReason x, lp::NackReason y)
compare NackReason for severity
Definition:
nack-header.cpp:45
nfd::face::Face::getId
FaceId getId() const
Definition:
face.hpp:214
NFD_LOG_DEBUG
#define NFD_LOG_DEBUG
Definition:
logger.hpp:38
nfd::fw::ProcessNackTraitsBase::processNack
void processNack(const Face &inFace, const lp::Nack &nack, const shared_ptr< pit::Entry > &pitEntry)
Definition:
process-nack-traits.cpp:35
ndn::lp::Nack
represents a Network Nack
Definition:
nack.hpp:39
ndn::lp::NackHeader::getReason
NackReason getReason() const
Definition:
nack-header.cpp:122
ndn::lp::NackReason::NONE
@ NONE
process-nack-traits.hpp
ndn::lp::Nack::getInterest
const Interest & getInterest() const
Definition:
nack.hpp:51
NFD_LOG_INIT
#define NFD_LOG_INIT(name)
Definition:
logger.hpp:31
logger.hpp
ndnSIM
NFD
daemon
fw
process-nack-traits.cpp
Generated on Mon Jun 1 2020 22:32:16 for ndnSIM by
1.8.18