|
|
| 1616 |
bool vhtSingleMpdu = false; |
1616 |
bool vhtSingleMpdu = false; |
| 1617 |
bool last = false; |
1617 |
bool last = false; |
| 1618 |
enum mpduType mpdutype = NORMAL_MPDU; |
1618 |
enum mpduType mpdutype = NORMAL_MPDU; |
|
|
1619 |
|
| 1620 |
uint8_t tid = GetTid (packet, *hdr); |
| 1621 |
AcIndex ac = QosUtilsMapTidToAc (tid); |
| 1622 |
std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac); |
| 1619 |
|
1623 |
|
| 1620 |
if (queueSize == 1) |
1624 |
if (queueSize == 1) |
| 1621 |
{ |
1625 |
{ |
|
|
| 1643 |
mpdutype = LAST_MPDU_IN_AGGREGATE; |
1647 |
mpdutype = LAST_MPDU_IN_AGGREGATE; |
| 1644 |
} |
1648 |
} |
| 1645 |
|
1649 |
|
| 1646 |
uint8_t tid = GetTid (packet, *hdr); |
|
|
| 1647 |
AcIndex ac = QosUtilsMapTidToAc (tid); |
| 1648 |
std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac); |
| 1649 |
listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu); |
1650 |
listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu); |
| 1650 |
|
1651 |
|
| 1651 |
if (hdr->IsBlockAckReq ()) |
1652 |
if (hdr->IsBlockAckReq ()) |
|
|
| 2877 |
WifiMacHeader peekedHdr; |
2878 |
WifiMacHeader peekedHdr; |
| 2878 |
newPacket = packet->Copy (); |
2879 |
newPacket = packet->Copy (); |
| 2879 |
Ptr<Packet> currentAggregatedPacket; |
2880 |
Ptr<Packet> currentAggregatedPacket; |
|
|
2881 |
CtrlBAckRequestHeader blockAckReq; |
| 2880 |
//missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet |
2882 |
//missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet |
| 2881 |
if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ()) |
2883 |
if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ()) |
| 2882 |
{ |
2884 |
{ |
|
|
| 2932 |
{ |
2934 |
{ |
| 2933 |
blockAckSize = packet->GetSize () + hdr.GetSize () + WIFI_MAC_FCS_LENGTH; |
2935 |
blockAckSize = packet->GetSize () + hdr.GetSize () + WIFI_MAC_FCS_LENGTH; |
| 2934 |
qosPolicy = 3; //if the last subrame is block ack req then set ack policy of all frames to blockack |
2936 |
qosPolicy = 3; //if the last subrame is block ack req then set ack policy of all frames to blockack |
| 2935 |
CtrlBAckRequestHeader blockAckReq; |
|
|
| 2936 |
packet->PeekHeader (blockAckReq); |
2937 |
packet->PeekHeader (blockAckReq); |
| 2937 |
startingSequenceNumber = blockAckReq.GetStartingSequence (); |
2938 |
startingSequenceNumber = blockAckReq.GetStartingSequence (); |
| 2938 |
} |
2939 |
} |
|
|
| 3092 |
WifiMacTrailer fcs; |
3093 |
WifiMacTrailer fcs; |
| 3093 |
newPacket->AddTrailer (fcs); |
3094 |
newPacket->AddTrailer (fcs); |
| 3094 |
listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket); |
3095 |
listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket); |
|
|
3096 |
currentAggregatedPacket->AddHeader (blockAckReq); |
| 3095 |
} |
3097 |
} |
| 3096 |
if (qosPolicy == 0) |
3098 |
if (qosPolicy == 0) |
| 3097 |
{ |
3099 |
{ |