apps: Solving a serious bug #33 in ndn::ConsumerWindow
In certain cases, the number of in-flight packets was maintained in a
wrong way, creating inconsistencies and incorrect decision on when to
send out a new Interests. That is, the number of in-flight
packets could be non-zero, while there were no outstanding packets at all.
Thanks to Cheng Yi for the bug discovery
diff --git a/apps/ndn-consumer.cc b/apps/ndn-consumer.cc
index e579312..e5c2a44 100644
--- a/apps/ndn-consumer.cc
+++ b/apps/ndn-consumer.cc
@@ -214,23 +214,12 @@
packet->AddHeader (interestHeader);
NS_LOG_DEBUG ("Interest packet size: " << packet->GetSize ());
- NS_LOG_DEBUG ("Trying to add " << seq << " with " << Simulator::Now () << ". already " << m_seqTimeouts.size () << " items");
-
- m_seqTimeouts.insert (SeqTimeout (seq, Simulator::Now ()));
- m_seqFullDelay.insert (SeqTimeout (seq, Simulator::Now ()));
-
- m_seqLastDelay.erase (seq);
- m_seqLastDelay.insert (SeqTimeout (seq, Simulator::Now ()));
-
- m_seqRetxCounts[seq] ++;
-
- m_transmittedInterests (&interestHeader, this, m_face);
-
- m_rtt->SentSeq (SequenceNumber32 (seq), 1);
+ WillSendOutInterest (seq);
FwHopCountTag hopCountTag;
packet->AddPacketTag (hopCountTag);
+ m_transmittedInterests (&interestHeader, this, m_face);
m_protocolHandler (packet);
ScheduleNextPacket ();
@@ -324,5 +313,22 @@
ScheduleNextPacket ();
}
+void
+Consumer::WillSendOutInterest (uint32_t sequenceNumber)
+{
+ NS_LOG_DEBUG ("Trying to add " << sequenceNumber << " with " << Simulator::Now () << ". already " << m_seqTimeouts.size () << " items");
+
+ m_seqTimeouts.insert (SeqTimeout (sequenceNumber, Simulator::Now ()));
+ m_seqFullDelay.insert (SeqTimeout (sequenceNumber, Simulator::Now ()));
+
+ m_seqLastDelay.erase (sequenceNumber);
+ m_seqLastDelay.insert (SeqTimeout (sequenceNumber, Simulator::Now ()));
+
+ m_seqRetxCounts[sequenceNumber] ++;
+
+ m_rtt->SentSeq (SequenceNumber32 (sequenceNumber), 1);
+}
+
+
} // namespace ndn
} // namespace ns3