From 04682bb62e8203b23da4004db81672c501c8a4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deronne?= Date: Wed, 23 Jan 2019 13:56:37 +0100 Subject: [PATCH] wifi: Fix update of the starting sequence in BlockAckManager --- src/wifi/model/block-ack-manager.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/wifi/model/block-ack-manager.cc b/src/wifi/model/block-ack-manager.cc index bd3aa5bf4..c554b9b5f 100644 --- a/src/wifi/model/block-ack-manager.cc +++ b/src/wifi/model/block-ack-manager.cc @@ -295,7 +295,7 @@ BlockAckManager::GetNextPacket (WifiMacHeader &hdr, bool removePacket) NS_ASSERT (agreement != m_agreements.end ()); if (removePacket) { - if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (),(*it)->hdr.GetSequenceNumber ())) + if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (), (*it)->hdr.GetSequenceNumber ())) { //Standard says the originator should not send a packet with seqnum < winstart NS_LOG_DEBUG ("The Retry packet have sequence number < WinStartO --> Discard " << (*it)->hdr.GetSequenceNumber () << " " << agreement->second.first.GetStartingSequence ()); @@ -303,7 +303,7 @@ BlockAckManager::GetNextPacket (WifiMacHeader &hdr, bool removePacket) it = m_retryPackets.erase (it); continue; } - else if ((*it)->hdr.GetSequenceNumber () > (agreement->second.first.GetStartingSequence () + 63) % 4096) + else if (((((*it)->hdr.GetSequenceNumber () - agreement->second.first.GetStartingSequence ()) + 4096) % 4096) > (agreement->second.first.GetBufferSize () - 1)) { agreement->second.first.SetStartingSequence ((*it)->hdr.GetSequenceNumber ()); } @@ -372,7 +372,7 @@ BlockAckManager::PeekNextPacketByTidAndAddress (WifiMacHeader &hdr, uint8_t tid, } if ((*it)->hdr.GetAddr1 () == recipient && (*it)->hdr.GetQosTid () == tid) { - if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (),(*it)->hdr.GetSequenceNumber ())) + if (QosUtilsIsOldPacket (agreement->second.first.GetStartingSequence (), (*it)->hdr.GetSequenceNumber ())) { //standard says the originator should not send a packet with seqnum < winstart NS_LOG_DEBUG ("The Retry packet have sequence number < WinStartO --> Discard " << (*it)->hdr.GetSequenceNumber () << " " << agreement->second.first.GetStartingSequence ()); @@ -381,7 +381,7 @@ BlockAckManager::PeekNextPacketByTidAndAddress (WifiMacHeader &hdr, uint8_t tid, it--; continue; } - else if ((*it)->hdr.GetSequenceNumber () > (agreement->second.first.GetStartingSequence () + 63) % 4096) + else if (((((*it)->hdr.GetSequenceNumber () - agreement->second.first.GetStartingSequence ()) + 4096) % 4096) > (agreement->second.first.GetBufferSize () - 1)) { agreement->second.first.SetStartingSequence ((*it)->hdr.GetSequenceNumber ()); }