Several fixes in forwarding strategies and NACK processing
- All strategies will forward to one green face first, if it exists
- Implemented logic to detect retransmitted interests (same face)
- If interest is retransmitted and all faces are exhausted during the
propagation face, increase max retx counter and try again
- PIT entry lifetime is updated on every non-duplicate interest reception
diff --git a/model/ccnx-pit-entry.cc b/model/ccnx-pit-entry.cc
index 348f01b..5667c82 100644
--- a/model/ccnx-pit-entry.cc
+++ b/model/ccnx-pit-entry.cc
@@ -26,6 +26,7 @@
#include "ns3/log.h"
#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
namespace ll = boost::lambda;
NS_LOG_COMPONENT_DEFINE ("CcnxPitEntry");
@@ -38,12 +39,21 @@
const CcnxFibEntry &fibEntry)
: m_prefix (prefix)
, m_fibEntry (fibEntry)
- , m_expireTime (expireTime)
- , m_timerExpired (false)
- , m_counterExpirations (0)
+ , m_expireTime (Simulator::Now () + expireTime)
+ // , m_timerExpired (false)
+ // , m_counterExpirations (0)
+ , m_maxRetxCount (0)
{
}
+void
+CcnxPitEntry::UpdateLifetime (const Time &offsetTime)
+{
+ Time newExpireTime = Simulator::Now () + offsetTime;
+ if (newExpireTime > m_expireTime)
+ m_expireTime = newExpireTime;
+}
+
CcnxPitEntryIncomingFaceContainer::type::iterator
CcnxPitEntry::AddIncoming (Ptr<CcnxFace> face)
{
@@ -68,7 +78,11 @@
std::pair<CcnxPitEntryOutgoingFaceContainer::type::iterator,bool> ret =
m_outgoing.insert (CcnxPitEntryOutgoingFace (face));
- NS_ASSERT_MSG (ret.second, "Something is wrong");
+ if (!ret.second)
+ { // outgoing face already exists
+ m_outgoing.modify (ret.first,
+ ll::bind (&CcnxPitEntryOutgoingFace::UpdateOnRetransmit, ll::_1));
+ }
return ret.first;
}
@@ -119,4 +133,10 @@
return !inVain;
}
+void
+CcnxPitEntry::IncreaseAllowedRetxCount ()
+{
+ m_maxRetxCount++;
+}
+
}