diff -r adba3fdac443 -r af3a3d5dcc21 src/wifi/model/mac-low.cc --- a/src/wifi/model/mac-low.cc Fri Jun 12 20:14:31 2015 +0200 +++ b/src/wifi/model/mac-low.cc Fri Jun 12 20:58:01 2015 +0200 @@ -68,14 +68,12 @@ MacLowDcfListener::~MacLowDcfListener () { } - MacLowAggregationCapableTransmissionListener::MacLowAggregationCapableTransmissionListener () { } MacLowAggregationCapableTransmissionListener::~MacLowAggregationCapableTransmissionListener () { } - void MacLowAggregationCapableTransmissionListener::SetAmpdu (bool ampdu) { } @@ -429,7 +427,7 @@ m_sendDataEvent.Cancel (); m_waitSifsEvent.Cancel (); m_endTxNoAckEvent.Cancel (); - m_waitRifsEvent.Cancel(); + m_waitRifsEvent.Cancel(); m_phy = 0; m_stationManager = 0; if (m_phyMacLowListener != 0) @@ -523,11 +521,13 @@ m_phy->SetReceiveErrorCallback (MakeCallback (&MacLow::ReceiveError, this)); SetupPhyMacLowListener (phy); } + Ptr MacLow::GetPhy (void) const { return m_phy; } + void MacLow::ResetPhy (void) { @@ -536,6 +536,7 @@ RemovePhyMacLowListener (m_phy); m_phy = 0; } + void MacLow::SetWifiRemoteStationManager (Ptr manager) { @@ -547,116 +548,139 @@ { m_self = ad; } + void MacLow::SetAckTimeout (Time ackTimeout) { m_ackTimeout = ackTimeout; } + void MacLow::SetBasicBlockAckTimeout (Time blockAckTimeout) { m_basicBlockAckTimeout = blockAckTimeout; } + void MacLow::SetCompressedBlockAckTimeout (Time blockAckTimeout) { m_compressedBlockAckTimeout = blockAckTimeout; } + void MacLow::SetCtsToSelfSupported (bool enable) { m_ctsToSelfSupported = enable; } + bool MacLow::GetCtsToSelfSupported () const { return m_ctsToSelfSupported; } + void MacLow::SetCtsTimeout (Time ctsTimeout) { m_ctsTimeout = ctsTimeout; } + void MacLow::SetSifs (Time sifs) { m_sifs = sifs; } + void MacLow::SetSlotTime (Time slotTime) { m_slotTime = slotTime; } + void MacLow::SetPifs (Time pifs) { m_pifs = pifs; } + void MacLow::SetRifs (Time rifs) { m_rifs = rifs; } + void MacLow::SetBssid (Mac48Address bssid) { m_bssid = bssid; } + void MacLow::SetPromisc (void) { m_promisc = true; } + Mac48Address MacLow::GetAddress (void) const { return m_self; } + Time MacLow::GetAckTimeout (void) const { return m_ackTimeout; } + Time MacLow::GetBasicBlockAckTimeout () const { return m_basicBlockAckTimeout; } + Time MacLow::GetCompressedBlockAckTimeout () const { return m_compressedBlockAckTimeout; } + Time MacLow::GetCtsTimeout (void) const { return m_ctsTimeout; } + Time MacLow::GetSifs (void) const { return m_sifs; } + Time MacLow::GetRifs (void) const { return m_rifs; } + Time MacLow::GetSlotTime (void) const { return m_slotTime; } + Time MacLow::GetPifs (void) const { return m_pifs; } + Mac48Address MacLow::GetBssid (void) const { return m_bssid; } + bool MacLow::IsPromisc (void) const { @@ -664,10 +688,11 @@ } void -MacLow::SetRxCallback (Callback,const WifiMacHeader *> callback) +MacLow::SetRxCallback (Callback, const WifiMacHeader *> callback) { m_rxCallback = callback; } + void MacLow::RegisterDcfListener (MacLowDcfListener *listener) { @@ -705,7 +730,7 @@ * expired. This means that one of these timers is still * running. They are all cancelled below anyway by the * call to CancelAllEvents (because of at least one - * of these two timer) which will trigger a call to the + * of these two timers) which will trigger a call to the * previous listener's cancel method. * * This typically happens because the high-priority @@ -717,8 +742,6 @@ m_listener = listener; m_txParams = params; - //NS_ASSERT (m_phy->IsStateIdle ()); - if(m_aggregateQueue->GetSize () == 0) { m_currentPacket = packet->Copy (); @@ -758,12 +781,14 @@ /* When this method completes, we have taken ownership of the medium. */ NS_ASSERT (m_phy->IsStateTx ()); } + bool MacLow::NeedCtsToSelf (void) { WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr); return m_stationManager->NeedCtsToSelf (dataTxVector); } + void MacLow::ReceiveError (Ptr packet, double rxSnr) { @@ -775,7 +800,7 @@ if(isInAmpdu && m_receivedAtLeastOneMpdu && (ampdu.GetNoOfMpdus() == 1)) { - MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (pkt); + MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (pkt); MpduAggregator::DeaggregatedMpdusCI n = packets.begin (); WifiMacHeader hdr; (*n).first->PeekHeader(hdr); @@ -784,15 +809,15 @@ NS_LOG_DEBUG ("last a-mpdu subframe detected/sendImmediateBlockAck from=" << hdr.GetAddr2 ()); m_sendAckEvent = Simulator::Schedule (GetSifs (), &MacLow::SendBlockAckAfterAmpdu, this, - hdr.GetQosTid(), + hdr.GetQosTid (), hdr.GetAddr2 (), hdr.GetDuration (), m_currentTxVector); } else if (hdr.IsBlockAckReq()) { - NS_LOG_DEBUG("last a-mpdu subframe is BAR"); - } + NS_LOG_DEBUG("last a-mpdu subframe is BAR"); + } m_receivedAtLeastOneMpdu = false; } else if (m_txParams.MustWaitFastAck ()) @@ -860,7 +885,7 @@ */ if (ampduSubframe) { - NS_FATAL_ERROR ("Received RTS as part of an A-MPDU"); + NS_FATAL_ERROR ("Received RTS as part of an A-MPDU"); } else { @@ -893,7 +918,9 @@ { NS_FATAL_ERROR ("Received CTS as part of an A-MPDU"); } + NS_LOG_DEBUG ("receive cts from=" << m_currentHdr.GetAddr1 ()); + SnrTag tag; packet->RemovePacketTag (tag); m_stationManager->ReportRxOk (m_currentHdr.GetAddr1 (), &m_currentHdr, @@ -925,8 +952,9 @@ m_stationManager->ReportDataOk (m_currentHdr.GetAddr1 (), &m_currentHdr, rxSnr, txVector.GetMode (), tag.Get ()); - FlushAggregateQueue(); + FlushAggregateQueue (); bool gotAck = false; + if (m_txParams.MustWaitNormalAck () && m_normalAckTimeoutEvent.IsRunning ()) { @@ -963,7 +991,7 @@ m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 (), txVector.GetMode ()); m_sentMpdus = 0; m_ampdu = false; - FlushAggregateQueue(); + FlushAggregateQueue (); } else if (hdr.IsBlockAckReq () && hdr.GetAddr1 () == m_self) { @@ -1077,7 +1105,7 @@ } else if (hdr.IsData () || hdr.IsMgt ()) { - if (hdr.IsMgt() && ampduSubframe) + if (hdr.IsMgt () && ampduSubframe) { NS_FATAL_ERROR ("Received management packet as part of an A-MPDU"); } @@ -1145,7 +1173,7 @@ { CtrlBAckRequestHeader baReqHdr; packet->PeekHeader (baReqHdr); - tid = baReqHdr.GetTidInfo(); + tid = baReqHdr.GetTidInfo (); } else if (hdr.IsBlockAck ()) { @@ -1163,6 +1191,7 @@ ack.SetType (WIFI_MAC_CTL_ACK); return ack.GetSize () + 4; } + uint32_t MacLow::GetBlockAckSize (enum BlockAckType type) const { @@ -1184,6 +1213,7 @@ } return hdr.GetSize () + blockAck.GetSerializedSize () + 4; } + uint32_t MacLow::GetRtsSize (void) const { @@ -1191,18 +1221,21 @@ rts.SetType (WIFI_MAC_CTL_RTS); return rts.GetSize () + 4; } + Time MacLow::GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const { WifiTxVector ackTxVector = GetAckTxVectorForData (to, dataTxVector.GetMode ()); return GetAckDuration (ackTxVector); } + Time MacLow::GetAckDuration (WifiTxVector ackTxVector) const { NS_ASSERT (ackTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); // ACK should always use non-HT PPDU (HT PPDU cases not supported yet) return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency(), 0, 0); } + Time MacLow::GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const { @@ -1212,11 +1245,12 @@ */ WifiPreamble preamble; if (blockAckReqTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT && type == BASIC_BLOCK_ACK) - preamble= WIFI_PREAMBLE_HT_MF; + preamble = WIFI_PREAMBLE_HT_MF; else - preamble=WIFI_PREAMBLE_LONG; - return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency(), 0, 0); + preamble = WIFI_PREAMBLE_LONG; + return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency (), 0, 0); } + Time MacLow::GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const { @@ -1228,8 +1262,9 @@ MacLow::GetCtsDuration (WifiTxVector ctsTxVector) const { NS_ASSERT (ctsTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); // CTS should always use non-HT PPDU (HT PPDU cases not supported yet) - return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency(), 0, 0); + return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency (), 0, 0); } + uint32_t MacLow::GetCtsSize (void) const { @@ -1237,6 +1272,7 @@ cts.SetType (WIFI_MAC_CTL_CTS); return cts.GetSize () + 4; } + uint32_t MacLow::GetSize (Ptr packet, const WifiMacHeader *hdr) const { @@ -1261,6 +1297,7 @@ Mac48Address to = hdr->GetAddr1 (); return m_stationManager->GetRtsTxVector (to, hdr, packet); } + WifiTxVector MacLow::GetDataTxVector (Ptr packet, const WifiMacHeader *hdr) const { @@ -1270,16 +1307,19 @@ //size is not used in anything!! will not worry about aggregation return m_stationManager->GetDataTxVector (to, hdr, packet, size); } + WifiTxVector MacLow::GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const { return m_stationManager->GetCtsTxVector (to, rtsTxMode); } + WifiTxVector MacLow::GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const { return m_stationManager->GetAckTxVector (to, dataTxMode); } + WifiTxVector MacLow::GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const { @@ -1291,13 +1331,13 @@ { return GetCtsTxVector (to, rtsTxMode); } + WifiTxVector MacLow::GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const { return GetAckTxVector (to, dataTxMode); } - Time MacLow::CalculateOverallTxTime (Ptr packet, const WifiMacHeader* hdr, @@ -1318,19 +1358,19 @@ //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet) preamble = WIFI_PREAMBLE_LONG; } - txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency(), 0, 0); + txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0); txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector); txTime += Time (GetSifs () * 2); } WifiTxVector dataTxVector = GetDataTxVector (packet, hdr); if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ())) preamble = WIFI_PREAMBLE_HT_GF; - else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT) + else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT) preamble = WIFI_PREAMBLE_HT_MF; else preamble = WIFI_PREAMBLE_LONG; uint32_t dataSize = GetSize (packet, hdr); - txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (params.MustWaitAck ()) { txTime += GetSifs (); @@ -1356,7 +1396,7 @@ else preamble = WIFI_PREAMBLE_LONG; txTime += GetSifs (); - txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); } return txTime; } @@ -1394,7 +1434,7 @@ cts.SetType (WIFI_MAC_CTL_CTS); WifiTxVector txVector=GetRtsTxVector (packet, &hdr); Time navCounterResetCtsMissedDelay = - m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency(), 0, 0) + + m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency (), 0, 0) + Time (2 * GetSifs ()) + Time (2 * GetSlotTime ()); m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay, &MacLow::NavCounterResetCtsMissed, this, @@ -1422,6 +1462,7 @@ m_lastNavStart = Simulator::Now (); m_lastNavStart = duration; } + bool MacLow::DoNavStartNow (Time duration) { @@ -1439,6 +1480,7 @@ } return false; } + void MacLow::NotifyAckTimeoutStartNow (Time duration) { @@ -1447,6 +1489,7 @@ (*i)->AckTimeoutStart (duration); } } + void MacLow::NotifyAckTimeoutResetNow () { @@ -1455,6 +1498,7 @@ (*i)->AckTimeoutReset (); } } + void MacLow::NotifyCtsTimeoutStartNow (Time duration) { @@ -1463,6 +1507,7 @@ (*i)->CtsTimeoutStart (duration); } } + void MacLow::NotifyCtsTimeoutResetNow () { @@ -1493,7 +1538,7 @@ Ptr dequeuedPacket; WifiMacHeader newHdr; WifiMacTrailer fcs; - uint32_t queueSize = m_aggregateQueue->GetSize (); + uint32_t queueSize = m_aggregateQueue->GetSize (); bool last = false; uint8_t packetType = 0; //Add packet tag @@ -1527,7 +1572,7 @@ Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType); } if(queueSize > 1) - delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency(), packetType, 0); + delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency (), packetType, 0); preamble = WIFI_PREAMBLE_NONE; } } @@ -1559,6 +1604,7 @@ m_ampdu = false; listener->MissedCts (); } + void MacLow::NormalAckTimeout (void) { @@ -1572,9 +1618,10 @@ m_listener = 0; m_sentMpdus = 0; m_ampdu = false; - FlushAggregateQueue(); + FlushAggregateQueue (); listener->MissedAck (); } + void MacLow::FastAckTimeout (void) { @@ -1592,6 +1639,7 @@ NS_LOG_DEBUG ("fast Ack ok"); } } + void MacLow::BlockAckTimeout (void) { @@ -1606,6 +1654,7 @@ FlushAggregateQueue(); listener->MissedBlockAck (); } + void MacLow::SuperFastAckTimeout () { @@ -1659,16 +1708,16 @@ duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector); duration += GetSifs (); duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), - dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); duration += GetSifs (); if (m_txParams.MustWaitBasicBlockAck ()) { - WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2(), dataTxVector.GetMode ()); + WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ()); duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK); } else if (m_txParams.MustWaitCompressedBlockAck ()) { - WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2(), dataTxVector.GetMode ()); + WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ()); duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK); } else if (m_txParams.MustWaitAck ()) @@ -1678,7 +1727,7 @@ if (m_txParams.HasNextPacket ()) { duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), - dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitAck ()) { duration += GetSifs (); @@ -1688,7 +1737,7 @@ } rts.SetDuration (duration); - Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency(), 0, 0); + Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0); Time timerDelay = txDuration + GetCtsTimeout (); NS_ASSERT (m_ctsTimeoutEvent.IsExpired ()); @@ -1716,7 +1765,7 @@ else preamble = WIFI_PREAMBLE_LONG; - Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitNormalAck ()) { Time timerDelay = txDuration + GetAckTimeout (); @@ -1821,7 +1870,7 @@ { duration += GetSifs (); duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), - dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitAck ()) { duration += GetSifs (); @@ -1885,7 +1934,7 @@ WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr); duration += GetSifs (); duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr), - dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitBasicBlockAck ()) { @@ -1908,7 +1957,7 @@ { duration += GetSifs (); duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), - dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitCompressedBlockAck ()) { duration += GetSifs (); @@ -1932,7 +1981,7 @@ ForwardDown (packet, &cts, ctsTxVector,preamble); - Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency(), 0, 0); + Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency (), 0, 0); txDuration += GetSifs (); NS_ASSERT (m_sendDataEvent.IsExpired ()); @@ -1991,7 +2040,7 @@ { uint8_t tid = GetTid (m_txPackets.at(i).packet, m_txPackets.at(i).hdr); AcIndex ac = QosUtilsMapTidToAc (tid); - std::map::const_iterator listenerIt= m_edcaListeners.find(ac); + std::map::const_iterator listenerIt = m_edcaListeners.find (ac); listenerIt->second->CompleteMpduTx (m_txPackets.at(i).packet, m_txPackets.at(i).hdr, m_txPackets.at(i).timestamp); } @@ -2029,7 +2078,7 @@ if (m_txParams.HasNextPacket ()) { newDuration += GetSifs (); - newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); if (m_txParams.MustWaitCompressedBlockAck ()) { newDuration += GetSifs (); @@ -2043,7 +2092,7 @@ } } - Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),dataTxVector, preamble, m_phy->GetFrequency(), 0, 0); + Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0); duration -= txDuration; duration -= GetSifs (); @@ -2058,7 +2107,7 @@ m_currentPacket->AddTrailer (fcs); } - ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble); + ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector, preamble); m_currentPacket = 0; } @@ -2122,7 +2171,7 @@ bool MacLow::IsInWindow (uint16_t seq, uint16_t winstart, uint16_t winsize) { - return ((seq - winstart+ 4096) % 4096) < winsize; + return ((seq - winstart + 4096) % 4096) < winsize; } bool @@ -2144,7 +2193,7 @@ StoreMpduIfNeeded (packet, hdr); if (!IsInWindow(hdr.GetSequenceNumber (), (*it).second.first.GetStartingSequence (), (*it).second.first.GetBufferSize ())) { - uint16_t delta = (seqNumber - (*it).second.first.GetWinEnd()+ 4096) % 4096; + uint16_t delta = (seqNumber - (*it).second.first.GetWinEnd() + 4096) % 4096; if (delta > 1) { (*it).second.first.SetWinEnd (seqNumber); @@ -2156,14 +2205,14 @@ } } RxCompleteBufferedPacketsUntilFirstLost (originator, tid); //forwards up packets starting from winstart and set winstart to last +1 - (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1)%4096); + (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize() - 1) % 4096); } return true; } return false; } else - return StoreMpduIfNeeded (packet,hdr); + return StoreMpduIfNeeded (packet, hdr); } bool @@ -2270,7 +2319,7 @@ } BufferedPacketI i = (*it).second.second.begin (); for (; i != (*it).second.second.end () - && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceNumber (), endSequence) < mappedStart;) + && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceNumber (), endSequence) < mappedStart; ) { if (guard == (*i).second.GetSequenceControl ()) { @@ -2478,11 +2527,11 @@ { if (!QosUtilsIsOldPacket ((*it).second.first.GetStartingSequence(), reqHdr.GetStartingSequence ())) { - (*it).second.first.SetStartingSequence(reqHdr.GetStartingSequence ()); - (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1) % 4096); + (*it).second.first.SetStartingSequence (reqHdr.GetStartingSequence ()); + (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize() - 1) % 4096); RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid); RxCompleteBufferedPacketsUntilFirstLost (originator, tid); - (*it).second.first.SetWinEnd(((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize()-1) % 4096); + (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence()+(*it).second.first.GetBufferSize() - 1) % 4096); } } } @@ -2508,9 +2557,6 @@ agreement.m_inactivityEvent.Cancel (); Time timeout = MicroSeconds (1024 * agreement.GetTimeout ()); AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ()); - //std::map::iterator it = m_edcaListeners.find (ac); - //NS_ASSERT (it != m_edcaListeners.end ()); - agreement.m_inactivityEvent = Simulator::Schedule (timeout, &MacLowAggregationCapableTransmissionListener::BlockAckInactivityTimeout, m_edcaListeners[ac], @@ -2541,13 +2587,14 @@ if (aggregatedPacket->RemovePacketTag(ampdu)) { ampduSubframe = true; - MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (aggregatedPacket); + MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (aggregatedPacket); MpduAggregator::DeaggregatedMpdusCI n = packets.begin (); WifiMacHeader firsthdr; - (*n).first->PeekHeader(firsthdr); + (*n).first->PeekHeader (firsthdr); NS_LOG_DEBUG ("duration/id=" << firsthdr.GetDuration ()); NotifyNav ((*n).first, firsthdr, preamble); + if (firsthdr.GetAddr1 () == m_self) { m_receivedAtLeastOneMpdu = true; @@ -2555,7 +2602,7 @@ ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe); else if (firsthdr.IsData () || firsthdr.IsQosData ()) { - NS_LOG_DEBUG ("Deaagregate packet with sequence=" << firsthdr.GetSequenceNumber ()); + NS_LOG_DEBUG ("Deaggregate packet with sequence=" << firsthdr.GetSequenceNumber ()); ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe); if (firsthdr.IsQosAck ()) { @@ -2584,7 +2631,7 @@ NS_LOG_DEBUG ("rx A-MPDU/sendImmediateBlockAck from=" << firsthdr.GetAddr2 ()); m_sendAckEvent = Simulator::Schedule (GetSifs (), &MacLow::SendBlockAckAfterAmpdu, this, - firsthdr.GetQosTid(), + firsthdr.GetQosTid (), firsthdr.GetAddr2 (), firsthdr.GetDuration (), txVector); @@ -2618,7 +2665,7 @@ return true; //An HT STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime (10 milliseconds) - if(m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, dataTxVector, preamble, m_phy->GetFrequency(), 0, 0) > MilliSeconds(10)) + if(m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0) > MilliSeconds(10)) return true; if (!m_mpduAggregator->CanBeAggregated (peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, aggregatedPacket, size)) @@ -2756,7 +2803,7 @@ InsertInTxQueue (packet, hdr, tstamp); } } - NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber()<<" to A-MPDU, packet size = " << newPacket->GetSize ()<< ", A-MPDU size = " << currentAggregatedPacket->GetSize ()); + NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber () <<" to A-MPDU, packet size = " << newPacket->GetSize ()<< ", A-MPDU size = " << currentAggregatedPacket->GetSize ()); i++; isAmpdu = true; m_sentMpdus++; @@ -2769,7 +2816,7 @@ InsertInTxQueue (peekedPacket, peekedHdr, tstamp); } if (retry) - listenerIt->second->RemoveFromBaQueue(tid, hdr.GetAddr1 (), peekedHdr.GetSequenceNumber ()); + listenerIt->second->RemoveFromBaQueue (tid, hdr.GetAddr1 (), peekedHdr.GetSequenceNumber ()); else queue->Remove (peekedPacket); newPacket = 0; @@ -2792,7 +2839,7 @@ if (listenerIt->second->GetMsduAggregator () != 0) { - tempPacket = PerformMsduAggregation(peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize); + tempPacket = PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize); if (tempPacket != 0) //MSDU aggregation peekedPacket = tempPacket->Copy(); } @@ -2812,7 +2859,7 @@ if (listenerIt->second->GetMsduAggregator () != 0 && IsInWindow (currentSequenceNumber, startingSequenceNumber, 64)) { - tempPacket = PerformMsduAggregation(peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize); + tempPacket = PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize); if (tempPacket != 0) //MSDU aggregation peekedPacket = tempPacket->Copy(); } @@ -2834,7 +2881,7 @@ } if (qosPolicy==0) { - listenerIt->second->CompleteTransfer(hdr.GetAddr1 (),tid); + listenerIt->second->CompleteTransfer (hdr.GetAddr1 (), tid); } //Add packet tag AmpduTag ampdutag; @@ -2895,7 +2942,7 @@ Ptr queue; AcIndex ac = QosUtilsMapTidToAc (GetTid (packet, *hdr)); - std::map::const_iterator listenerIt= m_edcaListeners.find(ac); + std::map::const_iterator listenerIt = m_edcaListeners.find (ac); NS_ASSERT (listenerIt != m_edcaListeners.end ()); queue = listenerIt->second->GetQueue();