|
|
| 643 |
NS_LOG_DEBUG ("got cts"); |
643 |
NS_LOG_DEBUG ("got cts"); |
| 644 |
} |
644 |
} |
| 645 |
|
645 |
|
|
|
646 |
uint8_t |
| 647 |
EdcaTxopN::GetCurrentTid () |
| 648 |
{ |
| 649 |
if (m_currentHdr.IsQosData ()) |
| 650 |
{ |
| 651 |
return m_currentHdr.GetQosTid (); |
| 652 |
} |
| 653 |
else if (m_currentHdr.IsBlockAckReq ()) |
| 654 |
{ |
| 655 |
CtrlBAckRequestHeader baReqHdr; |
| 656 |
m_currentPacket->PeekHeader (baReqHdr); |
| 657 |
return baReqHdr.GetTidInfo (); |
| 658 |
} |
| 659 |
else if (m_currentHdr.IsBlockAck ()) |
| 660 |
{ |
| 661 |
CtrlBAckResponseHeader baRespHdr; |
| 662 |
m_currentPacket->PeekHeader (baRespHdr); |
| 663 |
return baRespHdr.GetTidInfo (); |
| 664 |
} |
| 665 |
else |
| 666 |
{ |
| 667 |
NS_FATAL_ERROR ("Current packet has no Traffic ID"); |
| 668 |
} |
| 669 |
} |
| 670 |
|
| 646 |
void |
671 |
void |
| 647 |
EdcaTxopN::MissedCts (void) |
672 |
EdcaTxopN::MissedCts (void) |
| 648 |
{ |
673 |
{ |
|
|
| 660 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
685 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 661 |
{ |
686 |
{ |
| 662 |
m_low->FlushAggregateQueue (); |
687 |
m_low->FlushAggregateQueue (); |
| 663 |
uint8_t tid = 0; |
688 |
uint8_t tid = GetCurrentTid (); |
| 664 |
if (m_currentHdr.IsQosData ()) |
|
|
| 665 |
{ |
| 666 |
tid = m_currentHdr.GetQosTid (); |
| 667 |
} |
| 668 |
else if (m_currentHdr.IsBlockAckReq ()) |
| 669 |
{ |
| 670 |
CtrlBAckRequestHeader baReqHdr; |
| 671 |
m_currentPacket->PeekHeader (baReqHdr); |
| 672 |
tid = baReqHdr.GetTidInfo (); |
| 673 |
} |
| 674 |
else |
| 675 |
{ |
| 676 |
NS_FATAL_ERROR ("Current packet is not Qos Data nor BlockAckReq"); |
| 677 |
} |
| 678 |
|
689 |
|
| 679 |
if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid)) |
690 |
if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid)) |
| 680 |
{ |
691 |
{ |
|
|
| 815 |
} |
826 |
} |
| 816 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
827 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 817 |
{ |
828 |
{ |
| 818 |
uint8_t tid = 0; |
829 |
uint8_t tid = GetCurrentTid (); |
| 819 |
if (m_currentHdr.IsQosData ()) |
|
|
| 820 |
{ |
| 821 |
tid = m_currentHdr.GetQosTid (); |
| 822 |
} |
| 823 |
else |
| 824 |
{ |
| 825 |
NS_FATAL_ERROR ("Current packet is not Qos Data"); |
| 826 |
} |
| 827 |
|
830 |
|
| 828 |
if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid)) |
831 |
if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid)) |
| 829 |
{ |
832 |
{ |
|
|
| 874 |
{ |
877 |
{ |
| 875 |
NS_LOG_FUNCTION (this); |
878 |
NS_LOG_FUNCTION (this); |
| 876 |
NS_LOG_DEBUG ("missed block ack"); |
879 |
NS_LOG_DEBUG ("missed block ack"); |
| 877 |
uint8_t tid = 0; |
880 |
uint8_t tid = GetCurrentTid (); |
| 878 |
if (m_currentHdr.IsQosData ()) |
|
|
| 879 |
{ |
| 880 |
tid = m_currentHdr.GetQosTid (); |
| 881 |
} |
| 882 |
else if (m_currentHdr.IsBlockAckReq ()) |
| 883 |
{ |
| 884 |
CtrlBAckRequestHeader baReqHdr; |
| 885 |
m_currentPacket->PeekHeader (baReqHdr); |
| 886 |
tid = baReqHdr.GetTidInfo (); |
| 887 |
} |
| 888 |
else if (m_currentHdr.IsBlockAck ()) |
| 889 |
{ |
| 890 |
CtrlBAckResponseHeader baRespHdr; |
| 891 |
m_currentPacket->PeekHeader (baRespHdr); |
| 892 |
tid = baRespHdr.GetTidInfo (); |
| 893 |
} |
| 894 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
881 |
if (GetAmpduExist (m_currentHdr.GetAddr1 ())) |
| 895 |
{ |
882 |
{ |
| 896 |
m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0); |
883 |
m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0); |