Start of serious reorganization
The whole forwarding logic is (will be) moved to the Forwarding Strategy
class.
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 8cebc00..312404d 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -29,27 +29,22 @@
#include "ns3/trace-source-accessor.h"
#include "ns3/object-vector.h"
#include "ns3/pointer.h"
-#include "ns3/boolean.h"
-#include "ns3/string.h"
#include "ns3/simulator.h"
#include "ns3/random-variable.h"
#include "ns3/ccnx-header-helper.h"
+#include "ns3/ccnx-pit.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/ccnx-content-object-header.h"
-#include "ccnx-face.h"
-#include "ccnx-forwarding-strategy.h"
-#include "ccnx-interest-header.h"
-#include "ccnx-content-object-header.h"
-#include "ccnx-fib-impl.h"
+#include "ns3/ccnx-face.h"
+#include "ns3/ccnx-forwarding-strategy.h"
+
+// #include "fib/ccnx-fib-impl.h"
#include "ccnx-net-device-face.h"
#include <boost/foreach.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-
-using namespace boost::tuples;
-namespace ll = boost::lambda;
NS_LOG_COMPONENT_DEFINE ("CcnxL3Protocol");
@@ -71,15 +66,6 @@
ObjectVectorValue (),
MakeObjectVectorAccessor (&CcnxL3Protocol::m_faces),
MakeObjectVectorChecker<CcnxFace> ())
-
- .AddAttribute ("EnableNACKs", "Enabling support of NACKs",
- BooleanValue (false),
- MakeBooleanAccessor (&CcnxL3Protocol::m_nacksEnabled),
- MakeBooleanChecker ())
- .AddAttribute ("CacheUnsolicitedData", "Cache overheard data that have not been requested",
- BooleanValue (false),
- MakeBooleanAccessor (&CcnxL3Protocol::m_cacheUnsolicitedData),
- MakeBooleanChecker ())
;
return tid;
}
@@ -108,26 +94,28 @@
m_node = GetObject<Node> ();
if (m_node != 0)
{
- NS_ASSERT_MSG (m_pit != 0 && m_fib != 0 && m_contentStore != 0 && m_forwardingStrategy != 0,
- "PIT, FIB, and ContentStore should be aggregated before CcnxL3Protocol");
+ // NS_ASSERT_MSG (m_pit != 0 && m_fib != 0 && m_contentStore != 0 && m_forwardingStrategy != 0,
+ // "PIT, FIB, and ContentStore should be aggregated before CcnxL3Protocol");
+ NS_ASSERT_MSG (m_forwardingStrategy != 0,
+ "Forwarding strategy should be aggregated before CcnxL3Protocol");
}
}
- if (m_pit == 0)
- {
- m_pit = GetObject<CcnxPit> ();
- }
- if (m_fib == 0)
- {
- m_fib = GetObject<CcnxFib> ();
- }
+ // if (m_pit == 0)
+ // {
+ // m_pit = GetObject<CcnxPit> ();
+ // }
+ // if (m_fib == 0)
+ // {
+ // m_fib = GetObject<CcnxFib> ();
+ // }
if (m_forwardingStrategy == 0)
{
m_forwardingStrategy = GetObject<CcnxForwardingStrategy> ();
}
- if (m_contentStore == 0)
- {
- m_contentStore = GetObject<CcnxContentStore> ();
- }
+ // if (m_contentStore == 0)
+ // {
+ // m_contentStore = GetObject<CcnxContentStore> ();
+ // }
Object::NotifyNewAggregate ();
}
@@ -146,9 +134,6 @@
// Force delete on objects
m_forwardingStrategy = 0; // there is a reference to PIT stored in here
- m_pit = 0;
- m_contentStore = 0;
- m_fib = 0;
Object::DoDispose ();
}
@@ -173,10 +158,11 @@
{
// ask face to register in lower-layer stack
face->RegisterProtocolHandler (MakeNullCallback<void,const Ptr<CcnxFace>&,const Ptr<const Packet>&> ());
+ Ptr<CcnxPit> pit = GetObject<CcnxPit> ();
// just to be on a safe side. Do the process in two steps
std::list< Ptr<CcnxPitEntry> > entriesToRemoves;
- for (Ptr<CcnxPitEntry> pitEntry = m_pit->Begin (); pitEntry != 0; pitEntry = m_pit->Next (pitEntry))
+ for (Ptr<CcnxPitEntry> pitEntry = pit->Begin (); pitEntry != 0; pitEntry = pit->Next (pitEntry))
{
pitEntry->RemoveAllReferencesToFace (face);
@@ -190,7 +176,7 @@
}
BOOST_FOREACH (Ptr<CcnxPitEntry> removedEntry, entriesToRemoves)
{
- m_pit->MarkErased (removedEntry);
+ pit->MarkErased (removedEntry);
}
CcnxFaceList::iterator face_it = find (m_faces.begin(), m_faces.end(), face);
@@ -254,10 +240,11 @@
packet->RemoveHeader (*header);
NS_ASSERT_MSG (packet->GetSize () == 0, "Payload of Interests should be zero");
- if (header->GetNack () > 0)
- OnNack (face, header, p/*original packet*/);
- else
- OnInterest (face, header, p/*original packet*/);
+ m_forwardingStrategy->OnInterest (face, header, p/*original packet*/);
+ // if (header->GetNack () > 0)
+ // OnNack (face, header, p/*original packet*/);
+ // else
+ // OnInterest (face, header, p/*original packet*/);
break;
}
case CcnxHeaderHelper::CONTENT_OBJECT:
@@ -270,7 +257,7 @@
packet->RemoveHeader (*header);
packet->RemoveTrailer (contentObjectTrailer);
- OnData (face, header, packet/*payload*/, p/*original packet*/);
+ m_forwardingStrategy->OnData (face, header, packet/*payload*/, p/*original packet*/);
break;
}
}
@@ -285,405 +272,405 @@
}
}
-void
-CcnxL3Protocol::OnNack (const Ptr<CcnxFace> &incomingFace,
- Ptr<CcnxInterestHeader> &header,
- const Ptr<const Packet> &packet)
-{
- NS_LOG_FUNCTION (incomingFace << header << packet);
- m_inNacks (header, incomingFace);
+// void
+// CcnxL3Protocol::OnNack (const Ptr<CcnxFace> &incomingFace,
+// Ptr<CcnxInterestHeader> &header,
+// const Ptr<const Packet> &packet)
+// {
+// NS_LOG_FUNCTION (incomingFace << header << packet);
+// m_inNacks (header, incomingFace);
- Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
- if (pitEntry == 0)
- {
- // somebody is doing something bad
- m_dropNacks (header, NON_DUPLICATED, incomingFace);
- return;
- }
+// Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+// if (pitEntry == 0)
+// {
+// // somebody is doing something bad
+// m_dropNacks (header, NON_DUPLICATED, incomingFace);
+// return;
+// }
- // CcnxPitEntryIncomingFaceContainer::type::iterator inFace = pitEntry->GetIncoming ().find (incomingFace);
- CcnxPitEntryOutgoingFaceContainer::type::iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
+// // CcnxPitEntryIncomingFaceContainer::type::iterator inFace = pitEntry->GetIncoming ().find (incomingFace);
+// CcnxPitEntryOutgoingFaceContainer::type::iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
- if (outFace == pitEntry->GetOutgoing ().end ())
- {
-// NS_ASSERT_MSG (false,
-// "Node " << GetObject<Node> ()->GetId () << ", outgoing entry should exist for face " << boost::cref(*incomingFace) << "\n" <<
-// "size: " << pitEntry.GetOutgoing ().size ());
+// if (outFace == pitEntry->GetOutgoing ().end ())
+// {
+// // NS_ASSERT_MSG (false,
+// // "Node " << GetObject<Node> ()->GetId () << ", outgoing entry should exist for face " << boost::cref(*incomingFace) << "\n" <<
+// // "size: " << pitEntry.GetOutgoing ().size ());
- // m_dropNacks (header, NON_DUPLICATE, incomingFace);
- return;
- }
+// // m_dropNacks (header, NON_DUPLICATE, incomingFace);
+// return;
+// }
- // This was done in error. Never, never do anything, except normal leakage. This way we ensure that we will not have losses,
- // at least when there is only one client
- //
- // incomingFace->LeakBucketByOnePacket ();
+// // This was done in error. Never, never do anything, except normal leakage. This way we ensure that we will not have losses,
+// // at least when there is only one client
+// //
+// // incomingFace->LeakBucketByOnePacket ();
- NS_LOG_ERROR ("Nack on " << boost::cref(*incomingFace));
+// NS_LOG_ERROR ("Nack on " << boost::cref(*incomingFace));
- pitEntry->SetWaitingInVain (outFace);
+// pitEntry->SetWaitingInVain (outFace);
- // If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
- // So, if we had an incoming entry to this neighbor, then we can remove it now
+// // If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
+// // So, if we had an incoming entry to this neighbor, then we can remove it now
- if (header->GetNack () == CcnxInterestHeader::NACK_GIVEUP_PIT)
- {
- pitEntry->RemoveIncoming (incomingFace);
- }
+// if (header->GetNack () == CcnxInterestHeader::NACK_GIVEUP_PIT)
+// {
+// pitEntry->RemoveIncoming (incomingFace);
+// }
- pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW);
- // StaticCast<CcnxFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
- // ll::bind (&CcnxFibEntry::UpdateStatus,
- // ll::_1, incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW));
+// pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW);
+// // StaticCast<CcnxFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
+// // ll::bind (&CcnxFibEntry::UpdateStatus,
+// // ll::_1, incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW));
- if (pitEntry->GetIncoming ().size () == 0) // interest was actually satisfied
- {
- // no need to do anything
- m_dropNacks (header, AFTER_SATISFIED, incomingFace);
- return;
- }
+// if (pitEntry->GetIncoming ().size () == 0) // interest was actually satisfied
+// {
+// // no need to do anything
+// m_dropNacks (header, AFTER_SATISFIED, incomingFace);
+// return;
+// }
- if (!pitEntry->AreAllOutgoingInVain ()) // not all ougtoing are in vain
- {
- NS_LOG_DEBUG ("Not all outgoing are in vain");
- // suppress
- // Don't do anything, we are still expecting data from some other face
- m_dropNacks (header, SUPPRESSED, incomingFace);
- return;
- }
+// if (!pitEntry->AreAllOutgoingInVain ()) // not all ougtoing are in vain
+// {
+// NS_LOG_DEBUG ("Not all outgoing are in vain");
+// // suppress
+// // Don't do anything, we are still expecting data from some other face
+// m_dropNacks (header, SUPPRESSED, incomingFace);
+// return;
+// }
- Ptr<Packet> nonNackInterest = Create<Packet> ();
- header->SetNack (CcnxInterestHeader::NORMAL_INTEREST);
- nonNackInterest->AddHeader (*header);
+// Ptr<Packet> nonNackInterest = Create<Packet> ();
+// header->SetNack (CcnxInterestHeader::NORMAL_INTEREST);
+// nonNackInterest->AddHeader (*header);
- bool propagated = m_forwardingStrategy->
- PropagateInterest (pitEntry, incomingFace, header, nonNackInterest);
+// bool propagated = m_forwardingStrategy->
+// PropagateInterest (pitEntry, incomingFace, header, nonNackInterest);
- // // ForwardingStrategy will try its best to forward packet to at least one interface.
- // // If no interests was propagated, then there is not other option for forwarding or
- // // ForwardingStrategy failed to find it.
- if (!propagated)
- {
- m_dropNacks (header, NO_FACES, incomingFace); // this headers doesn't have NACK flag set
- GiveUpInterest (pitEntry, header);
- }
-}
+// // // ForwardingStrategy will try its best to forward packet to at least one interface.
+// // // If no interests was propagated, then there is not other option for forwarding or
+// // // ForwardingStrategy failed to find it.
+// if (!propagated)
+// {
+// m_dropNacks (header, NO_FACES, incomingFace); // this headers doesn't have NACK flag set
+// GiveUpInterest (pitEntry, header);
+// }
+// }
// Processing Interests
//
-// !!! Key point.
-// !!! All interests should be answerred!!! Either later with data, immediately with data, or immediately with NACK
-void CcnxL3Protocol::OnInterest (const Ptr<CcnxFace> &incomingFace,
- Ptr<CcnxInterestHeader> &header,
- const Ptr<const Packet> &packet)
-{
- m_inInterests (header, incomingFace);
+// // !!! Key point.
+// // !!! All interests should be answerred!!! Either later with data, immediately with data, or immediately with NACK
+// void CcnxL3Protocol::OnInterest (const Ptr<CcnxFace> &incomingFace,
+// Ptr<CcnxInterestHeader> &header,
+// const Ptr<const Packet> &packet)
+// {
+// m_inInterests (header, incomingFace);
- Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
- if (pitEntry == 0)
- {
- pitEntry = m_pit->Create (header);
- }
+// Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+// if (pitEntry == 0)
+// {
+// pitEntry = m_pit->Create (header);
+// }
- if (pitEntry == 0)
- {
- // if it is still not created, then give up processing
- m_dropInterests (header, PIT_LIMIT, incomingFace);
- return;
- }
+// if (pitEntry == 0)
+// {
+// // if it is still not created, then give up processing
+// m_dropInterests (header, PIT_LIMIT, incomingFace);
+// return;
+// }
- bool isNew = pitEntry->GetIncoming ().size () == 0 && pitEntry->GetOutgoing ().size () == 0;
- bool isDuplicated = true;
- if (!pitEntry->IsNonceSeen (header->GetNonce ()))
- {
- pitEntry->AddSeenNonce (header->GetNonce ());
- isDuplicated = false;
- }
+// bool isNew = pitEntry->GetIncoming ().size () == 0 && pitEntry->GetOutgoing ().size () == 0;
+// bool isDuplicated = true;
+// if (!pitEntry->IsNonceSeen (header->GetNonce ()))
+// {
+// pitEntry->AddSeenNonce (header->GetNonce ());
+// isDuplicated = false;
+// }
- NS_LOG_FUNCTION (header->GetName () << header->GetNonce () << boost::cref (*incomingFace) << isDuplicated);
+// NS_LOG_FUNCTION (header->GetName () << header->GetNonce () << boost::cref (*incomingFace) << isDuplicated);
- /////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////
- // //
- // !!!! IMPORTANT CHANGE !!!! Duplicate interests will create incoming face entry !!!! //
- // //
- /////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////////////////////////
+// // //
+// // !!!! IMPORTANT CHANGE !!!! Duplicate interests will create incoming face entry !!!! //
+// // //
+// /////////////////////////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////////////////////////
- // Data is not in cache
- CcnxPitEntry::in_iterator inFace = pitEntry->GetIncoming ().find (incomingFace);
- CcnxPitEntry::out_iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
+// // Data is not in cache
+// CcnxPitEntry::in_iterator inFace = pitEntry->GetIncoming ().find (incomingFace);
+// CcnxPitEntry::out_iterator outFace = pitEntry->GetOutgoing ().find (incomingFace);
- bool isRetransmitted = false;
+// bool isRetransmitted = false;
- if (inFace != pitEntry->GetIncoming ().end ())
- {
- // CcnxPitEntryIncomingFace.m_arrivalTime keeps track arrival time of the first packet... why?
+// if (inFace != pitEntry->GetIncoming ().end ())
+// {
+// // CcnxPitEntryIncomingFace.m_arrivalTime keeps track arrival time of the first packet... why?
- isRetransmitted = true;
- // this is almost definitely a retransmission. But should we trust the user on that?
- }
- else
- {
- inFace = pitEntry->AddIncoming (incomingFace);
- }
- //////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////////
+// isRetransmitted = true;
+// // this is almost definitely a retransmission. But should we trust the user on that?
+// }
+// else
+// {
+// inFace = pitEntry->AddIncoming (incomingFace);
+// }
+// //////////////////////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////////////////////
- if (isDuplicated)
- {
- NS_LOG_DEBUG ("Received duplicatie interest on " << *incomingFace);
- m_dropInterests (header, DUPLICATED, incomingFace);
+// if (isDuplicated)
+// {
+// NS_LOG_DEBUG ("Received duplicatie interest on " << *incomingFace);
+// m_dropInterests (header, DUPLICATED, incomingFace);
- /**
- * This condition will handle "routing" loops and also recently satisfied interests.
- * Every time interest is satisfied, PIT entry (with empty incoming and outgoing faces)
- * is kept for another small chunk of time.
- */
+// /**
+// * This condition will handle "routing" loops and also recently satisfied interests.
+// * Every time interest is satisfied, PIT entry (with empty incoming and outgoing faces)
+// * is kept for another small chunk of time.
+// */
- if (m_nacksEnabled)
- {
- NS_LOG_DEBUG ("Sending NACK_LOOP");
- header->SetNack (CcnxInterestHeader::NACK_LOOP);
- Ptr<Packet> nack = Create<Packet> ();
- nack->AddHeader (*header);
+// if (m_nacksEnabled)
+// {
+// NS_LOG_DEBUG ("Sending NACK_LOOP");
+// header->SetNack (CcnxInterestHeader::NACK_LOOP);
+// Ptr<Packet> nack = Create<Packet> ();
+// nack->AddHeader (*header);
- incomingFace->Send (nack);
- m_outNacks (header, incomingFace);
- }
+// incomingFace->Send (nack);
+// m_outNacks (header, incomingFace);
+// }
- return;
- }
+// return;
+// }
- Ptr<Packet> contentObject;
- Ptr<const CcnxContentObjectHeader> contentObjectHeader; // used for tracing
- Ptr<const Packet> payload; // used for tracing
- tie (contentObject, contentObjectHeader, payload) = m_contentStore->Lookup (header);
- if (contentObject != 0)
- {
- NS_ASSERT (contentObjectHeader != 0);
- NS_LOG_LOGIC("Found in cache");
+// Ptr<Packet> contentObject;
+// Ptr<const CcnxContentObjectHeader> contentObjectHeader; // used for tracing
+// Ptr<const Packet> payload; // used for tracing
+// tie (contentObject, contentObjectHeader, payload) = m_contentStore->Lookup (header);
+// if (contentObject != 0)
+// {
+// NS_ASSERT (contentObjectHeader != 0);
+// NS_LOG_LOGIC("Found in cache");
- OnDataDelayed (contentObjectHeader, payload, contentObject);
- return;
- }
+// OnDataDelayed (contentObjectHeader, payload, contentObject);
+// return;
+// }
- // update PIT entry lifetime
- pitEntry->UpdateLifetime (header->GetInterestLifetime ());
+// // update PIT entry lifetime
+// pitEntry->UpdateLifetime (header->GetInterestLifetime ());
- if (outFace != pitEntry->GetOutgoing ().end ())
- {
- NS_LOG_DEBUG ("Non duplicate interests from the face we have sent interest to. Don't suppress");
- // got a non-duplicate interest from the face we have sent interest to
- // Probably, there is no point in waiting data from that face... Not sure yet
+// if (outFace != pitEntry->GetOutgoing ().end ())
+// {
+// NS_LOG_DEBUG ("Non duplicate interests from the face we have sent interest to. Don't suppress");
+// // got a non-duplicate interest from the face we have sent interest to
+// // Probably, there is no point in waiting data from that face... Not sure yet
- // If we're expecting data from the interface we got the interest from ("producer" asks us for "his own" data)
- // Mark interface YELLOW, but keep a small hope that data will come eventually.
+// // If we're expecting data from the interface we got the interest from ("producer" asks us for "his own" data)
+// // Mark interface YELLOW, but keep a small hope that data will come eventually.
- // ?? not sure if we need to do that ?? ...
+// // ?? not sure if we need to do that ?? ...
- pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW);
- // StaticCast<CcnxFibImpl> (m_fib)->modify(pitEntry->GetFibEntry (),
- // ll::bind (&CcnxFibEntry::UpdateStatus,
- // ll::_1, incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW));
- }
- else
- if (!isNew && !isRetransmitted)
- {
- // Suppress this interest if we're still expecting data from some other face
- NS_LOG_DEBUG ("Suppress interests");
- m_dropInterests (header, SUPPRESSED, incomingFace);
- return;
- }
+// pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW);
+// // StaticCast<CcnxFibImpl> (m_fib)->modify(pitEntry->GetFibEntry (),
+// // ll::bind (&CcnxFibEntry::UpdateStatus,
+// // ll::_1, incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW));
+// }
+// else
+// if (!isNew && !isRetransmitted)
+// {
+// // Suppress this interest if we're still expecting data from some other face
+// NS_LOG_DEBUG ("Suppress interests");
+// m_dropInterests (header, SUPPRESSED, incomingFace);
+// return;
+// }
- /////////////////////////////////////////////////////////////////////
- // Propagate
- /////////////////////////////////////////////////////////////////////
+// /////////////////////////////////////////////////////////////////////
+// // Propagate
+// /////////////////////////////////////////////////////////////////////
- bool propagated = m_forwardingStrategy->
- PropagateInterest (pitEntry, incomingFace, header, packet);
+// bool propagated = m_forwardingStrategy->
+// PropagateInterest (pitEntry, incomingFace, header, packet);
- if (!propagated && isRetransmitted) //give another chance if retransmitted
- {
- // increase max number of allowed retransmissions
- pitEntry->IncreaseAllowedRetxCount ();
+// if (!propagated && isRetransmitted) //give another chance if retransmitted
+// {
+// // increase max number of allowed retransmissions
+// pitEntry->IncreaseAllowedRetxCount ();
- // try again
- propagated = m_forwardingStrategy->
- PropagateInterest (pitEntry, incomingFace, header, packet);
- }
+// // try again
+// propagated = m_forwardingStrategy->
+// PropagateInterest (pitEntry, incomingFace, header, packet);
+// }
- // ForwardingStrategy will try its best to forward packet to at least one interface.
- // If no interests was propagated, then there is not other option for forwarding or
- // ForwardingStrategy failed to find it.
- if (!propagated)
- {
- NS_LOG_DEBUG ("Not propagated");
- m_dropInterests (header, NO_FACES, incomingFace);
- GiveUpInterest (pitEntry, header);
- }
-}
+// // ForwardingStrategy will try its best to forward packet to at least one interface.
+// // If no interests was propagated, then there is not other option for forwarding or
+// // ForwardingStrategy failed to find it.
+// if (!propagated)
+// {
+// NS_LOG_DEBUG ("Not propagated");
+// m_dropInterests (header, NO_FACES, incomingFace);
+// GiveUpInterest (pitEntry, header);
+// }
+// }
-void
-CcnxL3Protocol::OnDataDelayed (Ptr<const CcnxContentObjectHeader> header,
- Ptr<const Packet> payload,
- const Ptr<const Packet> &packet)
-{
- // 1. Lookup PIT entry
- Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
- if (pitEntry != 0)
- {
- //satisfy all pending incoming Interests
- BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
- {
- incoming.m_face->Send (packet->Copy ());
- m_outData (header, payload, false, incoming.m_face);
- NS_LOG_DEBUG ("Satisfy " << *incoming.m_face);
+// void
+// CcnxL3Protocol::OnDataDelayed (Ptr<const CcnxContentObjectHeader> header,
+// Ptr<const Packet> payload,
+// const Ptr<const Packet> &packet)
+// {
+// // 1. Lookup PIT entry
+// Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+// if (pitEntry != 0)
+// {
+// //satisfy all pending incoming Interests
+// BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
+// {
+// incoming.m_face->Send (packet->Copy ());
+// m_outData (header, payload, false, incoming.m_face);
+// NS_LOG_DEBUG ("Satisfy " << *incoming.m_face);
- // successfull forwarded data trace
- }
+// // successfull forwarded data trace
+// }
- if (pitEntry->GetIncoming ().size () > 0)
- {
- // All incoming interests are satisfied. Remove them
- pitEntry->ClearIncoming ();
+// if (pitEntry->GetIncoming ().size () > 0)
+// {
+// // All incoming interests are satisfied. Remove them
+// pitEntry->ClearIncoming ();
- // Remove all outgoing faces
- pitEntry->ClearOutgoing ();
+// // Remove all outgoing faces
+// pitEntry->ClearOutgoing ();
- // Set pruning timout on PIT entry (instead of deleting the record)
- m_pit->MarkErased (pitEntry);
- }
- }
- else
- {
- NS_LOG_DEBUG ("Pit entry not found (was satisfied and removed before)");
- return; // do not process unsoliced data packets
- }
-}
+// // Set pruning timout on PIT entry (instead of deleting the record)
+// m_pit->MarkErased (pitEntry);
+// }
+// }
+// else
+// {
+// NS_LOG_DEBUG ("Pit entry not found (was satisfied and removed before)");
+// return; // do not process unsoliced data packets
+// }
+// }
-// Processing ContentObjects
-void
-CcnxL3Protocol::OnData (const Ptr<CcnxFace> &incomingFace,
- Ptr<CcnxContentObjectHeader> &header,
- Ptr<Packet> &payload,
- const Ptr<const Packet> &packet)
-{
+// // Processing ContentObjects
+// void
+// CcnxL3Protocol::OnData (const Ptr<CcnxFace> &incomingFace,
+// Ptr<CcnxContentObjectHeader> &header,
+// Ptr<Packet> &payload,
+// const Ptr<const Packet> &packet)
+// {
- NS_LOG_FUNCTION (incomingFace << header->GetName () << payload << packet);
- m_inData (header, payload, incomingFace);
+// NS_LOG_FUNCTION (incomingFace << header->GetName () << payload << packet);
+// m_inData (header, payload, incomingFace);
- // 1. Lookup PIT entry
- Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
- if (pitEntry != 0)
- {
- // Note that with MultiIndex we need to modify entries indirectly
+// // 1. Lookup PIT entry
+// Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+// if (pitEntry != 0)
+// {
+// // Note that with MultiIndex we need to modify entries indirectly
- CcnxPitEntry::out_iterator out = pitEntry->GetOutgoing ().find (incomingFace);
+// CcnxPitEntry::out_iterator out = pitEntry->GetOutgoing ().find (incomingFace);
- // If we have sent interest for this data via this face, then update stats.
- if (out != pitEntry->GetOutgoing ().end ())
- {
- pitEntry->GetFibEntry ()->UpdateFaceRtt (incomingFace, Simulator::Now () - out->m_sendTime);
- // StaticCast<CcnxFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
- // ll::bind (&CcnxFibEntry::UpdateFaceRtt,
- // ll::_1,
- // incomingFace,
- // Simulator::Now () - out->m_sendTime));
- }
- else
- {
- // Unsolicited data, but we're interested in it... should we get it?
- // Potential hole for attacks
+// // If we have sent interest for this data via this face, then update stats.
+// if (out != pitEntry->GetOutgoing ().end ())
+// {
+// pitEntry->GetFibEntry ()->UpdateFaceRtt (incomingFace, Simulator::Now () - out->m_sendTime);
+// // StaticCast<CcnxFibImpl> (m_fib)->modify (pitEntry->GetFibEntry (),
+// // ll::bind (&CcnxFibEntry::UpdateFaceRtt,
+// // ll::_1,
+// // incomingFace,
+// // Simulator::Now () - out->m_sendTime));
+// }
+// else
+// {
+// // Unsolicited data, but we're interested in it... should we get it?
+// // Potential hole for attacks
- if (m_cacheUnsolicitedData)
- {
- // Optimistically add or update entry in the content store
- m_contentStore->Add (header, payload);
- }
- else
- {
- NS_LOG_ERROR ("Node "<< m_node->GetId() <<
- ". PIT entry for "<< header->GetName ()<<" is valid, "
- "but outgoing entry for interface "<< boost::cref(*incomingFace) <<" doesn't exist\n");
- }
- // ignore unsolicited data
- return;
- }
+// if (m_cacheUnsolicitedData)
+// {
+// // Optimistically add or update entry in the content store
+// m_contentStore->Add (header, payload);
+// }
+// else
+// {
+// NS_LOG_ERROR ("Node "<< m_node->GetId() <<
+// ". PIT entry for "<< header->GetName ()<<" is valid, "
+// "but outgoing entry for interface "<< boost::cref(*incomingFace) <<" doesn't exist\n");
+// }
+// // ignore unsolicited data
+// return;
+// }
- // Update metric status for the incoming interface in the corresponding FIB entry
- pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN);
- // StaticCast<CcnxFibImpl>(m_fib)->modify (pitEntry->GetFibEntry (),
- // ll::bind (&CcnxFibEntry::UpdateStatus, ll::_1,
- // incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN));
+// // Update metric status for the incoming interface in the corresponding FIB entry
+// pitEntry->GetFibEntry ()->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN);
+// // StaticCast<CcnxFibImpl>(m_fib)->modify (pitEntry->GetFibEntry (),
+// // ll::bind (&CcnxFibEntry::UpdateStatus, ll::_1,
+// // incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN));
- // Add or update entry in the content store
- m_contentStore->Add (header, payload);
+// // Add or update entry in the content store
+// m_contentStore->Add (header, payload);
- pitEntry->RemoveIncoming (incomingFace);
+// pitEntry->RemoveIncoming (incomingFace);
- if (pitEntry->GetIncoming ().size () == 0)
- {
- // Set pruning timout on PIT entry (instead of deleting the record)
- m_pit->MarkErased (pitEntry);
- }
- else
- {
- OnDataDelayed (header, payload, packet);
- }
- }
- else
- {
- NS_LOG_DEBUG ("Pit entry not found");
- if (m_cacheUnsolicitedData)
- {
- // Optimistically add or update entry in the content store
- m_contentStore->Add (header, payload);
- }
- else
- {
- // Drop data packet if PIT entry is not found
- // (unsolicited data packets should not "poison" content store)
+// if (pitEntry->GetIncoming ().size () == 0)
+// {
+// // Set pruning timout on PIT entry (instead of deleting the record)
+// m_pit->MarkErased (pitEntry);
+// }
+// else
+// {
+// OnDataDelayed (header, payload, packet);
+// }
+// }
+// else
+// {
+// NS_LOG_DEBUG ("Pit entry not found");
+// if (m_cacheUnsolicitedData)
+// {
+// // Optimistically add or update entry in the content store
+// m_contentStore->Add (header, payload);
+// }
+// else
+// {
+// // Drop data packet if PIT entry is not found
+// // (unsolicited data packets should not "poison" content store)
- //drop dulicated or not requested data packet
- m_dropData (header, payload, UNSOLICITED, incomingFace);
- }
- return; // do not process unsoliced data packets
- }
-}
+// //drop dulicated or not requested data packet
+// m_dropData (header, payload, UNSOLICITED, incomingFace);
+// }
+// return; // do not process unsoliced data packets
+// }
+// }
-void
-CcnxL3Protocol::GiveUpInterest (Ptr<CcnxPitEntry> pitEntry,
- Ptr<CcnxInterestHeader> header)
-{
- NS_LOG_FUNCTION (this);
+// void
+// CcnxL3Protocol::GiveUpInterest (Ptr<CcnxPitEntry> pitEntry,
+// Ptr<CcnxInterestHeader> header)
+// {
+// NS_LOG_FUNCTION (this);
- if (m_nacksEnabled)
- {
- Ptr<Packet> packet = Create<Packet> ();
- header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
- packet->AddHeader (*header);
+// if (m_nacksEnabled)
+// {
+// Ptr<Packet> packet = Create<Packet> ();
+// header->SetNack (CcnxInterestHeader::NACK_GIVEUP_PIT);
+// packet->AddHeader (*header);
- BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
- {
- NS_LOG_DEBUG ("Send NACK for " << boost::cref (header->GetName ()) << " to " << boost::cref (*incoming.m_face));
- incoming.m_face->Send (packet->Copy ());
+// BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
+// {
+// NS_LOG_DEBUG ("Send NACK for " << boost::cref (header->GetName ()) << " to " << boost::cref (*incoming.m_face));
+// incoming.m_face->Send (packet->Copy ());
- m_outNacks (header, incoming.m_face);
- }
+// m_outNacks (header, incoming.m_face);
+// }
- // All incoming interests cannot be satisfied. Remove them
- pitEntry->ClearIncoming ();
+// // All incoming interests cannot be satisfied. Remove them
+// pitEntry->ClearIncoming ();
- // Remove also outgoing
- pitEntry->ClearOutgoing ();
+// // Remove also outgoing
+// pitEntry->ClearOutgoing ();
- // Set pruning timout on PIT entry (instead of deleting the record)
- m_pit->MarkErased (pitEntry);
- }
-}
+// // Set pruning timout on PIT entry (instead of deleting the record)
+// m_pit->MarkErased (pitEntry);
+// }
+// }
} //namespace ns3