|
|
| 645 |
} |
645 |
} |
| 646 |
if (GetAmpduExist()) |
646 |
if (GetAmpduExist()) |
| 647 |
{ |
647 |
{ |
|
|
648 |
FlushBaQueue(m_currentHdr.GetQosTid (), m_currentHdr.GetAddr1 ()); |
| 648 |
m_low->FlushAggregateQueue (); |
649 |
m_low->FlushAggregateQueue (); |
|
|
650 |
|
| 651 |
NS_LOG_DEBUG ("Transmit Block Ack Request"); |
| 652 |
CtrlBAckRequestHeader reqHdr; |
| 653 |
reqHdr.SetType (COMPRESSED_BLOCK_ACK); |
| 654 |
uint8_t tid = m_currentHdr.GetQosTid (); |
| 655 |
reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr)); |
| 656 |
reqHdr.SetTidInfo (tid); |
| 657 |
reqHdr.SetHtImmediateAck(true); |
| 658 |
Ptr<Packet> bar = Create<Packet> (); |
| 659 |
bar->AddHeader (reqHdr); |
| 660 |
Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck()); |
| 661 |
m_currentBar = request; |
| 662 |
WifiMacHeader hdr; |
| 663 |
hdr.SetType (WIFI_MAC_CTL_BACKREQ); |
| 664 |
hdr.SetAddr1 (request.recipient); |
| 665 |
hdr.SetAddr2 (m_low->GetAddress ()); |
| 666 |
hdr.SetAddr3 (m_low->GetBssid ()); |
| 667 |
hdr.SetDsNotTo (); |
| 668 |
hdr.SetDsNotFrom (); |
| 669 |
hdr.SetNoRetry (); |
| 670 |
hdr.SetNoMoreFragments (); |
| 671 |
m_currentPacket = request.bar; |
| 672 |
m_currentHdr = hdr; |
| 673 |
} |
| 674 |
else |
| 675 |
{ |
| 676 |
m_currentPacket = 0; |
| 649 |
} |
677 |
} |
| 650 |
// to reset the dcf. |
678 |
// to reset the dcf. |
| 651 |
m_currentPacket = 0; |
|
|
| 652 |
m_dcf->ResetCw (); |
679 |
m_dcf->ResetCw (); |
| 653 |
} |
680 |
} |
| 654 |
else |
681 |
else |
|
|
| 1444 |
} |
1471 |
} |
| 1445 |
} |
1472 |
} |
| 1446 |
|
1473 |
|
|
|
1474 |
void |
| 1475 |
EdcaTxopN::FlushBaQueue (uint8_t tid, Mac48Address recipient) |
| 1476 |
{ |
| 1477 |
m_baManager->FlushQueue (tid, recipient); |
| 1478 |
} |
| 1479 |
|
| 1447 |
} // namespace ns3 |
1480 |
} // namespace ns3 |