|
|
| 732 |
* QapScheduler has taken access to the channel from |
732 |
* QapScheduler has taken access to the channel from |
| 733 |
* one of the Edca of the QAP. |
733 |
* one of the Edca of the QAP. |
| 734 |
*/ |
734 |
*/ |
| 735 |
m_currentPacket = packet->Copy (); |
735 |
Ptr<Packet> newPacket = packet->Copy (); |
| 736 |
// remove the priority tag attached, if any |
736 |
// remove the priority tag attached, if any |
| 737 |
SocketPriorityTag priorityTag; |
737 |
SocketPriorityTag priorityTag; |
| 738 |
m_currentPacket->RemovePacketTag (priorityTag); |
738 |
newPacket->RemovePacketTag (priorityTag); |
| 739 |
m_currentHdr = *hdr; |
739 |
m_currentHdr = *hdr; |
| 740 |
CancelAllEvents (); |
740 |
CancelAllEvents (); |
| 741 |
m_listener = listener; |
741 |
m_listener = listener; |
| 742 |
m_txParams = params; |
742 |
m_txParams = params; |
| 743 |
m_currentTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr); |
|
|
| 744 |
|
743 |
|
| 745 |
if (!m_currentHdr.IsQosData () && !m_currentHdr.IsBlockAck () && !m_currentHdr.IsBlockAckReq ()) |
744 |
if (!m_currentHdr.IsQosData () && !m_currentHdr.IsBlockAck () && !m_currentHdr.IsBlockAckReq ()) |
| 746 |
{ |
745 |
{ |
|
|
| 748 |
//is sent between A-MPDU transmissions. It avoids to unexpectedly flush the aggregate |
747 |
//is sent between A-MPDU transmissions. It avoids to unexpectedly flush the aggregate |
| 749 |
//queue when previous RTS request has failed. |
748 |
//queue when previous RTS request has failed. |
| 750 |
m_ampdu = false; |
749 |
m_ampdu = false; |
|
|
750 |
m_currentPacket = newPacket; |
| 751 |
} |
751 |
} |
| 752 |
else if (m_aggregateQueue->GetSize () > 0) |
752 |
else if (m_aggregateQueue->GetSize () > 0) |
| 753 |
{ |
753 |
{ |
|
|
| 768 |
else |
768 |
else |
| 769 |
{ |
769 |
{ |
| 770 |
//Perform MPDU aggregation if possible |
770 |
//Perform MPDU aggregation if possible |
|
|
771 |
m_currentPacket = newPacket; |
| 771 |
m_ampdu = IsAmpdu (m_currentPacket, m_currentHdr); |
772 |
m_ampdu = IsAmpdu (m_currentPacket, m_currentHdr); |
| 772 |
if (m_ampdu) |
773 |
if (m_ampdu) |
| 773 |
{ |
774 |
{ |
|
|
| 784 |
} |
785 |
} |
| 785 |
} |
786 |
} |
| 786 |
} |
787 |
} |
|
|
788 |
m_currentTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr); |
| 787 |
|
789 |
|
| 788 |
if (NeedRts ()) |
790 |
if (NeedRts ()) |
| 789 |
{ |
791 |
{ |
|
|
| 1628 |
/// we should restart a new cts timeout now until the expected |
1630 |
/// we should restart a new cts timeout now until the expected |
| 1629 |
/// end of rx if there was a rx start before now. |
1631 |
/// end of rx if there was a rx start before now. |
| 1630 |
m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
1632 |
m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
| 1631 |
if (m_sentMpdus == 0) |
|
|
| 1632 |
{ |
| 1633 |
m_currentPacket = 0; |
| 1634 |
} |
| 1635 |
MacLowTransmissionListener *listener = m_listener; |
1633 |
MacLowTransmissionListener *listener = m_listener; |
| 1636 |
m_listener = 0; |
1634 |
m_listener = 0; |
| 1637 |
m_sentMpdus = 0; |
1635 |
m_sentMpdus = 0; |