|
|
| 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 |
|