limits: one more update and small interface changes
diff --git a/model/fw/simple-window-limits.h b/model/fw/simple-window-limits.h
index 69fcd19..7e844ba 100644
--- a/model/fw/simple-window-limits.h
+++ b/model/fw/simple-window-limits.h
@@ -26,11 +26,11 @@
#include "ns3/ndn-pit.h"
#include "ns3/ndn-pit-entry.h"
#include "ns3/simulator.h"
+#include "ns3/string.h"
#include "ns3/ndn-forwarding-strategy.h"
-#include "../../utils/ndn-limits-window.h"
-
+#include "ns3/ndn-limits.h"
namespace ns3 {
namespace ndn {
@@ -63,7 +63,8 @@
virtual void
AddFace (Ptr<Face> face)
{
- Ptr<Limits> limits = CreateObject<LimitsWindow> ();
+ ObjectFactory factory (m_limitType);
+ Ptr<Limits> limits = factory.template Create<Limits> ();
face->AggregateObject (limits);
super::AddFace (face);
@@ -81,6 +82,8 @@
WillSatisfyPendingInterest (Ptr<Face> inFace,
Ptr<pit::Entry> pitEntry);
+private:
+ std::string m_limitType;
};
template<class Parent>
@@ -91,6 +94,11 @@
.SetGroupName ("Ndn")
.template SetParent <super> ()
.template AddConstructor <SimpleWindowLimits> ()
+
+ .template AddAttribute ("Limit", "Limit type to be used (e.g., ns3::ndn::Limits::Window or ns3::ndn::Limits::Rate)",
+ StringValue ("ns3::ndn::Limits::Window"),
+ MakeStringAccessor (&SimpleWindowLimits<Parent>::m_limitType),
+ MakeStringChecker ())
;
return tid;
}
@@ -115,8 +123,10 @@
return false;
}
- if (outFace->template GetObject<LimitsWindow> ()->IsBelowLimit ())
+ Ptr<Limits> faceLimits = outFace->template GetObject<Limits> ();
+ if (faceLimits->IsBelowLimit ())
{
+ faceLimits->BorrowLimit ();
pitEntry->AddOutgoing (outFace);
//transmission
@@ -144,7 +154,8 @@
face != pitEntry->GetOutgoing ().end ();
face ++)
{
- face->m_face->GetObject<LimitsWindow> ()->RemoveOutstanding ();
+ Ptr<Limits> faceLimits = face->m_face->GetObject<Limits> ();
+ faceLimits->ReturnLimit ();
}
super::WillEraseTimedOutPendingInterest (pitEntry);
@@ -162,7 +173,8 @@
face != pitEntry->GetOutgoing ().end ();
face ++)
{
- face->m_face->GetObject<LimitsWindow> ()->RemoveOutstanding ();
+ Ptr<Limits> faceLimits = face->m_face->GetObject<Limits> ();
+ faceLimits->ReturnLimit ();
}
super::WillSatisfyPendingInterest (inFace, pitEntry);