From d1d8558d65db3250425055b20da7dba48d89a6d2 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Fri, 21 Feb 2020 16:13:13 +0100 Subject: [PATCH] wifi: Update backoff before checking for immediate access --- .../test/aodv-chain-regression-test-0-0.pcap | Bin 1448 -> 1448 bytes .../test/aodv-chain-regression-test-1-0.pcap | Bin 1024 -> 1024 bytes .../test/aodv-chain-regression-test-2-0.pcap | Bin 1024 -> 1024 bytes .../test/aodv-chain-regression-test-3-0.pcap | Bin 1024 -> 1024 bytes .../test/aodv-chain-regression-test-4-0.pcap | Bin 1024 -> 1024 bytes src/aodv/test/bug-606-test-0-0.pcap | Bin 1448 -> 1448 bytes src/aodv/test/bug-606-test-1-0.pcap | Bin 1024 -> 1024 bytes src/aodv/test/bug-606-test-2-0.pcap | Bin 1024 -> 1024 bytes .../hwmp-simplest-regression-test-0-1.pcap | Bin 77637 -> 77637 bytes .../hwmp-simplest-regression-test-1-1.pcap | Bin 81416 -> 81416 bytes .../test/flame/flame-regression-test-2-1.pcap | Bin 448 -> 448 bytes src/wifi/model/channel-access-manager.cc | 50 ++++++++++++++++++ src/wifi/model/channel-access-manager.h | 9 ++++ src/wifi/model/txop.cc | 49 ++--------------- src/wifi/model/txop.h | 4 -- src/wifi/test/channel-access-manager-test.cc | 5 +- src/wifi/test/wifi-test.cc | 9 ++-- 17 files changed, 73 insertions(+), 53 deletions(-) diff --git a/src/aodv/test/aodv-chain-regression-test-0-0.pcap b/src/aodv/test/aodv-chain-regression-test-0-0.pcap index 9c8c800479b0eaf59174e4c5656618c4a4ba4a07..3108090bad9b469e7960a637f42a0e27034df648 100644 GIT binary patch delta 103 zcmZ3%y@Go}3$s-v!{ql&@)MUiG5ir=B95YC4A#*$cA|e?w delta 82 zcmZqRXyBO8!1UqLL^*|ti<}^g$!v^HOgF9pg(hb)Ix$X|yp}PU(POe8Q!-=4L|Mhj V)0mvVT*b-1;H)@ikk~@zcmT358kqn9 diff --git a/src/aodv/test/aodv-chain-regression-test-2-0.pcap b/src/aodv/test/aodv-chain-regression-test-2-0.pcap index 0ee28de79f4ddc43a9eac734f3bbfbe77d064174..9d233047f86593ba1f43ff050c1d9858c96031af 100644 GIT binary patch delta 78 zcmZqRXyBM2!z2_iQSKPitmKJu3X|CwotV08K&&iAr-=$1yuGT1;NZ91j35xEY-Q diff --git a/src/aodv/test/aodv-chain-regression-test-3-0.pcap b/src/aodv/test/aodv-chain-regression-test-3-0.pcap index 30c4ea28a6800f9d6aef6c88f3f44e05d3cffed9..ad5ae327f4fd4db8c134fea2a13c871fba9d222a 100644 GIT binary patch delta 80 zcmZqRXyBM2!)P^8HkonO#KvT%tn7($3X|CwofwrS3oO^)0mu? YUQ~fp{$g@syfE38Ihk?74g#Z8m delta 88 zcmZqRXyBM2!#HE2Y%q;5T87E*ndB!fb7Ee!l6j)M{A4ahH^x%4l+L82 zIr$xv!sJycp%m K0FlpPwF3Y$>m>64 delta 114 zcmZ3%y@Gp!45PzD*>q-xT87E*ndB!fb7F2-$vjbBeli!M8)L`hK*sZoD<&&4r86;T zPJYLvFnJY|6XS%*Z<&%A`zHr7r!y~?=LTt;e!KS*&&d5zHgC diff --git a/src/aodv/test/bug-606-test-1-0.pcap b/src/aodv/test/bug-606-test-1-0.pcap index e44c9bf1b58d4c1a1cdc2b57a4e14823af40c72d..6b4c7e3b4a52deeda5d6ed5dabf2d6bc0118a127 100644 GIT binary patch delta 72 zcmZqRXyBO8z!){LF?phl(quM9ClHmz=)~AHS&&I_@;N9gnTbh%qMX9yX-rNa#fp=E S0U1S;ZJCo9y(TYYjt2k|suhg@ delta 78 zcmZqRXyBO8z-TeCF`4Oy)226wq;Icyfk?sb36bNbQT`~ delta 74 zcmZqRXyBM2!)P&4_BhiIt%-69li3)Zm;&5DtSm++#uJm*GA1)>OcrEH1}RdUJdMeT W>46?d`WF*O+Lk$)al_<=%<%v@*B0vl diff --git a/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap index c8fe30e0fd59c7a5b67c1aad418ddb63b1567fbd..16e37045dcf8456b3a5064cf678f579414333a99 100644 GIT binary patch delta 4741 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 J>>LJR^?z;k2ulC} delta 4890 zcmYM23vg7`8G!SjWV6{2LLfY{A!~MpfQm{eRZ1fgi;6U$VSE5ZBup#lpwn2i)Pf}n ziVgxXf5Q=Jy(heaSp@H#v`flhalaHLW!Wd2y_cPKdozla+OS7X6Rc=f-hU^a`_TGD3bCoNCIO1xN9= zJRiQoWGn$UFT@eKT~r^^2h-VrZ=>RuAyapc%HM ze?S^AInX!v4z>>t2*|XiLB5$+X6FnHKnA;r>^*!gq!l|#eA9m9Tuc&O+&BH#TZji& zoy3Mx-$XaqqeRj(2M^21E;=5=>R35$D0e331WsL166H-DI}yXWymDNcbmrs<9QC;3 zx*hov{o|A~H|@mERf@;7GjDugS=@+a%x;aOpKN;i9gl2oR zU$9E$w1{rzdk$W=9mPTT%;^!`%vfjUPZufWnHoxSbu-_0rbN{gzIAY}Zl=n?Zd*4n zSSE8w!>_r*nLAWd2|sgK!z;!)(@SL)o@|Ng-mi4<;+lA{O3nJH?)^$#=RMet!Y4o#?|9wpjk&g~P7%p&RR;(C=BcZV04s_#_7n zY_9|r>3UDLB2!wD{*;$SDXtx?!*-30{aUGJct{g%tWv<(*$oOpwy=c<1)9?78{ndCMewvgbyyBRkYbgHCDP5zA?=~hixc?xGX)s5c{?y@tNrkZV*?6HfC^?OX6cQoGI!Qvjwm2l;Asm z_zpY}}Z_3vYFB&~_1o9K35&1;%DMcv@_h1!L23 z>gFVVKFgW7%ADSC+uR}(zK9V&b*4>U1mCDn@FIHEJ5#O&jvWV8z!{sIPaCtdQK~sIJiR2iLYBH=X7_2 zgROE-a)(N+-;}~B4?1{U&Pw1htlgZ#OCEA?(z^b1%zSwRR<@?F_fiKR+J*rE9D_w$ zQuqbIiIVZT9QocM9Mzh{x0X3msR=K5#bNBbC5hV~c4pmSZB87W#J1n1aOEQo7IU`C zy$)dG))d~o+`%#1MKC@5Q97R@n>-KB$NI-Ta~CIY8SGnAPM~(BXAT^v)>H;{wu?#S zDi2Pc#wHK;V4T{Db8?XNvEh-E3GS3?;~8)^2;H@mU3 zxeTUpy3$V8crcIBHK8ieP6$jUl@id(8qrRy2koR$0z@I&$&()3inVJK&@T31*WyBK zTYzT@_) z1YvyEsWByTPq8M23!ZagjXsQ+lfoO*PRvm#_M~w1^G@thC&O#6Q^2*T}un`y_Y?+UrW`>Ki-jN zf~q}ep9`JI4_FQspjw^!i8cO3TJQJNn0?p)KO->$#(=*J6%`mOzIkA92;{q8>y>c=q9 zZ^qw3{TK%NjeS4Vk71x+{DV+GhEl{*c$y#=F@4Qa$Wr+JL7EmtKaLFb+x20OevCu? z)*kB7kMTyGMD9QAAWJ3@hBI{%nQ_Fye3?WT2KJ5Z3hiSU*cU$<+LuQ#=#;0AI&-Ub zN~T)tWDxn_@1EHw_T}(iSRDFFe2^eb<4E}eR1k5xE&Jfd{?|d34&L{j{4}C{H-!&;8>-8pfx5H)7pluJP_@?b$FAFY3Z~t8^Y3*O9X4}w7<=!wYf9vQ>ec7 zfgGY*J$Y&M*UpL%T0o>wK_DF9c(&rPvJw9dk6cUj}p9re9_4?3_wbhpy zwbd>uBBnLFOs7XXyDweI<6{D(SljXa2uQn6(7#^L+-S>-iOArX05Q~_Wg=5!0z^-H zq(2eyGXdhJ-7|oQ$eA!Iru7EW?X~Hb8MV?b8AMELGq-Y@67B2~x{}Al1c;Aze4Ky? znE;W|mX{I{8xtTV+Otfm+UYmo68ineGo&BP1oHBDhV;W}fZv0ZV?US#7)UAhgDHT) z^E^ZP^jngD12UM;Go%lTHdDu`58#(_qFTGB{D<$LBkiqGbH`IarG5KC$HllIO)1f|(e+{`B+Zu(|(mfblLI?T delta 28 ecmX@We1LgE8zaNSkBSplc!20kFlTZNqYD6@S_-BB diff --git a/src/wifi/model/channel-access-manager.cc b/src/wifi/model/channel-access-manager.cc index bcdeae75e..ee64cb5a3 100644 --- a/src/wifi/model/channel-access-manager.cc +++ b/src/wifi/model/channel-access-manager.cc @@ -242,6 +242,56 @@ ChannelAccessManager::IsBusy (void) const return false; } +bool +ChannelAccessManager::NeedBackoffUponAccess (Ptr txop) +{ + NS_LOG_FUNCTION (this << txop); + + // the Txop might have a stale value of remaining backoff slots + UpdateBackoff (); + + /* + * From section 10.3.4.2 "Basic access" of IEEE 802.11-2016: + * + * A STA may transmit an MPDU when it is operating under the DCF access + * method, either in the absence of a PC, or in the CP of the PCF access + * method, when the STA determines that the medium is idle when a frame is + * queued for transmission, and remains idle for a period of a DIFS, or an + * EIFS (10.3.2.3.7) from the end of the immediately preceding medium-busy + * event, whichever is the greater, and the backoff timer is zero. Otherwise + * the random backoff procedure described in 10.3.4.3 shall be followed. + * + * From section 10.22.2.2 "EDCA backoff procedure" of IEEE 802.11-2016: + * + * The backoff procedure shall be invoked by an EDCAF when any of the following + * events occurs: + * a) An MA-UNITDATA.request primitive is received that causes a frame with that AC + * to be queued for transmission such that one of the transmit queues associated + * with that AC has now become non-empty and any other transmit queues + * associated with that AC are empty; the medium is busy on the primary channel + */ + if (!txop->HasFramesToTransmit () && !txop->GetLow ()->IsCfPeriod () && txop->GetBackoffSlots () == 0) + { + if (!IsBusy ()) + { + // medium idle. If this is a DCF, use immediate access (we can transmit + // in a DIFS if the medium remains idle). If this is an EDCAF, update + // the backoff start time kept by the EDCAF to the current time in order + // to correctly align the backoff start time at the next slot boundary + // (performed by the next call to ChannelAccessManager::RequestAccess()) + Time delay = (txop->IsQosTxop () ? Seconds (0) + : m_sifs + txop->GetAifsn () * m_slot); + txop->UpdateBackoffSlotsNow (0, Simulator::Now () + delay); + } + else + { + // medium busy, backoff is neeeded + return true; + } + } + return false; +} + void ChannelAccessManager::RequestAccess (Ptr state, bool isCfPeriod) { diff --git a/src/wifi/model/channel-access-manager.h b/src/wifi/model/channel-access-manager.h index ad0dbd56c..7d68376f9 100644 --- a/src/wifi/model/channel-access-manager.h +++ b/src/wifi/model/channel-access-manager.h @@ -112,6 +112,15 @@ public: */ void Add (Ptr dcf); + /** + * Determine if a new backoff needs to be generated when a packet is queued + * for transmission. + * + * \param txop the Txop requesting to generate a backoff + * \return true if backoff needs to be generated, false otherwise + */ + bool NeedBackoffUponAccess (Ptr txop); + /** * \param state a Txop * \param isCfPeriod flag whether it is called during the CF period diff --git a/src/wifi/model/txop.cc b/src/wifi/model/txop.cc index dc387659b..7b15b7bd0 100644 --- a/src/wifi/model/txop.cc +++ b/src/wifi/model/txop.cc @@ -312,50 +312,6 @@ Txop::HasFramesToTransmit (void) return ret; } -void -Txop::GenerateBackoffUponAccessIfNeeded (void) -{ - NS_LOG_FUNCTION (this); - /* - * From section 10.3.4.2 "Basic access" of IEEE 802.11-2016: - * - * A STA may transmit an MPDU when it is operating under the DCF access - * method, either in the absence of a PC, or in the CP of the PCF access - * method, when the STA determines that the medium is idle when a frame is - * queued for transmission, and remains idle for a period of a DIFS, or an - * EIFS (10.3.2.3.7) from the end of the immediately preceding medium-busy - * event, whichever is the greater, and the backoff timer is zero. Otherwise - * the random backoff procedure described in 10.3.4.3 shall be followed. - * - * From section 10.22.2.2 "EDCA backoff procedure" of IEEE 802.11-2016: - * - * The backoff procedure shall be invoked by an EDCAF when any of the following - * events occurs: - * a) An MA-UNITDATA.request primitive is received that causes a frame with that AC - * to be queued for transmission such that one of the transmit queues associated - * with that AC has now become non-empty and any other transmit queues - * associated with that AC are empty; the medium is busy on the primary channel - */ - if (!HasFramesToTransmit () && !m_low->IsCfPeriod () && m_backoffSlots == 0) - { - if (!m_channelAccessManager->IsBusy ()) - { - // medium idle. If this is a DCF, use immediate access (we can transmit - // in a DIFS if the medium remains idle). If this is an EDCAF, update - // the backoff start time kept by the EDCAF to the current time in order - // to correctly align the backoff start time at the next slot boundary - // (performed by the next call to ChannelAccessManager::RequestAccess()) - Time delay = (IsQosTxop () ? Seconds (0) : m_low->GetSifs () + GetAifsn () * m_low->GetSlotTime ()); - UpdateBackoffSlotsNow (0, Simulator::Now () + delay); - } - else - { - // medium busy, generate backoff - GenerateBackoff (); - } - } -} - void Txop::Queue (Ptr packet, const WifiMacHeader &hdr) { @@ -365,7 +321,10 @@ Txop::Queue (Ptr packet, const WifiMacHeader &hdr) SocketPriorityTag priorityTag; packetCopy->RemovePacketTag (priorityTag); m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr, packetCopy); - GenerateBackoffUponAccessIfNeeded (); + if (m_channelAccessManager->NeedBackoffUponAccess (this)) + { + GenerateBackoff (); + } m_queue->Enqueue (Create (packetCopy, hdr)); StartAccessIfNeeded (); } diff --git a/src/wifi/model/txop.h b/src/wifi/model/txop.h index 606f8078c..0fb0c6dec 100644 --- a/src/wifi/model/txop.h +++ b/src/wifi/model/txop.h @@ -376,10 +376,6 @@ protected: * \return true if the DCF has frames to transmit. */ virtual bool HasFramesToTransmit (void); - /** - * Generate a new backoff, if needed, when a packet is queued for transmission. - */ - virtual void GenerateBackoffUponAccessIfNeeded (void); /** * Generate a new backoff now. */ diff --git a/src/wifi/test/channel-access-manager-test.cc b/src/wifi/test/channel-access-manager-test.cc index a6126a557..758c567a3 100644 --- a/src/wifi/test/channel-access-manager-test.cc +++ b/src/wifi/test/channel-access-manager-test.cc @@ -679,7 +679,10 @@ void ChannelAccessManagerTest::DoAccessRequest (uint64_t txTime, uint64_t expectedGrantTime, Ptr> state) { - state->GenerateBackoffUponAccessIfNeeded (); + if (m_ChannelAccessManager->NeedBackoffUponAccess (state)) + { + state->GenerateBackoff (); + } state->QueueTx (txTime, expectedGrantTime); m_ChannelAccessManager->RequestAccess (state); } diff --git a/src/wifi/test/wifi-test.cc b/src/wifi/test/wifi-test.cc index 0be76272b..97533ddc9 100644 --- a/src/wifi/test/wifi-test.cc +++ b/src/wifi/test/wifi-test.cc @@ -460,7 +460,6 @@ DcfImmediateAccessBroadcastTestCase::NotifyPhyTxBegin (Ptr p, doub { if (m_numSentPackets == 0) { - NS_ASSERT_MSG (Simulator::Now () == Time (Seconds (1)), "Packet 0 not transmitted at 1 second"); m_numSentPackets++; m_firstTransmissionTime = Simulator::Now (); } @@ -536,13 +535,17 @@ DcfImmediateAccessBroadcastTestCase::DoRun (void) Simulator::Run (); Simulator::Destroy (); + // First packet is transmitted a DIFS after the packet is queued. A DIFS + // is 2 slots (2 * 9 = 18 us) plus a SIFS (16 us), i.e., 34 us + Time expectedFirstTransmissionTime = Seconds (1.0) + MicroSeconds (34); + //First packet has 1408 us of transmit time. Slot time is 9 us. //Backoff is 1 slots. SIFS is 16 us. DIFS is 2 slots = 18 us. //Should send next packet at 1408 us + (1 * 9 us) + 16 us + (2 * 9) us //1451 us after the first one. uint32_t expectedWait1 = 1408 + (1 * 9) + 16 + (2 * 9); - Time expectedSecondTransmissionTime = MicroSeconds (expectedWait1) + MilliSeconds (1000); - NS_TEST_ASSERT_MSG_EQ (m_firstTransmissionTime, MilliSeconds (1000), "The first transmission time not correct!"); + Time expectedSecondTransmissionTime = expectedFirstTransmissionTime + MicroSeconds (expectedWait1); + NS_TEST_ASSERT_MSG_EQ (m_firstTransmissionTime, expectedFirstTransmissionTime, "The first transmission time not correct!"); NS_TEST_ASSERT_MSG_EQ (m_secondTransmissionTime, expectedSecondTransmissionTime, "The second transmission time not correct!"); }