22 #include "green-yellow-red.h"
24 #include "ns3/ndn-pit.h"
25 #include "ns3/ndn-pit-entry.h"
26 #include "ns3/ndn-interest.h"
27 #include "ns3/ndn-data.h"
28 #include "ns3/ndn-pit.h"
29 #include "ns3/ndn-fib.h"
30 #include "ns3/ndn-content-store.h"
32 #include "ns3/assert.h"
35 #include "ns3/simulator.h"
36 #include "ns3/boolean.h"
37 #include "ns3/string.h"
39 #include <boost/ref.hpp>
40 #include <boost/foreach.hpp>
41 #include <boost/lambda/lambda.hpp>
42 #include <boost/lambda/bind.hpp>
43 #include <boost/tuple/tuple.hpp>
44 namespace ll = boost::lambda;
46 NS_LOG_COMPONENT_DEFINE (
"ndn.fw.GreenYellowRed");
52 NS_OBJECT_ENSURE_REGISTERED (GreenYellowRed);
55 GreenYellowRed::GetTypeId (
void)
57 static TypeId tid = TypeId (
"ns3::ndn::fw::GreenYellowRed")
67 Ptr<const Interest> interest,
68 Ptr<pit::Entry> pitEntry)
70 NS_LOG_FUNCTION (
this);
71 NS_ASSERT_MSG (
m_pit != 0,
"PIT should be aggregated with forwarding strategy");
73 int propagatedCount = 0;
75 BOOST_FOREACH (
const fib::FaceMetric &metricFace, pitEntry->GetFibEntry ()->m_faces.get<fib::i_metric> ())
77 if (metricFace.
GetStatus () == fib::FaceMetric::NDN_FIB_RED ||
78 metricFace.
GetStatus () == fib::FaceMetric::NDN_FIB_YELLOW)
90 return propagatedCount > 0;
95 Ptr<pit::Entry> pitEntry)
100 pitEntry->GetFibEntry ()->UpdateStatus (inFace, fib::FaceMetric::NDN_FIB_GREEN);
109 NS_LOG_DEBUG (
"WillEraseTimedOutPendingInterest for " << pitEntry->GetPrefix ());
111 for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
112 face != pitEntry->GetOutgoing ().end ();
116 pitEntry->GetFibEntry ()->UpdateStatus (face->m_face, fib::FaceMetric::NDN_FIB_YELLOW);
123 GreenYellowRed::DidReceiveValidNack (Ptr<Face> inFace,
125 Ptr<const Interest> nack,
126 Ptr<pit::Entry> pitEntry)
128 super::DidReceiveValidNack (inFace, nackCode, nack, pitEntry);
131 (nackCode == Interest::NACK_CONGESTION ||
132 nackCode == Interest::NACK_GIVEUP_PIT))
134 pitEntry->GetFibEntry ()->UpdateStatus (inFace, fib::FaceMetric::NDN_FIB_YELLOW);
virtual void WillSatisfyPendingInterest(Ptr< Face > inFace, Ptr< pit::Entry > pitEntry)
Even fired just before Interest will be satisfied.
Ptr< Face > GetFace() const
Return Face associated with FaceMetric.
virtual void WillSatisfyPendingInterest(Ptr< Face > inFace, Ptr< pit::Entry > pitEntry)
Even fired just before Interest will be satisfied.
virtual void WillEraseTimedOutPendingInterest(Ptr< pit::Entry > pitEntry)
Event fired just before PIT entry is removed by timeout.
virtual void WillEraseTimedOutPendingInterest(Ptr< pit::Entry > pitEntry)
Event fired just before PIT entry is removed by timeout.
Structure holding various parameters associated with a (FibEntry, Face) tuple.
virtual bool DoPropagateInterest(Ptr< Face > inFace, Ptr< const Interest > interest, Ptr< pit::Entry > pitEntry)
Virtual method to perform Interest propagation according to the forwarding strategy logic...
Status GetStatus() const
Get current status of FIB entry.
Ptr< Pit > m_pit
Reference to PIT to which this forwarding strategy is associated.
virtual bool TrySendOutInterest(Ptr< Face > inFace, Ptr< Face > outFace, Ptr< const Interest > interest, Ptr< pit::Entry > pitEntry)
Method implementing actual interest forwarding, taking into account CanSendOutInterest decision...