avoid calls to GetQosTid for non QoS Data
authorSébastien Deronne <sebastien.deronne@gmail.com>
Tue, 25 Aug 2015 19:15:35 +0200
changeset 11616 ed7219e27e3f
parent 11615 00752c4140a9
child 11617 ef902d405430
avoid calls to GetQosTid for non QoS Data
src/wifi/model/block-ack-manager.cc
src/wifi/model/edca-txop-n.cc
--- a/src/wifi/model/block-ack-manager.cc	Tue Aug 25 06:46:23 2015 -0700
+++ b/src/wifi/model/block-ack-manager.cc	Tue Aug 25 19:15:35 2015 +0200
@@ -334,6 +334,10 @@
   std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();
   for (; it != m_retryPackets.end (); it++)
     {
+      if (!(*it)->hdr.IsQosData ())
+        {
+          NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+        }
       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
         {
           if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (),(*it)->hdr.GetSequenceNumber ()))
@@ -386,6 +390,10 @@
   std::list<PacketQueueI>::iterator it = m_retryPackets.begin ();
   for (; it != m_retryPackets.end (); it++)
     {
+      if (!(*it)->hdr.IsQosData ())
+        {
+          NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+        }
       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid && (*it)->hdr.GetSequenceNumber () == seqnumber)
         {
           WifiMacHeader hdr = (*it)->hdr;
@@ -459,6 +467,10 @@
       std::list<PacketQueueI>::const_iterator it = m_retryPackets.begin ();
       while (it != m_retryPackets.end ())
         {
+          if (!(*it)->hdr.IsQosData ())
+            {
+              NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+            }
           if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
             {
               currentSeq = (*it)->hdr.GetSequenceNumber ();
@@ -500,6 +512,10 @@
   while (it != m_retryPackets.end ())
     {
       NS_LOG_FUNCTION (this << (*it)->hdr.GetType ());
+      if (!(*it)->hdr.IsQosData ())
+        {
+          NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+        }
       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid && currentSeq == (*it)->hdr.GetSequenceNumber ())
         {
           return true;
@@ -886,6 +902,10 @@
   std::list<PacketQueueI>::const_iterator it = m_retryPackets.begin ();
   while (it != m_retryPackets.end ())
     {
+      if (!(*it)->hdr.IsQosData ())
+        {
+          NS_FATAL_ERROR ("Packet in blockAck manager retry queue is not Qos Data");
+        }
       if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid)
         {
           return (*it)->hdr.GetSequenceNumber ();
--- a/src/wifi/model/edca-txop-n.cc	Tue Aug 25 06:46:23 2015 -0700
+++ b/src/wifi/model/edca-txop-n.cc	Tue Aug 25 19:15:35 2015 +0200
@@ -681,7 +681,15 @@
           NS_LOG_DEBUG ("Transmit Block Ack Request");
           CtrlBAckRequestHeader reqHdr;
           reqHdr.SetType (COMPRESSED_BLOCK_ACK);
-          uint8_t tid = m_currentHdr.GetQosTid ();
+          uint8_t tid = 0;
+          if (m_currentHdr.IsQosData ())
+            {
+              tid = m_currentHdr.GetQosTid ();
+            }
+          else
+            {
+              NS_FATAL_ERROR ("Current packet is not Qos Data");
+            }
           reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
           reqHdr.SetTidInfo (tid);
           reqHdr.SetHtImmediateAck (true);
@@ -823,7 +831,15 @@
           NS_LOG_DEBUG ("Transmit Block Ack Request");
           CtrlBAckRequestHeader reqHdr;
           reqHdr.SetType (COMPRESSED_BLOCK_ACK);
-          uint8_t tid = m_currentHdr.GetQosTid ();
+          uint8_t tid = 0;
+          if (m_currentHdr.IsQosData ())
+            {
+              tid = m_currentHdr.GetQosTid ();
+            }
+          else
+            {
+              NS_FATAL_ERROR ("Current packet is not Qos Data");
+            }
           reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
           reqHdr.SetTidInfo (tid);
           reqHdr.SetHtImmediateAck (true);
@@ -1226,9 +1242,17 @@
 EdcaTxopN::VerifyBlockAck (void)
 {
   NS_LOG_FUNCTION (this);
-  uint8_t tid = m_currentHdr.GetQosTid ();
+  uint8_t tid = 0;
   Mac48Address recipient = m_currentHdr.GetAddr1 ();
   uint16_t sequence = m_currentHdr.GetSequenceNumber ();
+  if (m_currentHdr.IsQosData ())
+    {
+      tid = m_currentHdr.GetQosTid ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Current packet is not Qos Data");
+    }
   if (m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::INACTIVE))
     {
       m_baManager->SwitchToBlockAckIfNeeded (recipient, tid, sequence);
@@ -1268,6 +1292,7 @@
 void
 EdcaTxopN::CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
 {
+  NS_ASSERT (m_currentHdr.IsQosData ());
   m_baManager->StorePacket (packet, hdr, tstamp);
   m_baManager->NotifyMpduTransmission (hdr.GetAddr1 (), hdr.GetQosTid (),
                                        m_txMiddle->GetNextSeqNumberByTidAndAddress (hdr.GetQosTid (),