|
|
| 110 |
{} |
110 |
{} |
| 111 |
MacLowTransmissionListener::~MacLowTransmissionListener () |
111 |
MacLowTransmissionListener::~MacLowTransmissionListener () |
| 112 |
{} |
112 |
{} |
| 113 |
MacLowNavListener::MacLowNavListener () |
113 |
MacLowDcfListener::MacLowDcfListener () |
| 114 |
{} |
114 |
{} |
| 115 |
MacLowNavListener::~MacLowNavListener () |
115 |
MacLowDcfListener::~MacLowDcfListener () |
| 116 |
{} |
116 |
{} |
| 117 |
|
117 |
|
| 118 |
MacLowTransmissionParameters::MacLowTransmissionParameters () |
118 |
MacLowTransmissionParameters::MacLowTransmissionParameters () |
|
|
| 424 |
m_rxCallback = callback; |
423 |
m_rxCallback = callback; |
| 425 |
} |
424 |
} |
| 426 |
void |
425 |
void |
| 427 |
MacLow::RegisterNavListener (MacLowNavListener *listener) |
426 |
MacLow::RegisterDcfListener (MacLowDcfListener *listener) |
| 428 |
{ |
427 |
{ |
| 429 |
m_navListeners.push_back (listener); |
428 |
m_dcfListeners.push_back (listener); |
| 430 |
} |
429 |
} |
| 431 |
|
430 |
|
| 432 |
|
431 |
|
|
|
| 544 |
station->ReportRtsOk (rxSnr, txMode, tag.Get ()); |
543 |
station->ReportRtsOk (rxSnr, txMode, tag.Get ()); |
| 545 |
|
544 |
|
| 546 |
m_ctsTimeoutEvent.Cancel (); |
545 |
m_ctsTimeoutEvent.Cancel (); |
|
|
546 |
NotifyCtsTimeoutResetNow (); |
| 547 |
m_listener->GotCts (rxSnr, txMode); |
547 |
m_listener->GotCts (rxSnr, txMode); |
| 548 |
NS_ASSERT (m_sendDataEvent.IsExpired ()); |
548 |
NS_ASSERT (m_sendDataEvent.IsExpired ()); |
| 549 |
m_sendDataEvent = Simulator::Schedule (GetSifs (), |
549 |
m_sendDataEvent = Simulator::Schedule (GetSifs (), |
|
|
| 570 |
m_normalAckTimeoutEvent.IsRunning ()) |
570 |
m_normalAckTimeoutEvent.IsRunning ()) |
| 571 |
{ |
571 |
{ |
| 572 |
m_normalAckTimeoutEvent.Cancel (); |
572 |
m_normalAckTimeoutEvent.Cancel (); |
|
|
573 |
NotifyAckTimeoutResetNow (); |
| 573 |
gotAck = true; |
574 |
gotAck = true; |
| 574 |
} |
575 |
} |
| 575 |
if (m_txParams.MustWaitFastAck () && |
576 |
if (m_txParams.MustWaitFastAck () && |
| 576 |
m_fastAckTimeoutEvent.IsRunning ()) |
577 |
m_fastAckTimeoutEvent.IsRunning ()) |
| 577 |
{ |
578 |
{ |
| 578 |
m_fastAckTimeoutEvent.Cancel (); |
579 |
m_fastAckTimeoutEvent.Cancel (); |
|
|
580 |
NotifyAckTimeoutResetNow (); |
| 579 |
gotAck = true; |
581 |
gotAck = true; |
| 580 |
} |
582 |
} |
| 581 |
if (gotAck) |
583 |
if (gotAck) |
|
|
| 797 |
void |
799 |
void |
| 798 |
MacLow::DoNavResetNow (Time duration) |
800 |
MacLow::DoNavResetNow (Time duration) |
| 799 |
{ |
801 |
{ |
| 800 |
for (NavListenersCI i = m_navListeners.begin (); i != m_navListeners.end (); i++) |
802 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 801 |
{ |
803 |
{ |
| 802 |
(*i)->NavReset (duration); |
804 |
(*i)->NavReset (duration); |
| 803 |
} |
805 |
} |
|
|
| 807 |
bool |
809 |
bool |
| 808 |
MacLow::DoNavStartNow (Time duration) |
810 |
MacLow::DoNavStartNow (Time duration) |
| 809 |
{ |
811 |
{ |
| 810 |
for (NavListenersCI i = m_navListeners.begin (); i != m_navListeners.end (); i++) |
812 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 811 |
{ |
813 |
{ |
| 812 |
(*i)->NavStart (duration); |
814 |
(*i)->NavStart (duration); |
| 813 |
} |
815 |
} |
|
|
| 820 |
return true; |
822 |
return true; |
| 821 |
} |
823 |
} |
| 822 |
return false; |
824 |
return false; |
|
|
825 |
} |
| 826 |
void |
| 827 |
MacLow::NotifyAckTimeoutStartNow (Time duration) |
| 828 |
{ |
| 829 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 830 |
{ |
| 831 |
(*i)->AckTimeoutStart (duration); |
| 832 |
} |
| 833 |
} |
| 834 |
void |
| 835 |
MacLow::NotifyAckTimeoutResetNow () |
| 836 |
{ |
| 837 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 838 |
{ |
| 839 |
(*i)->AckTimeoutReset (); |
| 840 |
} |
| 841 |
} |
| 842 |
void |
| 843 |
MacLow::NotifyCtsTimeoutStartNow (Time duration) |
| 844 |
{ |
| 845 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 846 |
{ |
| 847 |
(*i)->CtsTimeoutStart (duration); |
| 848 |
} |
| 849 |
} |
| 850 |
void |
| 851 |
MacLow::NotifyCtsTimeoutResetNow () |
| 852 |
{ |
| 853 |
for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++) |
| 854 |
{ |
| 855 |
(*i)->CtsTimeoutReset (); |
| 856 |
} |
| 823 |
} |
857 |
} |
| 824 |
|
858 |
|
| 825 |
void |
859 |
void |
|
|
| 946 |
Time timerDelay = txDuration + GetCtsTimeout (); |
980 |
Time timerDelay = txDuration + GetCtsTimeout (); |
| 947 |
|
981 |
|
| 948 |
NS_ASSERT (m_ctsTimeoutEvent.IsExpired ()); |
982 |
NS_ASSERT (m_ctsTimeoutEvent.IsExpired ()); |
|
|
983 |
NotifyCtsTimeoutStartNow (timerDelay); |
| 949 |
m_ctsTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::CtsTimeout, this); |
984 |
m_ctsTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::CtsTimeout, this); |
| 950 |
|
985 |
|
| 951 |
Ptr<Packet> packet = Create<Packet> (); |
986 |
Ptr<Packet> packet = Create<Packet> (); |
|
|
| 965 |
{ |
1000 |
{ |
| 966 |
Time timerDelay = txDuration + GetAckTimeout (); |
1001 |
Time timerDelay = txDuration + GetAckTimeout (); |
| 967 |
NS_ASSERT (m_normalAckTimeoutEvent.IsExpired ()); |
1002 |
NS_ASSERT (m_normalAckTimeoutEvent.IsExpired ()); |
|
|
1003 |
NotifyAckTimeoutStartNow (timerDelay); |
| 968 |
m_normalAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::NormalAckTimeout, this); |
1004 |
m_normalAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::NormalAckTimeout, this); |
| 969 |
} |
1005 |
} |
| 970 |
else if (m_txParams.MustWaitFastAck ()) |
1006 |
else if (m_txParams.MustWaitFastAck ()) |
| 971 |
{ |
1007 |
{ |
| 972 |
Time timerDelay = txDuration + GetPifs (); |
1008 |
Time timerDelay = txDuration + GetPifs (); |
| 973 |
NS_ASSERT (m_fastAckTimeoutEvent.IsExpired ()); |
1009 |
NS_ASSERT (m_fastAckTimeoutEvent.IsExpired ()); |
|
|
1010 |
NotifyAckTimeoutStartNow (timerDelay); |
| 974 |
m_fastAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::FastAckTimeout, this); |
1011 |
m_fastAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::FastAckTimeout, this); |
| 975 |
} |
1012 |
} |
| 976 |
else if (m_txParams.MustWaitSuperFastAck ()) |
1013 |
else if (m_txParams.MustWaitSuperFastAck ()) |
| 977 |
{ |
1014 |
{ |
| 978 |
Time timerDelay = txDuration + GetPifs (); |
1015 |
Time timerDelay = txDuration + GetPifs (); |
| 979 |
NS_ASSERT (m_superFastAckTimeoutEvent.IsExpired ()); |
1016 |
NS_ASSERT (m_superFastAckTimeoutEvent.IsExpired ()); |
|
|
1017 |
NotifyAckTimeoutStartNow (timerDelay); |
| 980 |
m_superFastAckTimeoutEvent = Simulator::Schedule (timerDelay, |
1018 |
m_superFastAckTimeoutEvent = Simulator::Schedule (timerDelay, |
| 981 |
&MacLow::SuperFastAckTimeout, this); |
1019 |
&MacLow::SuperFastAckTimeout, this); |
| 982 |
} |
1020 |
} |