|
|
| 258 |
m_msduAggregator (0), |
258 |
m_msduAggregator (0), |
| 259 |
m_mpduAggregator (0), |
259 |
m_mpduAggregator (0), |
| 260 |
m_typeOfStation (STA), |
260 |
m_typeOfStation (STA), |
| 261 |
m_blockAckType (COMPRESSED_BLOCK_ACK) |
261 |
m_blockAckType (COMPRESSED_BLOCK_ACK), |
|
|
262 |
m_isAccessRequestedForRts (false) |
| 262 |
{ |
263 |
{ |
| 263 |
NS_LOG_FUNCTION (this); |
264 |
NS_LOG_FUNCTION (this); |
| 264 |
m_transmissionListener = new EdcaTxopN::TransmissionListener (this); |
265 |
m_transmissionListener = new EdcaTxopN::TransmissionListener (this); |
|
|
| 464 |
Ptr<const Packet> |
465 |
Ptr<const Packet> |
| 465 |
EdcaTxopN::PeekNextRetransmitPacket (WifiMacHeader &header,Mac48Address recipient, uint8_t tid, Time *timestamp) |
466 |
EdcaTxopN::PeekNextRetransmitPacket (WifiMacHeader &header,Mac48Address recipient, uint8_t tid, Time *timestamp) |
| 466 |
{ |
467 |
{ |
| 467 |
return m_baManager->PeekNextPacket (header,recipient,tid, timestamp); |
468 |
return m_baManager->PeekNextPacketByTidAndAddress (header,recipient,tid, timestamp); |
| 468 |
} |
469 |
} |
| 469 |
|
470 |
|
| 470 |
void |
471 |
void |
|
|
| 477 |
EdcaTxopN::NotifyAccessGranted (void) |
478 |
EdcaTxopN::NotifyAccessGranted (void) |
| 478 |
{ |
479 |
{ |
| 479 |
NS_LOG_FUNCTION (this); |
480 |
NS_LOG_FUNCTION (this); |
|
|
481 |
m_isAccessRequestedForRts = false; |
| 480 |
if (m_currentPacket == 0) |
482 |
if (m_currentPacket == 0) |
| 481 |
{ |
483 |
{ |
| 482 |
if (m_queue->IsEmpty () && !m_baManager->HasPackets ()) |
484 |
if (m_queue->IsEmpty () && !m_baManager->HasPackets ()) |
|
|
| 633 |
void EdcaTxopN::NotifyInternalCollision (void) |
635 |
void EdcaTxopN::NotifyInternalCollision (void) |
| 634 |
{ |
636 |
{ |
| 635 |
NS_LOG_FUNCTION (this); |
637 |
NS_LOG_FUNCTION (this); |
| 636 |
NotifyCollision (); |
638 |
bool resetDcf = false; |
|
|
639 |
if (m_isAccessRequestedForRts) |
| 640 |
{ |
| 641 |
if (!NeedRtsRetransmission ()) |
| 642 |
{ |
| 643 |
resetDcf = true; |
| 644 |
m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
| 645 |
} |
| 646 |
else |
| 647 |
{ |
| 648 |
m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
| 649 |
} |
| 650 |
} |
| 651 |
else |
| 652 |
{ |
| 653 |
if (!NeedDataRetransmission ()) |
| 654 |
{ |
| 655 |
resetDcf = true; |
| 656 |
m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
| 657 |
} |
| 658 |
else |
| 659 |
{ |
| 660 |
m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr); |
| 661 |
} |
| 662 |
} |
| 663 |
if (resetDcf) |
| 664 |
{ |
| 665 |
if (!m_txFailedCallback.IsNull ()) |
| 666 |
{ |
| 667 |
m_txFailedCallback (m_currentHdr); |
| 668 |
} |
| 669 |
//to reset the dcf. |
| 670 |
m_currentPacket = 0; |
| 671 |
m_dcf->ResetCw (); |
| 672 |
} |
| 673 |
else |
| 674 |
{ |
| 675 |
m_dcf->UpdateFailedCw (); |
| 676 |
} |
| 677 |
m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ()); |
| 678 |
m_dcf->StartBackoffNow (m_backoffTrace); |
| 679 |
RestartAccessIfNeeded (); |
| 637 |
} |
680 |
} |
| 638 |
|
681 |
|
| 639 |
void |
682 |
void |
|
|
| 1024 |
|| !m_queue->IsEmpty () || m_baManager->HasPackets ()) |
1067 |
|| !m_queue->IsEmpty () || m_baManager->HasPackets ()) |
| 1025 |
&& !m_dcf->IsAccessRequested ()) |
1068 |
&& !m_dcf->IsAccessRequested ()) |
| 1026 |
{ |
1069 |
{ |
|
|
1070 |
Ptr<const Packet> packet; |
| 1071 |
WifiMacHeader hdr; |
| 1072 |
if (m_currentPacket != 0) |
| 1073 |
{ |
| 1074 |
packet = m_currentPacket; |
| 1075 |
hdr = m_currentHdr; |
| 1076 |
} |
| 1077 |
else if (m_baManager->HasPackets ()) |
| 1078 |
{ |
| 1079 |
packet = m_baManager->PeekNextPacket (hdr); |
| 1080 |
} |
| 1081 |
else if (m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations) != 0) |
| 1082 |
{ |
| 1083 |
packet = m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations); |
| 1084 |
} |
| 1085 |
if (packet != 0) |
| 1086 |
{ |
| 1087 |
m_isAccessRequestedForRts = m_stationManager->NeedRts (hdr.GetAddr1 (), &hdr, packet, m_low->GetDataTxVector (packet, &hdr)); |
| 1088 |
} |
| 1089 |
else |
| 1090 |
{ |
| 1091 |
m_isAccessRequestedForRts = false; |
| 1092 |
} |
| 1027 |
m_manager->RequestAccess (m_dcf); |
1093 |
m_manager->RequestAccess (m_dcf); |
| 1028 |
} |
1094 |
} |
| 1029 |
} |
1095 |
} |
|
|
| 1036 |
&& (!m_queue->IsEmpty () || m_baManager->HasPackets ()) |
1102 |
&& (!m_queue->IsEmpty () || m_baManager->HasPackets ()) |
| 1037 |
&& !m_dcf->IsAccessRequested ()) |
1103 |
&& !m_dcf->IsAccessRequested ()) |
| 1038 |
{ |
1104 |
{ |
|
|
1105 |
Ptr<const Packet> packet; |
| 1106 |
WifiMacHeader hdr; |
| 1107 |
if (m_currentPacket != 0) |
| 1108 |
{ |
| 1109 |
packet = m_currentPacket; |
| 1110 |
hdr = m_currentHdr; |
| 1111 |
} |
| 1112 |
else if (m_baManager->HasPackets ()) |
| 1113 |
{ |
| 1114 |
packet = m_baManager->PeekNextPacket (hdr); |
| 1115 |
} |
| 1116 |
else if (m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations) != 0) |
| 1117 |
{ |
| 1118 |
packet = m_queue->PeekFirstAvailable (&hdr, m_currentPacketTimestamp, m_qosBlockedDestinations); |
| 1119 |
} |
| 1120 |
if (packet != 0) |
| 1121 |
{ |
| 1122 |
m_isAccessRequestedForRts = m_stationManager->NeedRts (hdr.GetAddr1 (), &hdr, packet, m_low->GetDataTxVector (packet, &hdr)); |
| 1123 |
} |
| 1124 |
else |
| 1125 |
{ |
| 1126 |
m_isAccessRequestedForRts = false; |
| 1127 |
} |
| 1039 |
m_manager->RequestAccess (m_dcf); |
1128 |
m_manager->RequestAccess (m_dcf); |
| 1040 |
} |
1129 |
} |
| 1041 |
} |
1130 |
} |