First step in reimplementing CcnxPit. Everything is broken as of right now
diff --git a/model/ccnx-pit.cc b/model/ccnx-pit.cc
index 4824bb1..3733880 100644
--- a/model/ccnx-pit.cc
+++ b/model/ccnx-pit.cc
@@ -31,10 +31,6 @@
NS_LOG_COMPONENT_DEFINE ("CcnxPit");
-using namespace boost::tuples;
-using namespace boost;
-namespace ll = boost::lambda;
-
namespace ns3 {
NS_OBJECT_ENSURE_REGISTERED (CcnxPit);
@@ -44,10 +40,9 @@
TypeId
CcnxPit::GetTypeId ()
{
- static TypeId tid = TypeId ("ns3::CcnxPit")
+ static TypeId tid = TypeId ("ns3::private::CcnxPit")
.SetGroupName ("Ccnx")
.SetParent<Object> ()
- .AddConstructor<CcnxPit> ()
.AddAttribute ("CleanupTimeout",
"Timeout defining how frequent RIT should be cleaned up",
StringValue ("1s"),
@@ -65,12 +60,6 @@
StringValue("4s"),
MakeTimeAccessor (&CcnxPit::m_PitEntryDefaultLifetime),
MakeTimeChecker ())
-
- .AddAttribute ("MaxSize",
- "Set maximum number of entries in PIT. If 0, limit is not enforced",
- StringValue ("0"),
- MakeUintegerAccessor (&CcnxPit::m_maxSize),
- MakeUintegerChecker<uint32_t> ())
;
return tid;
@@ -84,22 +73,13 @@
{
}
-void
-CcnxPit::NotifyNewAggregate ()
+void CcnxPit::CleanExpired ()
{
- if (m_fib == 0)
- {
- m_fib = GetObject<CcnxFib> ();
- }
-}
-
-void
-CcnxPit::DoDispose ()
-{
- if (m_cleanupEvent.IsRunning ())
- m_cleanupEvent.Cancel ();
-
- clear ();
+ DoCleanExpired ();
+
+ // schedule next event
+ m_cleanupEvent = Simulator::Schedule (m_cleanupTimeout,
+ &CcnxPit::CleanExpired, this);
}
void
@@ -120,121 +100,5 @@
return m_cleanupTimeout;
}
-void CcnxPit::CleanExpired ()
-{
- // NS_LOG_LOGIC ("Cleaning PIT. Total: " << size ());
- Time now = Simulator::Now ();
-
- // uint32_t count = 0;
- while (!empty ())
- {
- CcnxPit::index<i_timestamp>::type::iterator entry = get<i_timestamp> ().begin ();
- if (entry->GetExpireTime () <= now) // is the record stale?
- {
- get<i_timestamp> ().erase (entry);
- // count ++;
- }
- else
- break; // nothing else to do. All later records will not be stale
- }
-
- // schedule next event
- m_cleanupEvent = Simulator::Schedule (m_cleanupTimeout,
- &CcnxPit::CleanExpired, this);
-}
-
-CcnxPit::iterator
-CcnxPit::Lookup (const CcnxContentObjectHeader &header) const
-{
- iterator entry = end ();
-
- // do the longest prefix match
- const CcnxNameComponents &name = header.GetName ();
- for (size_t componentsCount = name.GetComponents ().size ()+1;
- componentsCount > 0;
- componentsCount--)
- {
- CcnxNameComponents subPrefix (name.GetSubComponents (componentsCount-1));
-
- entry = get<i_prefix> ().find (subPrefix);
- if (entry != end())
- return entry;
- }
-
- return end ();
-}
-
-CcnxPit::iterator
-CcnxPit::Lookup (const CcnxInterestHeader &header)
-{
- NS_LOG_FUNCTION (header.GetName ());
- NS_ASSERT_MSG (m_fib != 0, "FIB should be set");
-
- iterator entry = get<i_prefix> ().find (header.GetName ());
- if (entry == end ())
- return end ();
-
- return entry;
-}
-
-bool
-CcnxPit::CheckIfDuplicate (CcnxPit::iterator entry, const CcnxInterestHeader &header)
-{
- if (!entry->IsNonceSeen (header.GetNonce ()))
- {
- modify (entry,
- boost::bind(&CcnxPitEntry::AddSeenNonce, ll::_1, header.GetNonce ()));
- return false;
- }
- else
- return true;
-}
-
-CcnxPit::iterator
-CcnxPit::Create (const CcnxInterestHeader &header)
-{
- NS_ASSERT_MSG (get<i_prefix> ().find (header.GetName ()) == end (),
- "Entry already exists, Create must not be called!!!");
-
- if (m_maxSize > 0 &&
- size () >= m_maxSize)
- {
- // remove old record
- get<i_timestamp> ().erase (get<i_timestamp> ().begin ());
- }
-
- CcnxFib::iterator fibEntry = m_fib->LongestPrefixMatch (header);
- // NS_ASSERT_MSG (fibEntry != m_fib->m_fib.end (),
- // "There should be at least default route set" << " Prefix = "<<header.GetName() << "NodeID == " << m_fib->GetObject<Node>()->GetId() << "\n" << *m_fib);
-
- return insert (end (),
- CcnxPitEntry (ns3::Create<CcnxNameComponents> (header.GetName ()),
- header.GetInterestLifetime ().IsZero ()?m_PitEntryDefaultLifetime
- : header.GetInterestLifetime (),
- fibEntry));
-}
-
-
-void
-CcnxPit::MarkErased (CcnxPit::iterator entry)
-{
- modify (entry,
- ll::bind (&CcnxPitEntry::SetExpireTime, ll::_1,
- Simulator::Now () + m_PitEntryPruningTimout));
-}
-
-
-std::ostream& operator<< (std::ostream& os, const CcnxPit &pit)
-{
- BOOST_FOREACH (const CcnxPitEntry &entry, pit)
- {
- if (entry.m_incoming.size () == 0 && entry.m_outgoing.size () == 0)
- continue; // these are stale to-be-removed records, so there is no need to print them out
-
- os << entry << std::endl;
- }
-
- return os;
-}
} // namespace ns3