# HG changeset patch # User Sébastien Deronne # Date 1440522935 -7200 # Node ID ed7219e27e3fc4651dff186114286f0541dd9cf9 # Parent 00752c4140a9ed9f88509240ce38ed5714874847 avoid calls to GetQosTid for non QoS Data diff -r 00752c4140a9 -r ed7219e27e3f src/wifi/model/block-ack-manager.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::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::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::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::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 (); diff -r 00752c4140a9 -r ed7219e27e3f src/wifi/model/edca-txop-n.cc --- 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 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 (),