|
|
| 163 |
{ |
163 |
{ |
| 164 |
m_txop->CompleteAmpduTransfer (recipient, tid); |
164 |
m_txop->CompleteAmpduTransfer (recipient, tid); |
| 165 |
} |
165 |
} |
| 166 |
virtual void SetAmpdu (bool ampdu) |
166 |
virtual void SetAmpdu (Mac48Address dest, bool enableAmpdu) |
| 167 |
{ |
167 |
{ |
| 168 |
return m_txop->SetAmpduExist (ampdu); |
168 |
return m_txop->SetAmpduExist (dest, enableAmpdu); |
| 169 |
} |
169 |
} |
| 170 |
virtual void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp) |
170 |
virtual void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp) |
| 171 |
{ |
171 |
{ |
|
|
| 254 |
m_currentPacket (0), |
254 |
m_currentPacket (0), |
| 255 |
m_aggregator (0), |
255 |
m_aggregator (0), |
| 256 |
m_typeOfStation (STA), |
256 |
m_typeOfStation (STA), |
| 257 |
m_blockAckType (COMPRESSED_BLOCK_ACK), |
257 |
m_blockAckType (COMPRESSED_BLOCK_ACK) |
| 258 |
m_ampduExist (false) |
|
|
| 259 |
{ |
258 |
{ |
| 260 |
NS_LOG_FUNCTION (this); |
259 |
NS_LOG_FUNCTION (this); |
| 261 |
m_transmissionListener = new EdcaTxopN::TransmissionListener (this); |
260 |
m_transmissionListener = new EdcaTxopN::TransmissionListener (this); |
|
|
| 632 |
params.DisableNextData (); |
631 |
params.DisableNextData (); |
| 633 |
m_low->StartTransmission (m_currentPacket, &m_currentHdr, |
632 |
m_low->StartTransmission (m_currentPacket, &m_currentHdr, |
| 634 |
params, m_transmissionListener); |
633 |
params, m_transmissionListener); |
| 635 |
if (!GetAmpduExist ()) |
634 |
if (!GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 636 |
{ |
635 |
{ |
| 637 |
CompleteTx (); |
636 |
CompleteTx (); |
| 638 |
} |
637 |
} |
|
|
| 675 |
{ |
674 |
{ |
| 676 |
m_txFailedCallback (m_currentHdr); |
675 |
m_txFailedCallback (m_currentHdr); |
| 677 |
} |
676 |
} |
| 678 |
if (GetAmpduExist ()) |
677 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 679 |
{ |
678 |
{ |
| 680 |
m_low->FlushAggregateQueue (); |
679 |
m_low->FlushAggregateQueue (); |
| 681 |
uint8_t tid = 0; |
680 |
uint8_t tid = 0; |
|
|
| 827 |
{ |
826 |
{ |
| 828 |
m_txFailedCallback (m_currentHdr); |
827 |
m_txFailedCallback (m_currentHdr); |
| 829 |
} |
828 |
} |
| 830 |
if (GetAmpduExist ()) |
829 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 831 |
{ |
830 |
{ |
| 832 |
uint8_t tid = 0; |
831 |
uint8_t tid = 0; |
| 833 |
if (m_currentHdr.IsQosData ()) |
832 |
if (m_currentHdr.IsQosData ()) |
|
|
| 890 |
NS_LOG_DEBUG ("missed block ack"); |
889 |
NS_LOG_DEBUG ("missed block ack"); |
| 891 |
if (NeedBarRetransmission ()) |
890 |
if (NeedBarRetransmission ()) |
| 892 |
{ |
891 |
{ |
| 893 |
if (!GetAmpduExist ()) |
892 |
if (!GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 894 |
{ |
893 |
{ |
| 895 |
//should i report this to station addressed by ADDR1? |
894 |
//should i report this to station addressed by ADDR1? |
| 896 |
NS_LOG_DEBUG ("Retransmit block ack request"); |
895 |
NS_LOG_DEBUG ("Retransmit block ack request"); |
|
|
| 1267 |
} |
1266 |
} |
| 1268 |
} |
1267 |
} |
| 1269 |
|
1268 |
|
| 1270 |
bool EdcaTxopN::GetAmpduExist (void) |
1269 |
bool EdcaTxopN::GetAmpduExist (Mac48Address dest) |
| 1271 |
{ |
1270 |
{ |
| 1272 |
return m_ampduExist; |
1271 |
NS_LOG_FUNCTION (this << dest); |
|
|
1272 |
if (m_aMpduEnabled.find (dest) != m_aMpduEnabled.end ()) |
| 1273 |
{ |
| 1274 |
return m_aMpduEnabled.find (dest)->second; |
| 1275 |
} |
| 1276 |
return false; |
| 1273 |
} |
1277 |
} |
| 1274 |
|
1278 |
|
| 1275 |
void EdcaTxopN::SetAmpduExist (bool ampdu) |
1279 |
void EdcaTxopN::SetAmpduExist (Mac48Address dest, bool enableAmpdu) |
| 1276 |
{ |
1280 |
{ |
| 1277 |
m_ampduExist = ampdu; |
1281 |
NS_LOG_FUNCTION (this << dest << enableAmpdu); |
|
|
1282 |
if (m_aMpduEnabled.find (dest) != m_aMpduEnabled.end () && m_aMpduEnabled.find (dest)->second != enableAmpdu) |
| 1283 |
{ |
| 1284 |
m_aMpduEnabled.erase (m_aMpduEnabled.find (dest)); |
| 1285 |
} |
| 1286 |
if (m_aMpduEnabled.find (dest) == m_aMpduEnabled.end ()) |
| 1287 |
{ |
| 1288 |
m_aMpduEnabled.insert (std::make_pair (dest, enableAmpdu)); |
| 1289 |
} |
| 1278 |
} |
1290 |
} |
| 1279 |
|
1291 |
|
| 1280 |
void |
1292 |
void |