From 4e184f3e9b8a4b652a8fa81381499195f893f64b Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Tue, 7 Jan 2020 22:51:00 +0100 Subject: [PATCH] wifi: Align EDCA transmissions to slot boundaries --- CHANGES.html | 6 ++ RELEASE_NOTES | 2 + .../hwmp-proactive-regression-test-2-1.pcap | Bin 1039 -> 1039 bytes .../hwmp-proactive-regression-test-4-1.pcap | Bin 1142 -> 1142 bytes .../hwmp-reactive-regression-test-5-1.pcap | Bin 1920 -> 1920 bytes .../hwmp-simplest-regression-test-0-1.pcap | Bin 77637 -> 77637 bytes .../hwmp-simplest-regression-test-1-1.pcap | Bin 81416 -> 81416 bytes ...hwmp-target-flags-regression-test-0-1.pcap | Bin 1066 -> 1066 bytes ...hwmp-target-flags-regression-test-1-1.pcap | Bin 1066 -> 1066 bytes ...hwmp-target-flags-regression-test-2-1.pcap | Bin 1066 -> 1066 bytes .../test/flame/flame-regression-test-2-1.pcap | Bin 448 -> 448 bytes src/wifi/doc/source/wifi-design.rst | 71 ++++++++++++++---- src/wifi/doc/source/wifi-references.rst | 2 + src/wifi/model/channel-access-manager.cc | 15 ++++ src/wifi/model/txop.cc | 5 +- src/wifi/test/block-ack-test-suite.cc | 33 +++++--- src/wifi/test/inter-bss-test-suite.cc | 28 +++---- src/wifi/test/wifi-test.cc | 22 +++--- 18 files changed, 136 insertions(+), 48 deletions(-) diff --git a/CHANGES.html b/CHANGES.html index 91a7b1e5e..7eb92a9cc 100644 --- a/CHANGES.html +++ b/CHANGES.html @@ -88,6 +88,12 @@ and BuildingsHelper classes, a building aware pathloss models, e.g., HybridBuildingsPropagationLossModel is now able to accurately compute the pathloss for a node moving in and out of buildings in a simulation. See issue 80 for discussion. +
  • The implementation of the wifi channel access functions has been improved +to make them more adherent to the IEEE 802.11-2016 standard. Concerning the DCF, +the backoff procedure is no longer invoked when a packet is queued for transmission +and the medium has not been idle for a DIFS, but it is invoked if the medium is busy +or does not remain idle for a DIFS after the packet has been queued. Concerning the +EDCAF, tranmissions are now correctly aligned at slot boundaries.

  • diff --git a/RELEASE_NOTES b/RELEASE_NOTES index f735249c8..83da0fbda 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -29,6 +29,8 @@ Bugs fixed ---------- - Issue #119 - Waf --lcov-report option was broken - Issue #84 - Wi-Fi removing wrong header due to copy-paste error +- wifi: a zero value for the backoff timer might be discarded and a new value + might be generated by an erroneous call to NotifyCollision(). Known issues ------------ diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap index 6f08dadddcf96a41f51edc534b0a6e5201a956fe..bb0e88a55196de73f649f1f55291afbdbd076e6e 100644 GIT binary patch delta 34 qcmeC@=;xRq!>GGawuO;t&HjmU3Y!lzu4iP{t7e=iFF$z-b2R|H7Yg72 delta 34 qcmeC@=;xRq!>F}UwuO;t)&7Zc3Y!lzu4iP{s%D%hFF$z-b2R|GbPCr1 diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap index b9f4ac7c839e5700f5cc58cdc833cbd6111f1df7..102e5c95baf98d0ffa9af24f5bb99381abfd0c52 100644 GIT binary patch delta 34 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 L^zye_D24w3>(so_ delta 1150 zcmXX^U2GIp7~SvgZg*y>*rqM+PFuSjm=#E*sSO6T2r44YHk)qx07Mu1AmvGZG{z8L zOu$-$0^4JAW2*M9rL>}jmT6g9E$!G65*s2!jgeAl;!i}7KpTIMHuc_F9wwRdedjy( zobTS|IbZXfuQ%pn%a?+*2ww43v-)N7H;nax0499Z-X)fY_dP)&RImV6_^W6QlKwcG zwm`uWI*4!lN!Aucxn9C%qFAR#uro)n$Cs-%`!sf6>pA^G%;SlBtvmEVOR$vA}XO%4-RR170aN zG48?dvbcYhV3Xt0M#x@U(U|Am^RniW&#ej|IdlViQem5Fd;z|FC7F1n zPO!H;GFHg%lOhYeVI>u|=FwtkiFWoNx&E9)bP;xUn$VMiKH{SV6wXoXz!oHqMQ}YS z*h5=*x{yM4$2Kj>E>5AcD}oCL1o}QRa{Q9|&Q;`hN6_=OKz-t-9u0ivPtiRc>1bZp#FCb+yu0KrgUySdE+u3=K>+k)uQJ?pA4O7=% zh9ADJq8aF8amHdi{Q!k>)a2F}_I?rp9}{dK#+}^z<-A%X+9P;lT(C&3%eE`e9V>FZ z-MyUk7I3}&G@12=E8~R3pox7~1qy}?eCzn}*ibpPUK5xdGVFrs174)gni%|9pnk+4 z4ZB7xeE5q%)u>_D{~Gn7LYQc~E^tSvc5d3jn|}ygN*ng-8&dvchl%1p1@<0Q?e~sa zxF=Df)366_$#zAToW3omyWHt+IekY?cgyJ+dG_uvOicbIP}!r}wLKQT{97RZgkit_ zPa{LB*Tno?X{}GSclBAA`cGOrrBM8oh2eWLm#xq$+rr0lGL>!Eo9E@h>c-YCWVfQJ zt+bYsyA?@3l(AapC8|H;%AT?K6iHY$Xk<8}4Sux}J|9pFxf5OOgimRTF)A54$p;~G z@oR;$q=M(^UR+AaBClv7_n~AiuOWxL4I37@kPkme6JF2i+-&psQxqZZ=&O1b-mIn) F`X2+dv627) diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap index bf5f463cd95755fd1ba01120c78d33abbf9a9a6c..f037a57a839a9979c0558a8ee242a38ea2db4f08 100644 GIT binary patch delta 33 kcmZ3*v5I5E3`WML$^A@woV<*=1pwCw3|s&J delta 34 ncmZ3*v5I5E3`V95gUJ(^6ejOtyu#=(xu5APm{gp+jJX8>)>I5n diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap index f20aa1c2a94e048483b6d31f414e8110c195a892..d2793cb001d5d5e7c8c737e78b1d712e79cae028 100644 GIT binary patch delta 25 hcmZ3*v5I4Z4`__ .. [pei80211ofdm] \G. Pei and Tom Henderson, `Validation of OFDM error rate model in ns-3 `__ diff --git a/src/wifi/model/channel-access-manager.cc b/src/wifi/model/channel-access-manager.cc index f1ff74006..bcdeae75e 100644 --- a/src/wifi/model/channel-access-manager.cc +++ b/src/wifi/model/channel-access-manager.cc @@ -262,6 +262,21 @@ ChannelAccessManager::RequestAccess (Ptr state, bool isCfPeriod) m_accessTimeout = Simulator::Schedule (delay, &ChannelAccessManager::DoGrantPcfAccess, this, state); return; } + /* + * EDCAF operations shall be performed at slot boundaries (Sec. 10.22.2.4 of 802.11-2016) + */ + Time accessGrantStart = GetAccessGrantStart () + (state->GetAifsn () * m_slot); + + if (state->IsQosTxop () && state->GetBackoffStart () > accessGrantStart) + { + // The backoff start time reported by the EDCAF is more recent than the last + // time the medium was busy plus an AIFS, hence we need to align it to the + // next slot boundary. + Time diff = state->GetBackoffStart () - accessGrantStart; + uint32_t nIntSlots = (diff / m_slot).GetHigh () + 1; + state->UpdateBackoffSlotsNow (0, accessGrantStart + (nIntSlots * m_slot)); + } + UpdateBackoff (); NS_ASSERT (!state->IsAccessRequested ()); state->NotifyAccessRequested (); diff --git a/src/wifi/model/txop.cc b/src/wifi/model/txop.cc index 3fe5616aa..dc387659b 100644 --- a/src/wifi/model/txop.cc +++ b/src/wifi/model/txop.cc @@ -341,7 +341,10 @@ Txop::GenerateBackoffUponAccessIfNeeded (void) 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). + // 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); } diff --git a/src/wifi/test/block-ack-test-suite.cc b/src/wifi/test/block-ack-test-suite.cc index ae9cca68e..7521d61dc 100644 --- a/src/wifi/test/block-ack-test-suite.cc +++ b/src/wifi/test/block-ack-test-suite.cc @@ -868,14 +868,29 @@ BlockAckAggregationDisabledTest::DoRun (void) packetSocket.Install (wifiStaNode); packetSocket.Install (wifiApNode); - Ptr client = CreateObject (); - client->SetAttribute ("PacketSize", UintegerValue (1400)); - client->SetAttribute ("MaxPackets", UintegerValue (14)); - client->SetAttribute ("Interval", TimeValue (MicroSeconds (0))); - client->SetRemote (socket); - wifiStaNode.Get (0)->AddApplication (client); - client->SetStartTime (Seconds (1)); - client->SetStopTime (Seconds (3.0)); + // the first client application generates a single packet, which is sent + // with the normal ack policy because there are no other packets queued + Ptr client1 = CreateObject (); + client1->SetAttribute ("PacketSize", UintegerValue (1400)); + client1->SetAttribute ("MaxPackets", UintegerValue (1)); + client1->SetAttribute ("Interval", TimeValue (MicroSeconds (0))); + client1->SetRemote (socket); + wifiStaNode.Get (0)->AddApplication (client1); + client1->SetStartTime (Seconds (1)); + client1->SetStopTime (Seconds (3.0)); + + // the second client application generates 13 packets. Even if when the first + // packet is queued the queue is empty, the first packet is not transmitted + // immediately, but the EDCAF waits for the next slot boundary. At that time, + // other packets have been queued, hence a BA agreement is established first. + Ptr client2 = CreateObject (); + client2->SetAttribute ("PacketSize", UintegerValue (1400)); + client2->SetAttribute ("MaxPackets", UintegerValue (13)); + client2->SetAttribute ("Interval", TimeValue (MicroSeconds (0))); + client2->SetRemote (socket); + wifiStaNode.Get (0)->AddApplication (client2); + client2->SetStartTime (Seconds (1.5)); + client2->SetStopTime (Seconds (3.0)); Ptr server = CreateObject (); server->SetLocal (socket); @@ -892,7 +907,7 @@ BlockAckAggregationDisabledTest::DoRun (void) Simulator::Destroy (); - // The client application generates 14 packets, so we expect that the wifi PHY + // The client applications generate 14 packets, so we expect that the wifi PHY // layer transmits 14 MPDUs, the server application receives 14 packets, and // two BARs are transmitted. NS_TEST_EXPECT_MSG_EQ (m_txTotal, 14, "Unexpected number of transmitted packets"); diff --git a/src/wifi/test/inter-bss-test-suite.cc b/src/wifi/test/inter-bss-test-suite.cc index ef01a4ab9..5793ea562 100644 --- a/src/wifi/test/inter-bss-test-suite.cc +++ b/src/wifi/test/inter-bss-test-suite.cc @@ -231,11 +231,11 @@ TestInterBssConstantObssPdAlgo::SetupSimulation () // AP2 sends a packet 0.5s later. Simulator::Schedule (Seconds (2.0), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device2, sta_device2, m_payloadSize2); - Simulator::Schedule (Seconds (2.0) + MicroSeconds (1), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device2, WifiPhyState::TX); + Simulator::Schedule (Seconds (2.0) + MicroSeconds (5), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device2, WifiPhyState::TX); // All other PHYs should have stay idle until 4us (preamble detection time). - Simulator::Schedule (Seconds (2.0) + MicroSeconds (2), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device1, WifiPhyState::IDLE); - Simulator::Schedule (Seconds (2.0) + MicroSeconds (2), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device2, WifiPhyState::IDLE); - Simulator::Schedule (Seconds (2.0) + MicroSeconds (2), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device1, WifiPhyState::IDLE); + Simulator::Schedule (Seconds (2.0) + MicroSeconds (6), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device1, WifiPhyState::IDLE); + Simulator::Schedule (Seconds (2.0) + MicroSeconds (6), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device2, WifiPhyState::IDLE); + Simulator::Schedule (Seconds (2.0) + MicroSeconds (6), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device1, WifiPhyState::IDLE); // All PHYs should be receiving the PHY header if preamble has been detected (always the case in this test). Simulator::Schedule (Seconds (2.0) + MicroSeconds (10), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device1, WifiPhyState::RX); Simulator::Schedule (Seconds (2.0) + MicroSeconds (10), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device2, WifiPhyState::RX); @@ -251,18 +251,18 @@ TestInterBssConstantObssPdAlgo::SetupSimulation () // AP2 sends another packet 0.1s later. Simulator::Schedule (Seconds (2.1), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device2, sta_device2, m_payloadSize2); // STA1 sends a packet 100us later. Even though AP2 is still transmitting, STA1 can transmit simultaneously if it's PHY was reset by OBSS_PD SR. - Simulator::Schedule (Seconds (2.1) + MicroSeconds (100), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, sta_device1, ap_device1, m_payloadSize1); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (90), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, sta_device1, ap_device1, m_payloadSize1); if (expectPhyReset) { // In this case, we check the TX power is restricted (and set the expected value slightly before transmission should occur) double expectedTxPower = std::min (m_txPowerDbm, 21 - (m_obssPdLevelDbm + 82)); - Simulator::Schedule (Seconds (2.1) + MicroSeconds (99), &TestInterBssConstantObssPdAlgo::SetExpectedTxPower, this, expectedTxPower); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (89), &TestInterBssConstantObssPdAlgo::SetExpectedTxPower, this, expectedTxPower); } // Check simultaneous transmissions - Simulator::Schedule (Seconds (2.1) + MicroSeconds (105), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device1, expectPhyReset ? WifiPhyState::TX : WifiPhyState::RX); - Simulator::Schedule (Seconds (2.1) + MicroSeconds (105), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device1, WifiPhyState::RX); - Simulator::Schedule (Seconds (2.1) + MicroSeconds (105), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device2, WifiPhyState::RX); - Simulator::Schedule (Seconds (2.1) + MicroSeconds (105), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device2, WifiPhyState::TX); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (100), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device1, expectPhyReset ? WifiPhyState::TX : WifiPhyState::RX); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (100), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device1, WifiPhyState::RX); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (100), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, sta_device2, WifiPhyState::RX); + Simulator::Schedule (Seconds (2.1) + MicroSeconds (100), &TestInterBssConstantObssPdAlgo::CheckPhyState, this, ap_device2, WifiPhyState::TX); // Verify transmit power restrictions are not applied if access to the channel is requested after ignored OBSS transmissions. @@ -280,14 +280,14 @@ TestInterBssConstantObssPdAlgo::SetupSimulation () // This test checks whether this sequence preserves transmit power restrictions if CCA resets occurred, since STA 1 has been deferring during ignored OBSS transmissions. Simulator::Schedule (Seconds (2.4), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, sta_device2, ap_device2, m_payloadSize2 / 10); - Simulator::Schedule (Seconds (2.4) + MicroSeconds (5), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device2, sta_device2, m_payloadSize2 / 10); - Simulator::Schedule (Seconds (2.4) + MicroSeconds (65), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device1, sta_device1, m_payloadSize1 / 10); - Simulator::Schedule (Seconds (2.4) + MicroSeconds (105), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device3, sta_device3, m_payloadSize3 / 10); + Simulator::Schedule (Seconds (2.4) + MicroSeconds (15), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device2, sta_device2, m_payloadSize2 / 10); + Simulator::Schedule (Seconds (2.4) + MicroSeconds (270), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device1, sta_device1, m_payloadSize1 / 10); + Simulator::Schedule (Seconds (2.4) + MicroSeconds (300), &TestInterBssConstantObssPdAlgo::SendOnePacket, this, ap_device3, sta_device3, m_payloadSize3 / 10); if (expectPhyReset) { // In this case, we check the TX power is restricted (and set the expected value slightly before transmission should occur) double expectedTxPower = std::min (m_txPowerDbm, 21 - (m_obssPdLevelDbm + 82)); - Simulator::Schedule (Seconds (2.4) + MicroSeconds (450), &TestInterBssConstantObssPdAlgo::SetExpectedTxPower, this, expectedTxPower); + Simulator::Schedule (Seconds (2.4) + MicroSeconds (400), &TestInterBssConstantObssPdAlgo::SetExpectedTxPower, this, expectedTxPower); } Simulator::Stop (Seconds (2.5)); diff --git a/src/wifi/test/wifi-test.cc b/src/wifi/test/wifi-test.cc index 1ca004537..649334970 100644 --- a/src/wifi/test/wifi-test.cc +++ b/src/wifi/test/wifi-test.cc @@ -1954,14 +1954,14 @@ private: */ void RunSubtest (PointerValue apErrorModel, PointerValue staErrorModel); - uint8_t m_receivedNormalMpduCount; ///< Count received normal MPDU packets on STA - uint8_t m_receivedAmpduCount; ///< Count received A-MPDU packets on STA - uint8_t m_droppedActionCount; ///< Count dropped ADDBA request/response - uint8_t m_addbaEstablishedCount; ///< Count number of times ADDBA state machine is in established state - uint8_t m_addbaPendingCount; ///< Count number of times ADDBA state machine is in pending state - uint8_t m_addbaRejectedCount; ///< Count number of times ADDBA state machine is in rejected state - uint8_t m_addbaNoReplyCount; ///< Count number of times ADDBA state machine is in no_reply state - uint8_t m_addbaResetCount; ///< Count number of times ADDBA state machine is in reset state + uint16_t m_receivedNormalMpduCount; ///< Count received normal MPDU packets on STA + uint16_t m_receivedAmpduCount; ///< Count received A-MPDU packets on STA + uint16_t m_droppedActionCount; ///< Count dropped ADDBA request/response + uint16_t m_addbaEstablishedCount; ///< Count number of times ADDBA state machine is in established state + uint16_t m_addbaPendingCount; ///< Count number of times ADDBA state machine is in pending state + uint16_t m_addbaRejectedCount; ///< Count number of times ADDBA state machine is in rejected state + uint16_t m_addbaNoReplyCount; ///< Count number of times ADDBA state machine is in no_reply state + uint16_t m_addbaResetCount; ///< Count number of times ADDBA state machine is in reset state }; Bug2470TestCase::Bug2470TestCase () @@ -2096,8 +2096,10 @@ Bug2470TestCase::RunSubtest (PointerValue apErrorModel, PointerValue staErrorMod Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/$ns3::WifiPhy/PhyRxDrop", MakeCallback (&Bug2470TestCase::RxDropCallback, this)); Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/$ns3::RegularWifiMac/BE_Txop/BlockAckManager/AgreementState", MakeCallback (&Bug2470TestCase::AddbaStateChangedCallback, this)); - Simulator::Schedule (Seconds (0.5), &Bug2470TestCase::SendPacketBurst, this, 5, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); - Simulator::Schedule (Seconds (0.8), &Bug2470TestCase::SendPacketBurst, this, 5, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); + Simulator::Schedule (Seconds (0.5), &Bug2470TestCase::SendPacketBurst, this, 1, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); + Simulator::Schedule (Seconds (0.5) + MicroSeconds (5), &Bug2470TestCase::SendPacketBurst, this, 4, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); + Simulator::Schedule (Seconds (0.8), &Bug2470TestCase::SendPacketBurst, this, 1, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); + Simulator::Schedule (Seconds (0.8) + MicroSeconds (5), &Bug2470TestCase::SendPacketBurst, this, 4, apDevice.Get (0), staDevice.Get (0)->GetAddress ()); Simulator::Stop (Seconds (1.0)); Simulator::Run ();