|
625 |
void EdcaTxopN::NotifyInternalCollision (void) |
625 |
void EdcaTxopN::NotifyInternalCollision (void) |
626 |
{ |
626 |
{ |
627 |
NS_LOG_FUNCTION (this); |
627 |
NS_LOG_FUNCTION (this); |
|
|
628 |
bool resetDcf = false; |
629 |
bool needRts = m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), |
630 |
&m_currentHdr, |
631 |
m_currentPacket, |
632 |
m_low->GetDataTxVector (m_currentPacket, &m_currentHdr)); |
633 |
if (needRts) |
634 |
{ |
635 |
if (!NeedRtsRetransmission ()) |
636 |
{ |
637 |
resetDcf = true; |
638 |
m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
639 |
} |
640 |
else |
641 |
{ |
642 |
m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
643 |
} |
644 |
} |
645 |
else |
646 |
{ |
647 |
if (!NeedDataRetransmission ()) |
648 |
{ |
649 |
resetDcf = true; |
650 |
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
651 |
} |
652 |
else |
653 |
{ |
654 |
m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
655 |
} |
656 |
} |
657 |
if (resetDcf) |
658 |
{ |
659 |
if (!m_txFailedCallback.IsNull ()) |
660 |
{ |
661 |
m_txFailedCallback (m_currentHdr); |
662 |
} |
663 |
//to reset the dcf. |
664 |
m_currentPacket = 0; |
665 |
m_dcf->ResetCw (); |
666 |
} |
667 |
else |
668 |
{ |
669 |
m_dcf->UpdateFailedCw (); |
670 |
} |
628 |
NotifyCollision (); |
671 |
NotifyCollision (); |
629 |
} |
672 |
} |
630 |
|
673 |
|