Issue #27 Fix hop counting bug when NACKs are enabled
diff --git a/model/fw/nacks.cc b/model/fw/nacks.cc
index 8c24157..00bf840 100644
--- a/model/fw/nacks.cc
+++ b/model/fw/nacks.cc
@@ -27,6 +27,7 @@
#include "ns3/ndn-pit.h"
#include "ns3/ndn-fib.h"
#include "ns3/ndn-content-store.h"
+#include "ns3/ndnSIM/utils/ndn-fw-hop-count-tag.h"
#include "ns3/assert.h"
#include "ns3/ptr.h"
@@ -118,6 +119,16 @@
Ptr<Packet> nack = Create<Packet> ();
nack->AddHeader (*nackHeader);
+ FwHopCountTag hopCountTag;
+ if (origPacket->PeekPacketTag (hopCountTag))
+ {
+ nack->AddPacketTag (hopCountTag);
+ }
+ else
+ {
+ NS_LOG_DEBUG ("No FwHopCountTag tag associated with received duplicated Interest");
+ }
+
inFace->Send (nack);
m_outNacks (nackHeader, inFace);
}
@@ -136,6 +147,16 @@
nackHeader->SetNack (InterestHeader::NACK_GIVEUP_PIT);
packet->AddHeader (*nackHeader);
+ FwHopCountTag hopCountTag;
+ if (origPacket->PeekPacketTag (hopCountTag))
+ {
+ packet->AddPacketTag (hopCountTag);
+ }
+ else
+ {
+ NS_LOG_DEBUG ("No FwHopCountTag tag associated with original Interest");
+ }
+
BOOST_FOREACH (const pit::IncomingFace &incoming, pitEntry->GetIncoming ())
{
NS_LOG_DEBUG ("Send NACK for " << boost::cref (nackHeader->GetName ()) << " to " << boost::cref (*incoming.m_face));
@@ -186,6 +207,16 @@
nonNackHeader->SetNack (InterestHeader::NORMAL_INTEREST);
nonNackInterest->AddHeader (*nonNackHeader);
+ FwHopCountTag hopCountTag;
+ if (origPacket->PeekPacketTag (hopCountTag))
+ {
+ nonNackInterest->AddPacketTag (hopCountTag);
+ }
+ else
+ {
+ NS_LOG_DEBUG ("No FwHopCountTag tag associated with received NACK");
+ }
+
bool propagated = DoPropagateInterest (inFace, nonNackHeader, nonNackInterest, pitEntry);
if (!propagated)
{