|
|
| 2930 |
newPacket = packet->Copy (); |
2930 |
newPacket = packet->Copy (); |
| 2931 |
Ptr<Packet> currentAggregatedPacket; |
2931 |
Ptr<Packet> currentAggregatedPacket; |
| 2932 |
CtrlBAckRequestHeader blockAckReq; |
2932 |
CtrlBAckRequestHeader blockAckReq; |
|
|
2933 |
|
| 2934 |
if (hdr.IsBlockAckReq ()) |
| 2935 |
{ |
| 2936 |
//Workaround to avoid BlockAckReq to be part of an A-MPDU. The standard says that |
| 2937 |
//BlockAckReq is not present in A-MPDU if any QoS data frames for that TID are present. |
| 2938 |
//Since an A-MPDU in non-PSMP frame exchanges aggregates MPDUs from one TID, this means |
| 2939 |
//we should stop aggregation here for single-TID A-MPDUs. Once PSMP and multi-TID A-MPDUs |
| 2940 |
//are supported, the condition of entering here should be changed. |
| 2941 |
return newPacket; |
| 2942 |
} |
| 2943 |
|
| 2933 |
//missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet |
2944 |
//missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet |
| 2934 |
if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ()) |
2945 |
if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ()) |
| 2935 |
{ |
2946 |
{ |
|
|
| 2988 |
packet->PeekHeader (blockAckReq); |
2999 |
packet->PeekHeader (blockAckReq); |
| 2989 |
startingSequenceNumber = blockAckReq.GetStartingSequence (); |
3000 |
startingSequenceNumber = blockAckReq.GetStartingSequence (); |
| 2990 |
} |
3001 |
} |
|
|
3002 |
/// \todo We should also handle Ack and BlockAck |
| 2991 |
aggregated = false; |
3003 |
aggregated = false; |
| 2992 |
bool retry = false; |
3004 |
bool retry = false; |
| 2993 |
//looks for other packets to the same destination with the same Tid need to extend that to include MSDUs |
3005 |
//looks for other packets to the same destination with the same Tid need to extend that to include MSDUs |