--- 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 (),