wifi: WifiRemoteStationManager makes use of WifiMacQueueItems
This commit is contained in:
@@ -823,7 +823,7 @@ MacLow::ReceiveOk (Ptr<WifiMacQueueItem> mpdu, double rxSnr, WifiTxVector txVect
|
||||
packet->RemovePacketTag (tag);
|
||||
m_stationManager->ReportRxOk (m_currentPacket->GetAddr1 (),
|
||||
rxSnr, txVector.GetMode ());
|
||||
m_stationManager->ReportRtsOk (m_currentPacket->GetAddr1 (), &m_currentPacket->GetHeader (0),
|
||||
m_stationManager->ReportRtsOk (m_currentPacket->GetHeader (0),
|
||||
rxSnr, txVector.GetMode (), tag.Get ());
|
||||
|
||||
m_ctsTimeoutEvent.Cancel ();
|
||||
@@ -846,9 +846,9 @@ MacLow::ReceiveOk (Ptr<WifiMacQueueItem> mpdu, double rxSnr, WifiTxVector txVect
|
||||
{
|
||||
m_stationManager->ReportRxOk (m_currentPacket->GetAddr1 (),
|
||||
rxSnr, txVector.GetMode ());
|
||||
m_stationManager->ReportDataOk (m_currentPacket->GetAddr1 (), &m_currentPacket->GetHeader (0),
|
||||
m_stationManager->ReportDataOk (*m_currentPacket->begin (),
|
||||
rxSnr, txVector.GetMode (), tag.Get (),
|
||||
m_currentTxVector, m_currentPacket->GetSize ());
|
||||
m_currentTxVector);
|
||||
}
|
||||
// cancel the Normal Ack timer
|
||||
m_normalAckTimeoutEvent.Cancel ();
|
||||
@@ -1500,7 +1500,7 @@ MacLow::CtsTimeout (void)
|
||||
/// \todo should check that there was no RX start before now.
|
||||
/// we should restart a new CTS timeout now until the expected
|
||||
/// end of RX if there was a RX start before now.
|
||||
m_stationManager->ReportRtsFailed (m_currentPacket->GetAddr1 (), &m_currentPacket->GetHeader (0));
|
||||
m_stationManager->ReportRtsFailed (m_currentPacket->GetHeader (0));
|
||||
|
||||
Ptr<QosTxop> qosTxop = DynamicCast<QosTxop> (m_currentTxop);
|
||||
if (qosTxop != 0)
|
||||
|
||||
@@ -656,11 +656,11 @@ void QosTxop::NotifyInternalCollision (void)
|
||||
if (!NeedRtsRetransmission (packet, header))
|
||||
{
|
||||
resetTxop = true;
|
||||
m_stationManager->ReportFinalRtsFailed (header.GetAddr1 (), &header);
|
||||
m_stationManager->ReportFinalRtsFailed (header);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_stationManager->ReportRtsFailed (header.GetAddr1 (), &header);
|
||||
m_stationManager->ReportRtsFailed (header);
|
||||
}
|
||||
}
|
||||
else if (header.GetAddr1 () == Mac48Address::GetBroadcast ())
|
||||
@@ -672,11 +672,11 @@ void QosTxop::NotifyInternalCollision (void)
|
||||
if (!NeedDataRetransmission (packet, header))
|
||||
{
|
||||
resetTxop = true;
|
||||
m_stationManager->ReportFinalDataFailed (header.GetAddr1 (), &header, packet->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (packet, header));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_stationManager->ReportDataFailed (header.GetAddr1 (), &header, packet->GetSize ());
|
||||
m_stationManager->ReportDataFailed (Create<const WifiMacQueueItem> (packet, header));
|
||||
}
|
||||
}
|
||||
if (resetTxop)
|
||||
@@ -717,7 +717,7 @@ QosTxop::NotifyMissedCts (std::list<Ptr<WifiMacQueueItem>> mpduList)
|
||||
if (!NeedRtsRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Cts Fail");
|
||||
m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
|
||||
m_stationManager->ReportFinalRtsFailed (m_currentHdr);
|
||||
if (!m_txFailedCallback.IsNull ())
|
||||
{
|
||||
m_txFailedCallback (m_currentHdr);
|
||||
@@ -822,8 +822,8 @@ QosTxop::MissedAck (void)
|
||||
if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Ack Fail");
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
if (!m_txFailedCallback.IsNull ())
|
||||
{
|
||||
m_txFailedCallback (m_currentHdr);
|
||||
@@ -854,8 +854,8 @@ QosTxop::MissedAck (void)
|
||||
else
|
||||
{
|
||||
NS_LOG_DEBUG ("Retransmit");
|
||||
m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
m_currentHdr.SetRetry ();
|
||||
if (m_currentHdr.IsQosData () && GetBaAgreementEstablished (m_currentHdr.GetAddr1 (), m_currentHdr.GetQosTid ()))
|
||||
{
|
||||
@@ -905,8 +905,8 @@ QosTxop::MissedBlockAck (uint8_t nMpdus)
|
||||
NS_LOG_DEBUG ("Block Ack Request Fail");
|
||||
// if a BA agreement exists, we can get here if there is no outstanding
|
||||
// MPDU whose lifetime has not expired yet.
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
if (m_baManager->ExistsAgreementInState (m_currentHdr.GetAddr1 (), tid,
|
||||
OriginatorBlockAckAgreement::ESTABLISHED))
|
||||
{
|
||||
@@ -942,8 +942,8 @@ QosTxop::MissedBlockAck (uint8_t nMpdus)
|
||||
if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Block Ack Fail");
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
if (!m_txFailedCallback.IsNull ())
|
||||
{
|
||||
m_txFailedCallback (m_currentHdr);
|
||||
@@ -972,7 +972,7 @@ QosTxop::MissedBlockAck (uint8_t nMpdus)
|
||||
else
|
||||
{
|
||||
NS_LOG_DEBUG ("Retransmit");
|
||||
m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr, m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportDataFailed (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr));
|
||||
m_baManager->NotifyMissedBlockAck (m_currentHdr.GetAddr1 (), tid);
|
||||
m_currentPacket = 0;
|
||||
UpdateFailedCw ();
|
||||
@@ -1202,7 +1202,7 @@ QosTxop::NeedFragmentation (void) const
|
||||
{
|
||||
needTxopFragmentation = (GetLow ()->CalculateOverallTxTime (m_currentPacket, &m_currentHdr, m_currentParams) > GetTxopLimit ());
|
||||
}
|
||||
return (needTxopFragmentation || m_stationManager->NeedFragmentation (m_currentHdr.GetAddr1 (), &m_currentHdr, m_currentPacket));
|
||||
return (needTxopFragmentation || m_stationManager->NeedFragmentation (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr)));
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -1212,8 +1212,8 @@ QosTxop::IsTxopFragmentation (void) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!m_stationManager->NeedFragmentation (m_currentHdr.GetAddr1 (), &m_currentHdr, m_currentPacket)
|
||||
|| (GetTxopFragmentSize () < m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,m_currentPacket, 0)))
|
||||
if (!m_stationManager->NeedFragmentation (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr))
|
||||
|| (GetTxopFragmentSize () < m_stationManager->GetFragmentSize (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr), 0)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -1321,7 +1321,7 @@ QosTxop::GetFragmentSize (void) const
|
||||
}
|
||||
else
|
||||
{
|
||||
size = m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,m_currentPacket, m_fragmentNumber);
|
||||
size = m_stationManager->GetFragmentSize (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
@@ -1336,7 +1336,7 @@ QosTxop::GetNextFragmentSize (void) const
|
||||
}
|
||||
else
|
||||
{
|
||||
size = m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,m_currentPacket, m_fragmentNumber + 1);
|
||||
size = m_stationManager->GetFragmentSize (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr), m_fragmentNumber + 1);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
@@ -1351,8 +1351,8 @@ QosTxop::GetFragmentOffset (void) const
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = m_stationManager->GetFragmentOffset (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber);
|
||||
offset = m_stationManager->GetFragmentOffset (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
@@ -1367,8 +1367,8 @@ QosTxop::IsLastFragment (void) const
|
||||
}
|
||||
else
|
||||
{
|
||||
isLastFragment = m_stationManager->IsLastFragment (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber);
|
||||
isLastFragment = m_stationManager->IsLastFragment (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
return isLastFragment;
|
||||
}
|
||||
|
||||
@@ -381,22 +381,21 @@ bool
|
||||
Txop::NeedRtsRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->NeedRetransmission (hdr.GetAddr1 (), &hdr, packet);
|
||||
return m_stationManager->NeedRetransmission (Create<const WifiMacQueueItem> (packet, hdr));
|
||||
}
|
||||
|
||||
bool
|
||||
Txop::NeedDataRetransmission (Ptr<const Packet> packet, const WifiMacHeader &hdr)
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->NeedRetransmission (hdr.GetAddr1 (), &hdr, packet);
|
||||
return m_stationManager->NeedRetransmission (Create<const WifiMacQueueItem> (packet, hdr));
|
||||
}
|
||||
|
||||
bool
|
||||
Txop::NeedFragmentation (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->NeedFragmentation (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket);
|
||||
return m_stationManager->NeedFragmentation (Create<const WifiMacQueueItem> (m_currentPacket, m_currentHdr));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -410,32 +409,32 @@ uint32_t
|
||||
Txop::GetFragmentSize (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber);
|
||||
return m_stationManager->GetFragmentSize (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
|
||||
bool
|
||||
Txop::IsLastFragment (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->IsLastFragment (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber);
|
||||
return m_stationManager->IsLastFragment (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Txop::GetNextFragmentSize (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber + 1);
|
||||
return m_stationManager->GetFragmentSize (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber + 1);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
Txop::GetFragmentOffset (void) const
|
||||
{
|
||||
NS_LOG_FUNCTION (this);
|
||||
return m_stationManager->GetFragmentOffset (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket, m_fragmentNumber);
|
||||
return m_stationManager->GetFragmentOffset (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr), m_fragmentNumber);
|
||||
}
|
||||
|
||||
Ptr<Packet>
|
||||
@@ -615,7 +614,7 @@ Txop::MissedCts (void)
|
||||
if (!NeedRtsRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Cts Fail");
|
||||
m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
|
||||
m_stationManager->ReportFinalRtsFailed (m_currentHdr);
|
||||
if (!m_txFailedCallback.IsNull ())
|
||||
{
|
||||
m_txFailedCallback (m_currentHdr);
|
||||
@@ -670,8 +669,8 @@ Txop::MissedAck (void)
|
||||
if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Ack Fail");
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
if (!m_txFailedCallback.IsNull ())
|
||||
{
|
||||
m_txFailedCallback (m_currentHdr);
|
||||
@@ -684,8 +683,8 @@ Txop::MissedAck (void)
|
||||
else
|
||||
{
|
||||
NS_LOG_DEBUG ("Retransmit");
|
||||
m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
m_currentHdr.SetRetry ();
|
||||
UpdateFailedCw ();
|
||||
m_cwTrace = GetCw ();
|
||||
@@ -718,8 +717,8 @@ Txop::MissedCfPollResponse (bool expectedCfAck)
|
||||
if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
NS_LOG_DEBUG ("Ack Fail");
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
m_currentPacket = 0;
|
||||
}
|
||||
else
|
||||
@@ -788,8 +787,8 @@ Txop::SendCfFrame (WifiMacType frameType, Mac48Address addr)
|
||||
{
|
||||
if (!NeedDataRetransmission (m_currentPacket, m_currentHdr))
|
||||
{
|
||||
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr,
|
||||
m_currentPacket->GetSize ());
|
||||
m_stationManager->ReportFinalDataFailed (Create<const WifiMacQueueItem> (m_currentPacket,
|
||||
m_currentHdr));
|
||||
m_currentPacket = 0;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "wifi-phy.h"
|
||||
#include "wifi-mac.h"
|
||||
#include "wifi-mac-header.h"
|
||||
#include "wifi-mac-queue-item.h"
|
||||
#include "wifi-mac-trailer.h"
|
||||
#include "ht-configuration.h"
|
||||
#include "vht-configuration.h"
|
||||
@@ -799,24 +800,23 @@ WifiRemoteStationManager::GetControlAnswerMode (WifiMode reqMode) const
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportRtsFailed (Mac48Address address, const WifiMacHeader *header)
|
||||
WifiRemoteStationManager::ReportRtsFailed (const WifiMacHeader& header)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
NS_LOG_FUNCTION (this << header);
|
||||
NS_ASSERT (!header.GetAddr1 ().IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header.IsQosData ()) ? header.GetQosTid () : 0);
|
||||
m_ssrc[ac]++;
|
||||
m_macTxRtsFailed (address);
|
||||
DoReportRtsFailed (Lookup (address));
|
||||
m_macTxRtsFailed (header.GetAddr1 ());
|
||||
DoReportRtsFailed (Lookup (header.GetAddr1 ()));
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportDataFailed (Mac48Address address, const WifiMacHeader *header,
|
||||
uint32_t packetSize)
|
||||
WifiRemoteStationManager::ReportDataFailed (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
bool longMpdu = (packetSize + header->GetSize () + WIFI_MAC_FCS_LENGTH) > m_rtsCtsThreshold;
|
||||
NS_LOG_FUNCTION (this << *mpdu);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((mpdu->GetHeader ().IsQosData ()) ? mpdu->GetHeader ().GetQosTid () : 0);
|
||||
bool longMpdu = (mpdu->GetSize () > m_rtsCtsThreshold);
|
||||
if (longMpdu)
|
||||
{
|
||||
m_slrc[ac]++;
|
||||
@@ -825,33 +825,33 @@ WifiRemoteStationManager::ReportDataFailed (Mac48Address address, const WifiMacH
|
||||
{
|
||||
m_ssrc[ac]++;
|
||||
}
|
||||
m_macTxDataFailed (address);
|
||||
DoReportDataFailed (Lookup (address));
|
||||
m_macTxDataFailed (mpdu->GetHeader ().GetAddr1 ());
|
||||
DoReportDataFailed (Lookup (mpdu->GetHeader ().GetAddr1 ()));
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportRtsOk (Mac48Address address, const WifiMacHeader *header,
|
||||
WifiRemoteStationManager::ReportRtsOk (const WifiMacHeader& header,
|
||||
double ctsSnr, WifiMode ctsMode, double rtsSnr)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header << ctsSnr << ctsMode << rtsSnr);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (address);
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
NS_LOG_FUNCTION (this << header << ctsSnr << ctsMode << rtsSnr);
|
||||
NS_ASSERT (!header.GetAddr1 ().IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (header.GetAddr1 ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header.IsQosData ()) ? header.GetQosTid () : 0);
|
||||
station->m_state->m_info.NotifyTxSuccess (m_ssrc[ac]);
|
||||
m_ssrc[ac] = 0;
|
||||
DoReportRtsOk (station, ctsSnr, ctsMode, rtsSnr);
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportDataOk (Mac48Address address, const WifiMacHeader *header,
|
||||
double ackSnr, WifiMode ackMode, double dataSnr,
|
||||
WifiTxVector dataTxVector, uint32_t packetSize)
|
||||
WifiRemoteStationManager::ReportDataOk (Ptr<const WifiMacQueueItem> mpdu, double ackSnr,
|
||||
WifiMode ackMode, double dataSnr, WifiTxVector dataTxVector)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header << ackSnr << ackMode << dataSnr << dataTxVector << packetSize);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (address);
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
bool longMpdu = (packetSize + header->GetSize () + WIFI_MAC_FCS_LENGTH) > m_rtsCtsThreshold;
|
||||
NS_LOG_FUNCTION (this << *mpdu << ackSnr << ackMode << dataSnr << dataTxVector);
|
||||
const WifiMacHeader& hdr = mpdu->GetHeader ();
|
||||
NS_ASSERT (!hdr.GetAddr1 ().IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (hdr.GetAddr1 ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((hdr.IsQosData ()) ? hdr.GetQosTid () : 0);
|
||||
bool longMpdu = (mpdu->GetSize () > m_rtsCtsThreshold);
|
||||
if (longMpdu)
|
||||
{
|
||||
station->m_state->m_info.NotifyTxSuccess (m_slrc[ac]);
|
||||
@@ -866,28 +866,27 @@ WifiRemoteStationManager::ReportDataOk (Mac48Address address, const WifiMacHeade
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header)
|
||||
WifiRemoteStationManager::ReportFinalRtsFailed (const WifiMacHeader& header)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (address);
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
NS_LOG_FUNCTION (this << header);
|
||||
NS_ASSERT (!header.GetAddr1 ().IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (header.GetAddr1 ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header.IsQosData ()) ? header.GetQosTid () : 0);
|
||||
station->m_state->m_info.NotifyTxFailed ();
|
||||
m_ssrc[ac] = 0;
|
||||
m_macTxFinalRtsFailed (address);
|
||||
m_macTxFinalRtsFailed (header.GetAddr1 ());
|
||||
DoReportFinalRtsFailed (station);
|
||||
}
|
||||
|
||||
void
|
||||
WifiRemoteStationManager::ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header,
|
||||
uint32_t packetSize)
|
||||
WifiRemoteStationManager::ReportFinalDataFailed (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (address);
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
NS_LOG_FUNCTION (this << *mpdu);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
WifiRemoteStation *station = Lookup (mpdu->GetHeader ().GetAddr1 ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((mpdu->GetHeader ().IsQosData ()) ? mpdu->GetHeader ().GetQosTid () : 0);
|
||||
station->m_state->m_info.NotifyTxFailed ();
|
||||
bool longMpdu = (packetSize + header->GetSize () + WIFI_MAC_FCS_LENGTH) > m_rtsCtsThreshold;
|
||||
bool longMpdu = (mpdu->GetSize () > m_rtsCtsThreshold);
|
||||
if (longMpdu)
|
||||
{
|
||||
m_slrc[ac] = 0;
|
||||
@@ -896,7 +895,7 @@ WifiRemoteStationManager::ReportFinalDataFailed (Mac48Address address, const Wif
|
||||
{
|
||||
m_ssrc[ac] = 0;
|
||||
}
|
||||
m_macTxFinalDataFailed (address);
|
||||
m_macTxFinalDataFailed (mpdu->GetHeader ().GetAddr1 ());
|
||||
DoReportFinalDataFailed (station);
|
||||
}
|
||||
|
||||
@@ -1052,13 +1051,12 @@ WifiRemoteStationManager::GetUseGreenfieldProtection (void) const
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::NeedRetransmission (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet)
|
||||
WifiRemoteStationManager::NeedRetransmission (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << packet << *header);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((header->IsQosData ()) ? header->GetQosTid () : 0);
|
||||
bool longMpdu = (packet->GetSize () + header->GetSize () + WIFI_MAC_FCS_LENGTH) > m_rtsCtsThreshold;
|
||||
NS_LOG_FUNCTION (this << *mpdu);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
AcIndex ac = QosUtilsMapTidToAc ((mpdu->GetHeader ().IsQosData ()) ? mpdu->GetHeader ().GetQosTid () : 0);
|
||||
bool longMpdu = (mpdu->GetSize () > m_rtsCtsThreshold);
|
||||
uint32_t retryCount, maxRetryCount;
|
||||
if (longMpdu)
|
||||
{
|
||||
@@ -1072,21 +1070,20 @@ WifiRemoteStationManager::NeedRetransmission (Mac48Address address, const WifiMa
|
||||
}
|
||||
bool normally = retryCount < maxRetryCount;
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::NeedRetransmission count: " << retryCount << " result: " << std::boolalpha << normally);
|
||||
return DoNeedRetransmission (Lookup (address), packet, normally);
|
||||
return DoNeedRetransmission (Lookup (mpdu->GetHeader ().GetAddr1 ()), mpdu->GetPacket (), normally);
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::NeedFragmentation (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet)
|
||||
WifiRemoteStationManager::NeedFragmentation (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << packet << *header);
|
||||
if (address.IsGroup ())
|
||||
NS_LOG_FUNCTION (this << *mpdu);
|
||||
if (mpdu->GetHeader ().GetAddr1 ().IsGroup ())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
bool normally = (packet->GetSize () + header->GetSize () + WIFI_MAC_FCS_LENGTH) > GetFragmentationThreshold ();
|
||||
bool normally = mpdu->GetSize () > GetFragmentationThreshold ();
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::NeedFragmentation result: " << std::boolalpha << normally);
|
||||
return DoNeedFragmentation (Lookup (address), packet, normally);
|
||||
return DoNeedFragmentation (Lookup (mpdu->GetHeader ().GetAddr1 ()), mpdu->GetPacket (), normally);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1132,14 +1129,14 @@ WifiRemoteStationManager::DoGetFragmentationThreshold (void) const
|
||||
}
|
||||
|
||||
uint32_t
|
||||
WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet)
|
||||
WifiRemoteStationManager::GetNFragments (Ptr<const WifiMacQueueItem> mpdu)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << *header << packet);
|
||||
NS_LOG_FUNCTION (this << *mpdu);
|
||||
//The number of bytes a fragment can support is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
|
||||
uint32_t nFragments = (packet->GetSize () / (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
|
||||
uint32_t nFragments = (mpdu->GetPacket ()->GetSize () / (GetFragmentationThreshold () - mpdu->GetHeader ().GetSize () - WIFI_MAC_FCS_LENGTH));
|
||||
|
||||
//If the size of the last fragment is not 0.
|
||||
if ((packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH)) > 0)
|
||||
if ((mpdu->GetPacket ()->GetSize () % (GetFragmentationThreshold () - mpdu->GetHeader ().GetSize () - WIFI_MAC_FCS_LENGTH)) > 0)
|
||||
{
|
||||
nFragments++;
|
||||
}
|
||||
@@ -1148,12 +1145,11 @@ WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const
|
||||
}
|
||||
|
||||
uint32_t
|
||||
WifiRemoteStationManager::GetFragmentSize (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber)
|
||||
WifiRemoteStationManager::GetFragmentSize (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
uint32_t nFragment = GetNFragments (header, packet);
|
||||
NS_LOG_FUNCTION (this << *mpdu << fragmentNumber);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
uint32_t nFragment = GetNFragments (mpdu);
|
||||
if (fragmentNumber >= nFragment)
|
||||
{
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning 0");
|
||||
@@ -1162,38 +1158,36 @@ WifiRemoteStationManager::GetFragmentSize (Mac48Address address, const WifiMacHe
|
||||
//Last fragment
|
||||
if (fragmentNumber == nFragment - 1)
|
||||
{
|
||||
uint32_t lastFragmentSize = packet->GetSize () - (fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
|
||||
uint32_t lastFragmentSize = mpdu->GetPacket ()->GetSize () - (fragmentNumber * (GetFragmentationThreshold () - mpdu->GetHeader ().GetSize () - WIFI_MAC_FCS_LENGTH));
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << lastFragmentSize);
|
||||
return lastFragmentSize;
|
||||
}
|
||||
//All fragments but the last, the number of bytes is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
|
||||
else
|
||||
{
|
||||
uint32_t fragmentSize = GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH;
|
||||
uint32_t fragmentSize = GetFragmentationThreshold () - mpdu->GetHeader ().GetSize () - WIFI_MAC_FCS_LENGTH;
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << fragmentSize);
|
||||
return fragmentSize;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
WifiRemoteStationManager::GetFragmentOffset (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber)
|
||||
WifiRemoteStationManager::GetFragmentOffset (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
NS_ASSERT (fragmentNumber < GetNFragments (header, packet));
|
||||
uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH);
|
||||
NS_LOG_FUNCTION (this << *mpdu << fragmentNumber);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
NS_ASSERT (fragmentNumber < GetNFragments (mpdu));
|
||||
uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - mpdu->GetHeader ().GetSize () - WIFI_MAC_FCS_LENGTH);
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentOffset returning " << fragmentOffset);
|
||||
return fragmentOffset;
|
||||
}
|
||||
|
||||
bool
|
||||
WifiRemoteStationManager::IsLastFragment (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber)
|
||||
WifiRemoteStationManager::IsLastFragment (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber)
|
||||
{
|
||||
NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
|
||||
NS_ASSERT (!address.IsGroup ());
|
||||
bool isLast = fragmentNumber == (GetNFragments (header, packet) - 1);
|
||||
NS_LOG_FUNCTION (this << *mpdu << fragmentNumber);
|
||||
NS_ASSERT (!mpdu->GetHeader ().GetAddr1 ().IsGroup ());
|
||||
bool isLast = fragmentNumber == (GetNFragments (mpdu) - 1);
|
||||
NS_LOG_DEBUG ("WifiRemoteStationManager::IsLastFragment returning " << std::boolalpha << isLast);
|
||||
return isLast;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ class WifiPhy;
|
||||
class WifiMac;
|
||||
class WifiMacHeader;
|
||||
class Packet;
|
||||
class WifiMacQueueItem;
|
||||
class WifiTxVector;
|
||||
|
||||
struct WifiRemoteStationState;
|
||||
@@ -715,67 +716,54 @@ public:
|
||||
* Should be invoked whenever the RtsTimeout associated to a transmission
|
||||
* attempt expires.
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
*/
|
||||
void ReportRtsFailed (Mac48Address address, const WifiMacHeader *header);
|
||||
void ReportRtsFailed (const WifiMacHeader& header);
|
||||
/**
|
||||
* Should be invoked whenever the AckTimeout associated to a transmission
|
||||
* attempt expires.
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
* \param packetSize the size of the DATA packet
|
||||
* \param mpdu the MPDU whose transmission failed
|
||||
*/
|
||||
void ReportDataFailed (Mac48Address address, const WifiMacHeader *header,
|
||||
uint32_t packetSize);
|
||||
void ReportDataFailed (Ptr<const WifiMacQueueItem> mpdu);
|
||||
/**
|
||||
* Should be invoked whenever we receive the CTS associated to an RTS
|
||||
* we just sent. Note that we also get the SNR of the RTS we sent since
|
||||
* the receiver put a SnrTag in the CTS.
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
* \param ctsSnr the SNR of the CTS we received
|
||||
* \param ctsMode the WifiMode the receiver used to send the CTS
|
||||
* \param rtsSnr the SNR of the RTS we sent
|
||||
*/
|
||||
void ReportRtsOk (Mac48Address address, const WifiMacHeader *header,
|
||||
void ReportRtsOk (const WifiMacHeader& header,
|
||||
double ctsSnr, WifiMode ctsMode, double rtsSnr);
|
||||
/**
|
||||
* Should be invoked whenever we receive the ACK associated to a data packet
|
||||
* we just sent.
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
* \param mpdu the MPDU
|
||||
* \param ackSnr the SNR of the ACK we received
|
||||
* \param ackMode the WifiMode the receiver used to send the ACK
|
||||
* \param dataSnr the SNR of the DATA we sent
|
||||
* \param dataTxVector the TXVECTOR of the DATA we sent
|
||||
* \param packetSize the size of the DATA packet
|
||||
*/
|
||||
void ReportDataOk (Mac48Address address, const WifiMacHeader *header,
|
||||
double ackSnr, WifiMode ackMode,
|
||||
double dataSnr, WifiTxVector dataTxVector,
|
||||
uint32_t packetSize);
|
||||
void ReportDataOk (Ptr<const WifiMacQueueItem> mpdu, double ackSnr,
|
||||
WifiMode ackMode, double dataSnr, WifiTxVector dataTxVector);
|
||||
/**
|
||||
* Should be invoked after calling ReportRtsFailed if
|
||||
* NeedRetransmission returns false
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
*/
|
||||
void ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header);
|
||||
void ReportFinalRtsFailed (const WifiMacHeader& header);
|
||||
/**
|
||||
* Should be invoked after calling ReportDataFailed if
|
||||
* NeedRetransmission returns false
|
||||
*
|
||||
* \param address the address of the receiver
|
||||
* \param header MAC header of the DATA packet
|
||||
* \param packetSize the size of the DATA packet
|
||||
* \param mpdu the MPDU which was discarded
|
||||
*/
|
||||
void ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header,
|
||||
uint32_t packetSize);
|
||||
void ReportFinalDataFailed (Ptr<const WifiMacQueueItem> mpdu);
|
||||
/**
|
||||
* Typically called per A-MPDU, either when a Block ACK was successfully
|
||||
* received or when a BlockAckTimeout has elapsed.
|
||||
@@ -819,55 +807,40 @@ public:
|
||||
bool NeedCtsToSelf (WifiTxVector txVector);
|
||||
|
||||
/**
|
||||
* \param address remote address
|
||||
* \param header MAC header
|
||||
* \param packet the packet to send
|
||||
* \param mpdu the MPDU to send
|
||||
*
|
||||
* \return true if we want to resend a packet after a failed transmission attempt,
|
||||
* false otherwise.
|
||||
*/
|
||||
bool NeedRetransmission (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet);
|
||||
bool NeedRetransmission (Ptr<const WifiMacQueueItem> mpdu);
|
||||
/**
|
||||
* \param address remote address
|
||||
* \param header MAC header
|
||||
* \param packet the packet to send
|
||||
* \param mpdu the MPDU to send
|
||||
*
|
||||
* \return true if this packet should be fragmented,
|
||||
* false otherwise.
|
||||
*/
|
||||
bool NeedFragmentation (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet);
|
||||
bool NeedFragmentation (Ptr<const WifiMacQueueItem> mpdu);
|
||||
/**
|
||||
* \param address remote address
|
||||
* \param header MAC header
|
||||
* \param packet the packet to send
|
||||
* \param mpdu the MPDU to send
|
||||
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
|
||||
*
|
||||
* \return the size of the corresponding fragment.
|
||||
*/
|
||||
uint32_t GetFragmentSize (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber);
|
||||
uint32_t GetFragmentSize (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber);
|
||||
/**
|
||||
* \param address remote address
|
||||
* \param header MAC header
|
||||
* \param packet the packet to send
|
||||
* \param mpdu the packet to send
|
||||
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
|
||||
*
|
||||
* \return the offset within the original packet where this fragment starts.
|
||||
*/
|
||||
uint32_t GetFragmentOffset (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber);
|
||||
uint32_t GetFragmentOffset (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber);
|
||||
/**
|
||||
* \param address remote address
|
||||
* \param header MAC header
|
||||
* \param packet the packet to send
|
||||
* \param mpdu the packet to send
|
||||
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
|
||||
*
|
||||
* \return true if this is the last fragment, false otherwise.
|
||||
*/
|
||||
bool IsLastFragment (Mac48Address address, const WifiMacHeader *header,
|
||||
Ptr<const Packet> packet, uint32_t fragmentNumber);
|
||||
bool IsLastFragment (Ptr<const WifiMacQueueItem> mpdu, uint32_t fragmentNumber);
|
||||
|
||||
/**
|
||||
* \return the default transmission power
|
||||
@@ -1277,12 +1250,11 @@ private:
|
||||
/**
|
||||
* Return the number of fragments needed for the given packet.
|
||||
*
|
||||
* \param header MAC header
|
||||
* \param packet the packet to be fragmented
|
||||
* \param mpdu the packet to be fragmented
|
||||
*
|
||||
* \return the number of fragments needed
|
||||
*/
|
||||
uint32_t GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet);
|
||||
uint32_t GetNFragments (Ptr<const WifiMacQueueItem> mpdu);
|
||||
|
||||
/**
|
||||
* This is a pointer to the WifiPhy associated with this
|
||||
|
||||
@@ -140,6 +140,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
packetHeader.SetType (WIFI_MAC_DATA);
|
||||
packetHeader.SetQosTid (0);
|
||||
Ptr<Packet> packet = Create<Packet> (10);
|
||||
Ptr<WifiMacQueueItem> mpdu = Create<WifiMacQueueItem> (packet, packetHeader);
|
||||
WifiMode ackMode;
|
||||
|
||||
/*
|
||||
@@ -168,7 +169,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
*/
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -184,7 +185,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
* As we are using recovery power, one failure make power increase.
|
||||
*
|
||||
*/
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -201,10 +202,10 @@ PowerRateAdaptationTest::TestParf ()
|
||||
*/
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -219,7 +220,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
* As we are using recovery power, one failure make power increase. recoveryPower=false.
|
||||
*/
|
||||
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -234,8 +235,8 @@ PowerRateAdaptationTest::TestParf ()
|
||||
* After two consecutive fails the rate is decreased or the power increased.
|
||||
* As we are at maximal power, the rate should be decreased.
|
||||
*/
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -252,7 +253,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
*/
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -268,7 +269,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
* As we are using recovery rate, one failure make rate decrease. recoveryRate=false.
|
||||
*/
|
||||
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -285,7 +286,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
*/
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -303,7 +304,7 @@ PowerRateAdaptationTest::TestParf ()
|
||||
*/
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -319,11 +320,11 @@ PowerRateAdaptationTest::TestParf ()
|
||||
* One successful transmissions after a power decrease make recoverPower=false.
|
||||
* So we need two consecutive failures to increase power again.
|
||||
*/
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -361,6 +362,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
packetHeader.SetType (WIFI_MAC_DATA);
|
||||
packetHeader.SetQosTid (0);
|
||||
Ptr<Packet> packet = Create<Packet> (10);
|
||||
Ptr<WifiMacQueueItem> mpdu = Create<WifiMacQueueItem> (packet, packetHeader);
|
||||
WifiMode ackMode;
|
||||
|
||||
/*
|
||||
@@ -390,7 +392,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -406,7 +408,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
* One failure make the power to be increased again.
|
||||
* Change to state Low.
|
||||
*/
|
||||
manager->ReportDataFailed (remoteAddress, &packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -424,7 +426,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -443,7 +445,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -461,7 +463,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 16 * 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -477,7 +479,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
* After one fail the rate is decreased or the power increased.
|
||||
* As we are at minimal power, the power should be increased.
|
||||
*/
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -494,7 +496,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -511,7 +513,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
* As we are at maximal power, the rate should be decreased.
|
||||
* Set critical rate to 54 Mbps.
|
||||
*/
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -528,7 +530,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -548,7 +550,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
*/
|
||||
for (int i = 0; i < 9 * 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -560,7 +562,7 @@ PowerRateAdaptationTest::TestAparf ()
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -604,6 +606,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
packetHeader.SetType (WIFI_MAC_DATA);
|
||||
packetHeader.SetQosTid (0);
|
||||
Ptr<Packet> packet = Create<Packet> (10);
|
||||
Ptr<WifiMacQueueItem> mpdu = Create<WifiMacQueueItem> (packet, packetHeader);
|
||||
WifiMode ackMode;
|
||||
|
||||
/*
|
||||
@@ -662,7 +665,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
*/
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -675,7 +678,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
/**
|
||||
* Test that 7 is enough.
|
||||
*/
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -692,7 +695,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
*/
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -702,7 +705,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate (txVector.GetChannelWidth (), txVector.GetGuardInterval (), 1), 9000000, "RRPAA: Incorrect vale of data rate");
|
||||
NS_TEST_ASSERT_MSG_EQ (power, 17, "RRPAA: Incorrect value of power level");
|
||||
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -719,7 +722,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -731,7 +734,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -743,7 +746,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 13; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -755,7 +758,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 19; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -767,7 +770,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 23; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -779,7 +782,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 33; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -791,7 +794,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 43; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -811,7 +814,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 49; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -821,7 +824,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
NS_TEST_ASSERT_MSG_EQ (mode.GetDataRate (txVector.GetChannelWidth (), txVector.GetGuardInterval (), 1), 54000000, "RRPAA: Incorrect vale of data rate");
|
||||
NS_TEST_ASSERT_MSG_EQ (power, 17, "RRPAA: Incorrect value of power level");
|
||||
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
mode = txVector.GetMode ();
|
||||
@@ -839,7 +842,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 16 * 50; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -857,7 +860,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -875,7 +878,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 16 * 6; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -893,7 +896,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -909,7 +912,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 11; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -929,7 +932,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -941,7 +944,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -953,7 +956,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -965,7 +968,7 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
txVector = manager->GetDataTxVector (packetHeader);
|
||||
@@ -985,12 +988,12 @@ PowerRateAdaptationTest::TestRrpaa ()
|
||||
{
|
||||
for (int j = 0; j < 25; j++)
|
||||
{
|
||||
manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0, txVector, packet->GetSize ());
|
||||
manager->ReportDataOk (mpdu, 0, ackMode, 0, txVector);
|
||||
}
|
||||
|
||||
for (int j = 0; j < 5; j++)
|
||||
{
|
||||
manager->ReportDataFailed (remoteAddress,&packetHeader, packet->GetSize ());
|
||||
manager->ReportDataFailed (mpdu);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user