|
|
| 662 |
m_currentPacket->PeekHeader (baRespHdr); |
662 |
m_currentPacket->PeekHeader (baRespHdr); |
| 663 |
return baRespHdr.GetTidInfo (); |
663 |
return baRespHdr.GetTidInfo (); |
| 664 |
} |
664 |
} |
|
|
665 |
else if (m_currentHdr.IsMgt () && m_currentHdr.IsAction ()) |
| 666 |
{ |
| 667 |
Ptr<Packet> packet = m_currentPacket->Copy (); |
| 668 |
WifiActionHeader actionHdr; |
| 669 |
packet->RemoveHeader (actionHdr); |
| 670 |
|
| 671 |
if (actionHdr.GetCategory () == WifiActionHeader::BLOCK_ACK) |
| 672 |
{ |
| 673 |
switch (actionHdr.GetAction ().blockAck) |
| 674 |
{ |
| 675 |
case WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST: |
| 676 |
{ |
| 677 |
MgtAddBaResponseHeader reqHdr; |
| 678 |
packet->RemoveHeader (reqHdr); |
| 679 |
return reqHdr.GetTid (); |
| 680 |
} |
| 681 |
case WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE: |
| 682 |
{ |
| 683 |
MgtAddBaResponseHeader respHdr; |
| 684 |
packet->RemoveHeader (respHdr); |
| 685 |
return respHdr.GetTid (); |
| 686 |
} |
| 687 |
case WifiActionHeader::BLOCK_ACK_DELBA: |
| 688 |
{ |
| 689 |
MgtDelBaHeader delHdr; |
| 690 |
packet->RemoveHeader (delHdr); |
| 691 |
return delHdr.GetTid (); |
| 692 |
} |
| 693 |
default: |
| 694 |
{ |
| 695 |
NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this BA action frame"); |
| 696 |
} |
| 697 |
} |
| 698 |
} |
| 699 |
else |
| 700 |
{ |
| 701 |
NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this action frame"); |
| 702 |
} |
| 703 |
} |
| 665 |
else |
704 |
else |
| 666 |
{ |
705 |
{ |
| 667 |
NS_FATAL_ERROR ("Current packet has no Traffic ID"); |
706 |
NS_FATAL_ERROR ("Current packet has no Traffic ID"); |