From 7cd1a7013121e8eaef111b1bf16bb35f400380d7 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Wed, 20 Aug 2025 16:25:02 +0200 Subject: [PATCH] wifi: Fix EDCA immediate channel access ...when channel access is requested at a slot boundary. --- RELEASE_NOTES.md | 1 + examples/wireless/examples-to-run.py | 2 +- .../hwmp-proactive-regression-test-0-1.pcap | Bin 8687 -> 8687 bytes .../hwmp-proactive-regression-test-1-1.pcap | Bin 13309 -> 13309 bytes .../hwmp-proactive-regression-test-2-1.pcap | Bin 14764 -> 14764 bytes .../hwmp-proactive-regression-test-3-1.pcap | Bin 13052 -> 13052 bytes .../hwmp-proactive-regression-test-4-1.pcap | Bin 8304 -> 8304 bytes .../hwmp-reactive-regression-test-0-1.pcap | Bin 9431 -> 9431 bytes .../hwmp-reactive-regression-test-1-1.pcap | Bin 13519 -> 13519 bytes .../hwmp-reactive-regression-test-2-1.pcap | Bin 15294 -> 15294 bytes .../hwmp-reactive-regression-test-3-1.pcap | Bin 14928 -> 14928 bytes .../hwmp-reactive-regression-test-4-1.pcap | Bin 15183 -> 15183 bytes .../hwmp-reactive-regression-test-5-1.pcap | Bin 11501 -> 11501 bytes .../hwmp-simplest-regression-test-0-1.pcap | Bin 77751 -> 77751 bytes .../hwmp-simplest-regression-test-1-1.pcap | Bin 81147 -> 81147 bytes ...hwmp-target-flags-regression-test-0-1.pcap | Bin 10886 -> 10886 bytes ...hwmp-target-flags-regression-test-1-1.pcap | Bin 15774 -> 15774 bytes ...hwmp-target-flags-regression-test-2-1.pcap | Bin 14184 -> 14184 bytes ...hwmp-target-flags-regression-test-3-1.pcap | Bin 7754 -> 7754 bytes .../test/flame/flame-regression-test-0-1.pcap | Bin 5320 -> 5320 bytes .../test/flame/flame-regression-test-1-1.pcap | Bin 7122 -> 7122 bytes .../test/flame/flame-regression-test-2-1.pcap | Bin 5350 -> 5350 bytes src/wifi/model/channel-access-manager.cc | 13 +++++----- src/wifi/test/channel-access-manager-test.cc | 22 +++++++--------- src/wifi/test/wifi-dynamic-bw-op-test.cc | 24 ++++++++---------- 25 files changed, 29 insertions(+), 33 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a2a08e972..1a057abf8 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -45,6 +45,7 @@ The wimax module was removed and moved to the ns-3 App Store. - (internet) #1251 - Added check for longest prefix match in GlobalRouting - (wifi) Block transmission on other EMLSR links as soon as it is detected that the main PHY is receiving an A-MPDU, to prevent that the EMLSR client starts an UL TXOP before the end of the A-MPDU - (wifi) EMLSR clients can switch to listening operations when receiving the MAC header of a broadcast frame that is not a Trigger Frame nor a Multi-STA BA +- (wifi) Immediate channel access should not be postponed by a backoff slot if channel access is requested at a slot boundary ## Release 3.45 diff --git a/examples/wireless/examples-to-run.py b/examples/wireless/examples-to-run.py index b166e540a..7868a79c2 100644 --- a/examples/wireless/examples-to-run.py +++ b/examples/wireless/examples-to-run.py @@ -195,7 +195,7 @@ cpp_examples = [ "True", ), ( - "wifi-eht-network --simulationTime=0.25s --udp=0 --downlink=0 --useRts=0 --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mpduBufferSize=1024 --mcs=8 --muSchedAccessReqInterval=45ms --frequency2=6 --minExpectedThroughput=50 --maxExpectedThroughput=550 --RngRun=3", + "wifi-eht-network --simulationTime=0.25s --udp=0 --downlink=0 --useRts=0 --nStations=4 --dlAckType=AGGR-MU-BAR --enableUlOfdma=1 --enableBsrp=1 --mpduBufferSize=1024 --mcs=8 --muSchedAccessReqInterval=45ms --frequency2=6 --minExpectedThroughput=50 --maxExpectedThroughput=550", "True", "True", ), diff --git a/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap b/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap index 7bb053ac4b2fa894dc4b5ecf85c119b91dc1c65a..c18fc35a119b8cfb3a42ffb8a335b0213348833a 100644 GIT binary patch delta 148 zcmaFw{N8y(9}lDBQ+nik-oafq}tq@&j?n$sK$)Ov_G9F5s16`g>~f8hM4uEc^?Y9M4S7Q;=X|0xByw yH@QbaVe=FIH7tzYlP8KCWQtx1R4&2F43yk7xlr^VBwDz`AAfdU=J(PlXmRiEf!(r~na--#WQp zL1FSy;RQ@fwoMLHgoy6iH`!5Ca`HS8XQo&C!OV36?30;AZ5Wd#JBY?I{X7OTmK9{| z?#X+A0;f-aOau#vPPPz>Wx8|`BwDz_(@cdU=J(PlXmR$!(cjr~nbo*gCmi zL1FSy;RQ@QbGTlA}H;nJhvcl%65#3xyOWGmG0WKAP+x9?N8Y1SlXm`J5p8hCqvZ9#6n`}$~ delta 328 zcmZ2eyry_Vx-etPRHu)_`Mw5NAwS*1RwPP@Y8C@n%lZa(vJP9(FbN(rI20sP{2EWNQ+LDuv zC2bhJCKpJ`GF6_NoG2nWIZuau@_NYyjGdDMq-2?PoCgXDPp%Q>o!l?Afbs8S18G^N z|ChjmKZJQV=Sv^rWC~e1Sy4=3abD8UYr@m$Y7Sy4)UaqhJ+kV$Mvq$H11? ziFq>pJO(lj?4;c%z@lr_cqg-q+c2#?H~Bx*NjomEPd+FkKe<_a0n>>KAU}Xz`tBn8 zjP5uvc(!mStlMl+sPi_`pz;y8f$PZwbe!s{* zd7-TQc0b|JK Iead$H0A2iI(*OVf 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 6493dad226bffc886eb76953445a0da5f3b924e5..a43447a2a2b2ea0b2c26308eab8a70901023599f 100644 GIT binary patch delta 182 zcmez1@WEk&5;v2?n#mXCBv_dk7#MC%cI1v_dbM`)MtKP~kbvX5$@;PilkagaU}{@G z`J*gEv}5CBemRB7`*;>Gnoo}Bjb%)lyq7nYN$x0IMcL8G3A~b%gZZ2}_a0+s@BTN8Ko)|{|8{Bed!R`s{0o@aE`w~{{EmMLE936T7vv;anSr|aCNC5{ O$RxK3ELS7;g%bdv7CLhP delta 182 zcmez1@WEk&5;v3Ln#mXCBv_dk7#JQ;cI1v_`n-1XMtKP~kbu{^$@;PilkagaVCr8# z`J*gEbmGRz{BjDD_wg)XbeJ5^8_SqIc`t7)lloD(iu$9I6L=*j2lF{|9y`X);0H9y zZ?b@dmWfFUU!GrN z6?uT(`?xd7O3?jfc7rQ_jBVh_pEY)pf}jYEsR{FLehLEpEj5L0SEpqEYbXYClpVsD z(uTSwq2Ai$eHa#mEH|@wY1PoCB$*CViLndJC>E=s&hI09D>?cacd8YGXQK1MR{o<;1rcRRL0IZ%Mx!LPS^?Qn zc41!WBDtMAqihAbZ-+hN!WUAfV8NSsl`A3{;h1xW&=6HtA zQn;_p(m)=Ms!khu?1v0Y)tNLq_8&pPaiqdVNvi)O`jWX7l|@cmaAQ(6kP4Z!>gEwq z$yVR77qaNuQ%!KhVksH!X6yioSOQB8rdZx~VKEeA4LIUTbHo(ic3d#RF?NMMJ%QuM z2W>ehsfLFR<1%Vd-fL52TR8PPWoI;#ipn3#LvwzosL~i_?2@xA@xkFloRCh=vPAE$ N&G}WfOMUvX`v-JddQ$)Z diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap index 5ced06a0b3a7a06da1c65f0fcd8466a87b7ae0fe..5833be2a2881875cb783351764620fb1931f06a3 100644 GIT binary patch delta 755 zcmZvYPiPZC6vlUUk}l?7lSWB)$tIgfLaJ3$5D)2EkzSOh>54_982?3uUeq9>pa=CJ z;>~=BAcD1cF}5m1L`AK|)Pq>6prT+kK@TDdp1cUvx094!Jj~3u-~0B>@6GJU?8qI( zCEx5s&aWcj>XW~&5b_ksbQfmaDn7Zg^3he~8pyg$dD&{=PVzQfa<66Q@X}pj-*C*M zvobDv^2S(Jl6+Egy^)S9BqfR4n@lU%gFViu)0SzZym{lb`JcF57V(BjaTSx?>9xI% zUP;Q+na5~S#e1*G6TMP78WP3f4GYCgO2v@RWFcJe>FgD5`wCp{mtaLgZFZY_4x?cM zxps^H%1NlV>~tO()xbxx*`S2OdPs0)(C;tECx%)Nqu_<#l%H%9pYcE+pWZ1t3x-X* z7Z^4gDy|1iwjGUt&c^UJP~f}vimrkoRm4-e>`I5l*A?vN>Af6iksbLC!skJX@nnm*GikATB32c<+jNWi0l9C9y6HMvB9U4f=qX(*wI^wsOri83M$~AbP}Ja|B0cEI zlZZY=P{E457+Mum1VM>K@gPm(!Gl6+Q-z*-ve1KqIy*`2#l!5rec$8T-<#TaZTz|F zr1ME+d>T5O19WS@lvjjIccSXju;NV9YX^jDBJHy1zAoujSS#+jddNL2x=Q3HCfx>^ z!5w$joKGu?S81Hj$|Y4uMPc@XiWBd}DM!R%%QO<6tohygPuw2M_@*V|8Y;};vAw;0 zijo!YET-cczIZIw)2G~u1m$qz@b<7fp<%>pktA+<4e|}oym{6>sDOuqt@fH98BB*v zWZF2RLkj9mJDo+hW@1^`ft-R1Mo@Ad!Jscsua7h@M#V>;ML&(o&zOIJ)lbOHlA&;N zo1x#-Fypt#MXdP^@&!v(v8bSKY%>n1t_oaN5$gqO!q z*Uj?l!21?b#nq6#@L{MZv|lsGCJt&vvWQ1Q0~MhkBc&T;3pu?=YFH5ZetA_7QxURWYnbaVWy6a}MW?FnjS-#hM;1S0h7&tO@|l z(IW0~LO{fD%;aQBfHb@h0w#vzF-~5hH&$dfoQ)cGe$*v9Z;0WTplU}Xv5T&|W#y?3 z&MKar?CmyL*}dl%VO>q?WSmpAB#1()y>6+A{wmJNia^(->uKU2O>nwC`!8H=R`{CO G^85vyU&<2z diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap index 8ef84f0f39c69ac5ba6926d0460d8b9990f20768..d15b1c789723fdefb519a8617080130b1611e971 100644 GIT binary patch delta 874 zcmY+BPe@cz6vpQsecBt-X?#w;SI+dFLyC?xV=XF~3Y!*<)N~Dtf*eIfT0}J~F{n0W z&LR{(1Z|^k3Jlb6SquuMo3f&4(V}cI5iQgZ+XU6UR~u^cxaaqsf8TkTo=ng5s)vnZ z&C^Pu8hrOym@F^EwH;CF3aOBb@TCaT`_S&SFwjtlkoN#H(B^HSzWoX=c?Ve*ZKZzp z7&l83^z;x0wwVRwa=GdbW7V)Q>((?GR-wd5uvcg`{Pd||Q_?r3A&d&ihZQ48iKA#X z4L1`NE?M>gk+N3$c1+SD2^2lki25=Evt@DGeq2fj_;ebMDH`>~>FY^BD`=q!o;{7sh~X*+?~|u83}A^dE!F-7_(C}oUihhO-(@)5hq1!1roYt zmP>y6Fe~VSuBci>(lmHwibjeQRY#X}1IvOg760Gi_RRI*6JigM^gD=Ear!cWH~!5< z=CLB++bYi9p*>)+JlqKEMQ1gq>?9hulJ28qk2AAgeU|<8kS~Tk5FQ-dt>HA0^HCs$ zMNR!YUoEFmWd@0`&Mpcc4$4EE#qpyyMQOD=K8AJb6$^{gJqmG3tKD%mqEog+9rR!w zr;JBBl5MEPs}8zYH%M$wIqD5_#_-y2X>$0OGNea1o0f(YtH!N>gOLa)*OW3P6JID( IHT6U8Kd1umUH||9 delta 878 zcmY+BPe@cz6vpQsecBt*X?#w;SIzXELyC?#V+EN^mdz%mrmLj1nQ>CG7E#S6X<>^X zs@0euMbW~{h2=tvS+z)XAwggn(w|MCLC_*J36dhDd#^Us=5f#OJO94(Ci^D)9xr>? z7`}NDw5J*?9t-2;g*d-CN*6;ao zHq&r3QQ?whUlA!w(C-717D=G!$!64-8JH?-p}-+2A>h+#ET(AG*FwJz3%Z@&w_@0~ zG2`R(rB&rEm^yVHLA_(6V+*Icqq*w0aZC&PS58gFBpn2=NYjHNMb*(IUBiN)?~4ELa6Nk=_=MO5l70uVN>0mTcu<`Oi30|rtU^K=@ZJ7gm09o I>iS#mKP21mUjP6A diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap index 51c6c69263d91781877eefa69af56883c1055c4d..3406dda85582c0b81f077ad0d58ecab229bd835f 100644 GIT binary patch delta 730 zcmX|-Pe@cz6vpqL8AprJ`IqlK$2T*MpgHQ?A%%nn3M!GT;Vp_FoJcAuB51%>o3K?I z(dL5|Q3%QY6um=^Nf%V-UobdOFbiaL7UJoAm`?v>R{3d^hzy1t=j^ThQ5_|Ew z-hlGD-GVW;ACrL$|AAF1{TZ-J6^~QOBNEJr;65@V_FD}%gC;LwE|}#Ncta-F(H+Xl z@OGIyDa&FbW>9EQ~|n@ZLEyPftd#NsZQ_c9z)Q4Gc{ zao5PjzjxhvmO5@So(Z*x+G#c8mII!jkhus#I8B zC!8wrj&4ilNxvd*!RO%KCU2S$XOdy5f(~k;M@YVgUS;wn467V3W07=&==L@ delta 738 zcmX|;T}V@57{}j_%{60g$DKSo&AAUtbLx&{RN`*>lE_*oD2Q;8RDxL0z^m@O>!Rr6 z9}z|g;YAeXYSm2)ExNEm91%gZwGre+c$0M{UG(gn+|A4L{-5XlKfgb3VZ1P&jrn*7 zT77B$920a-qU<{=Hf=@4r=z^Zg=0#uNNuyOhR216N-x*(O$qT=_^YJ&2MjibL~;jS zuhU_8oKC?QJAx~XDZYv#wd(tftvrqSY0iOu~awpg)C;d#5$qRVVlosyeP_-ex8yPK4n-{f^csGQsU&qym3k`v!{4!+u zTClAc4Wwn|WX;ii`qUcQa9l^7o|K2rG8l$t%@;AOXTX3h=9ilBt;T-m>YozDv><}+WUtDi3LnP*qcRUP-j4%db zrg-F`l>uZ)UT$D0k^DJk%D3J%8>dhh&i90KBdtP;`o~BZfvO9ChCw5W2W_T&^TY+O zs#Q(I>I{lT1UuVJ@iB{gi2#U%U&dHZG&kRVf!8ve=vd1TlywAM{e_>Tm8}3ldG0^_ z#keVF3D_`#@+MJL!RtFsIZgE}Y43eD^(1Nc33VzFl)L;ka=c4OzJzWg#21J*!%N6h V-G{G6Mkr4SubG!}V?96I{{XY&*o^=H diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap index 674030751a8aeb4f8e2628562b4f9814b4a5de5a..0fe7813f685c5616cbeef7080f172edd7bc57b8d 100644 GIT binary patch delta 621 zcmYk4J!lhQ9LDecCvQvAJMS)M%3bUwmtwaLV(^Pvum(#I3GYz+!UF}7Pzu$->SQ{I zbdge@MFf#-Vu#k=BuHx)5v??iVyU83GKfT^gPU*On%M35J%65$ms_7&pIWq%tOh$7 zvU`|Jj>X;-G>jB-*h&`IJ9s^1_6e09pUxaYon<*`nl_AQ5^v#;#M_4@_HdnZCCy_< zFVo;L)G6E5y46o&#C6aNI1Z%Z>><|lke(J5oX&H+lF&fO2f60}m;J%F@v{F2Id zseBx7nMA@dIDKQC!c|wWm#Diw&BQxhO;4~YE_*j<)@=Lnn0z!7O$i&ewCanhnOVYv zbVe!n@jRVJ*%$0Fp7=ga^!8)Z7g*}eM5XK;`=1%AJg+M*{T{V5Lt5TRY6b}!v(=t` zc|lk0fB6YQN^O~!biz?v()}RP7GU`<73#Ajpm|-RDMM R2P{3d!qm?c?L9b@_zTByzKH+; delta 619 zcmYk4PiPZC7{xPRGA&6HcQuU4jm9HeoLE*`>1)5W||rpJf%v0#>|eFQJE zUDH9FH@AyFm^VG)3AjNKtUSdS8m7GqHrW2OlW__rr zZv9J7)AhXGPF0YvFrFg-_h-CpYsU&oYK;tnebrMr0O1vodZXe7q$s1tu0 QH?zs7LVu-r?dFN}Uy-W6`~Uy| diff --git a/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap b/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap index 10f2e0c431826f22c94541780738c2b47c89a206..8051d40af81aa4e8c11c4f824932fcff299797a7 100644 GIT binary patch delta 373 zcmX}mzb^w}7zgls-j}=H>6`vIw5KF(8UrCDZDLTlL28obR;qpkiFDFYLTVR@`Yr}6 zCMgLyVX)Z@qC@`yNjE_R3yb&KFg(NiJm2pp@5{`~%*Ce4GHF~6Sa=L-I95}E`Lv?g zN^5G$6-s2{Lmeg!39XMJu(c$eVp+?v!7bB73 z%kZPDf_D*PpIMZA>+E3)+eR-{_w_qAI*Yg(M?=q09topBQIw57wv(4@3pd6j-QdS4 z@aMHA&JK%`Fky!U4muouR&2_y>Yw1O%s_e^s{x1K2E2Gg+m@JS!Soh_hiAd+N3pN{#z&VWScEZbe$9PU1Cv0+r3yF YTOxt)ZigCp6PCLY8S+!gtt994Uk1Qvk^lez delta 379 zcmX|*KS%;`6vuz>cX{Vs{y5J|?Jz-cGHOa_=t4?#isKrs#G)D!0^N%m8(Qow4gG#i&@on!ie43%IL{!0my2PiGe}Atvx$HenN!N(n}BM~TzpMSeE$TFJp9{wgIw z-SFh}uEG^MWf%vR;D5BVe&ySZG`A9U%E1P} zGnSd*bE$pYW=Wh2*>HqiW;j=&Dfl<)L$+|nYp!vCvom_%c+R7Fy=P?M22ibu%WT-^ XVlSTZCt^d#Q?5nF0$@7z)RO!MM_Fm_ 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 664ad59546c73594212957f48d758e3fd1cd45d9..a4f6f2d05161e238eac6666765cdfbc0f3cc5671 100644 GIT binary patch delta 20 ccmdmfpJn@fmJR(Jj3=8XaBQEz!Kkhd0AsZW{{R30 delta 20 ccmdmfpJn@fmJR(JjF*}xaBQEz!Kkhd0Avpc2mk;8 diff --git a/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap b/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap index ce04d31e37ab26192fa6f084faf54aceba469732..9f7b9a4f6e7a582df49514bc0f61459e63b0cd69 100644 GIT binary patch delta 20 ccmezUljZkMmJR(JjGoOCIJQsVV9YiF0Bo!Xi~s-t delta 20 ccmezUljZkMmJR(Jj6uy4IJQsVV9YiF0Br^cl>h($ 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 bc55ea3db79ec824393f393740f7c91145f0759f..adc829b004c65d0cbf7926bb68b3c21ba2ba0da4 100644 GIT binary patch delta 544 zcmYL_OK1~87{_<^OJ;XA#3W6+k8C!Z&{ilCQLC4-5v7U(!FurE%?CMoC}=N5 zdXSbsJqpQ1FFsP!yKOH*E2Jw(Q9%#&F2&cyf|FG3Vc<8z|9i}Dc5-&Iy%J|htj4F< zRrtJ4j}i*X85{Rf8Wwq=9!sLc9lRLS@QshrZc@Q>)1|ePf;Xm*8(M|lN_H(*ok(Mo z717Sc=v7+5vt$uJwW>Ou!IGYZcR&a|t0EKQYLoT_ll89wd~1XPn8<@eqVpkpj8=prr()`j@Ml~BQz zMZ0SG=|0)$#z#tA2rAf}8X*lTQUxuvOF>GDZbZD9YP&e_pUZ##bM7}YF*DJ46=epN zqE&Vg9v`Rs2?a&n!tJDn1@5aydr;sup7d+j;@o z6qZ>YjZB1IrxZNu$>XP1R`2LojHTiB3ZbVJB~WDHt7qXxtju1Z5p!wTP@vl$e#B~Q z6?4L+6Z>}0XbYckpxb*W#eH@9pbX5h=eQfMs;v>siyZAaq~KU8kHJJ;y>$5h!sc4y zSCn23@^JRI?$iFg92>T&sq%`GC63v+hnsyqotL_k-G2Wdb&-46>if(pXs5^3u>dWj zfa95xIvF5q=Gc48X9nm`Ai}L5Gj$rR2rN1#=K3SV&kC7fNoq%Ec1)n{S$z4Alo%-Ir^tbI4QKrCv0J?sWy7rkD@Pt?W_k`w@!vJ=~n6dAxqro_Mqa{ z=|BKe?!dB#v+KLh3au$urbcc7~)XtDT;R7-*WJch*`%W{g4b-Y#bbbAP;Xas|5C%u!yPE;WeQBvb#lhm3c-u48Kh8j-aN5Pzm?4=}``UM;K0Rm2I5kD9SQjK5v=L$9J_XDL{*;9G4(MGj()Zp3v~6Xzv&7$4$&Y+=&MhZnDLDJN*<;Oz||pU{aLrG!cbP)Tf& zJf@N=xsAo-7MZS&wtnQSF=@A2Ka?`)uOueqVAYZS#MwaHZcU2gltJ@xK|1KLiMS6$ QyUa=XBIH|^J683*zwC+LYybcN delta 766 zcmX|9K}-`t6y2FATej`i) zOyG<1eb$c+5<QH*@cPSCKD-~iesquXj^AQR zYOk&{2P}Fb?PNDPWGwM(F8x2xT!;Nag&sIbx-k;S)8CnY*=TDgQppH*17+IX$w9sH zBG~L^J#o>AJh_cw&0rte_IzCF%Dk2$WDW220s1|QQZ#~7MjI{UupQOO0!l`V ziG32%$uK?|i>#j8<)B7Oeb~@LSPplw>3#{pmM}c#B71#a!ltPGy4j*aqx+LVdS~>W;LKui!d`wDl zgA8IhzRKxMBn&c(LSmKNt@Jl-N-UTVoz`blWm?mO5lyYQ(_bW(jfu{rxVy_VALB}^ XZWqrx%iCp7$`20DBF|7@zl^yX(w4t7W;f&YO9=DW+>HtE&*pn2Hh@F)Xo!1sm0^B2%M?kkCs9 zg+PCoAcX1CQMAoNNu*tZh}dpH2v!%VgIx+b2)&stJAJ?JeUJD1^Szz%o$-~3#&k`= z#vub+B7zRhVLiHn0d8PM%abD3HJ9$`$WkLr6-CiwSPj`BAHK%vs7r?%}%#g)u1hV%rA^$uCWLVbx`DDT$Kh1j#!@V=2phaGmT&F=+% zOFVHj9GEIJ<;f!En_QM}52KsLBfgbW5>FBXyDSv+>5j1UV4y1HfQKt7n637E6W#DY(`DGSHKCLkb9APGIMP9jEZcJz&+C=3lQ8Q zHu`yyB(ca{lEr6k(Z|K$l}b(3*Sn&MhMd5N<*@^2Ram;oao^Unw_Cv$Mz+CxuOP9`zf>whnd&>Uf{mOPp(&ITVj|zKq_gG0tS*LdT|0t z&dD~`lO?t^<+F2oQ^gM{Xe{NiZHcGjCUb77!Dl&s#ACC!t0J8{s{dWeM$39F*}!sN bs{FI_V=bA-``%4D(;^e+WTd>@_k#QZ`Vq@! delta 728 zcmYLHOK1~O6rJ~8GwDp4q*6^LoteDE7TdI>rcDD{r!oy1M7SdwKVqbMN}Z`ovOD zWieI4^X(eecn}%YV*A1p1`G{zY9A@1s@hbJAV)QsN|F?dU^$QsxbP*0LpB|56b}i! zZ&t_^JPVm@Ta$#rR1&{K{VXkT+R)joh_zmh3k?o=0zGW9T1>)Hf#Z1CVaWX_U_>nP z6vrZEda)Zu*kF2(Tjcl|v6O0Fl58>A#$Y&sQq&@MaU)tLrz#uK`2bsKmA8Z}?66p2 zmz#6^68LtQ^^pZ!kJ+r)E~A^qgRYb#0#6YQ8!X`E`HU=4K8<}7_N}U)S4`g2p_@0n=g4M-`Z1omnETs2r`yEc+y| z@Wfm1cT6T**!Y-F=|M6}zl?2B`g~gPtae>!=N4-ncXN)b0zW+C*VcHEI7p{VauNfn zGM%18$}q?#s;M%&KkZNdIHTaJU^JF?*rvdj;ySa>D&Dp1*(q-0oZn~9D(<~hw3cc; fd4a`3y7Hs*T|K#lSG}wBT8psUAcrc8g~#L%i66}W diff --git a/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap b/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap index 0ebb4197a0d1b5389658ce7485cb503e21b7e8a5..95a67d1c8eb5fe9e9759593726617b6b47fd5ab7 100644 GIT binary patch delta 388 zcmX|6O(;ZB7`;DZuABFsd1llbJVRKx?#0wJlWTbhxlj9*6m|Fmf+_8rB9kzqfb$Qx7C z!n@(}y)LccE{eiOFAz7gbOnc|%M0C}H-bk~v9}od%^+H>F}BdFPlR#RD6nrm^SfDz zYuU_CG7^)9Q{@ZwgYqULNrDiPK%9l~Ro~a1os-1UjE5((D|92o=M|>0F(-8j2h;wV z8gGBXYM@MC5wl%-j!`?!+vYt*H78$M)3eU@Vk>^O?#+L%4>u@&kgFz=i(8VU^`$g& ofiP|x6x-ZFkKIBaUQkr(KMsidxTtv^!4pveQ z)U>!cxG2iaY4Ime;^64}PB}cEA5YKo>G?dVCsmse{Lv)HSW&EsA)3Ll=wsOsYOF~>h>y6^sRO~B>v>8H=f0`8r^@%X9Is^{<4gRno zaV;afl9!k@>?VKKHX`rxl8h5V#*t!S{Im`At}RO9*Nlr7vLkdO#N!sGvArmD3LA6Y zmKJw^Lm_Za-;uN&dVwh`#}mu0qM4Hy*Y&Kky;_Q&7v1^q_0gc>r=?~hxmlJZr!VDD o3WRYRRBW$|0jrxfV1@2^&z82C5xP|W41N1(7Pj467tSR81vMy6WEj>+{*vW)j9&t>vuQs+`uHmJWH2hvLToJgIuxq(TBd9g0TWJ50b$yZon7<(ogvdS`A zZ}w-+XJXWzyq~?6*;;^kawC&CJ2L|V!z3UZq_l=3hPhghdGdNLh`6gT^W;EQ`NOV|aNIm`H&k*vPP6~i1az&zQXNt~4#=peJn zf!wt~6V7wXGESKMmb;d@LKrMNxrJu|=c}nKNP69PW0)^bV*%@B0qR{f`50E zvW$k4WBF>CrDlO;H-F(b_Rw#1|XjNkyUcC26GJ4UXICrOfpO%oRb|`Bq!Gku}?n2tiyPC z@<(Q0Mv=+(EWV7vlY3b*nKo!nl#`q+$m-AdXL2HICL_<})2y>tmN9OV|aNIqUhEk*vPP6~mk%z&zQXNt~4#=pg&a zf!wt~6V7wXGR~a*mb;d@Q5Y;cxrJu|=jW*`NP69PW0>zuV*%@B0qWg6`50E zvW!-fWBF>Cm1luvH-F(JB7S_}+P z3_v_NkXv%{4Q3BU{mF_fvW$x++p}ac8c$xylF8hx$1r&!mpCgUP@U0aL)KbGr_JkG zdzqM(1en3*$8p3k7YQ|qX5^J-T)0`0|0pW}+x$Dg delta 215 zcmaE+`AlJC&S_}+P z3_v_NkXv%{4Q3BUi^+;CvW#0M+p}ac+Du-_lF8ho$1r&!mpCgUP@VN;L)KbG@6GF3 zdzqNE1(?C+$8p3kR|_(O6tOb{6}bvCPYx83pZp6b9tvb{WEG!Wz`1~N!DKX5^J-+_PDc|0pW}Jd8Z5 diff --git a/src/wifi/model/channel-access-manager.cc b/src/wifi/model/channel-access-manager.cc index 2aab6b7d5..131c180e6 100644 --- a/src/wifi/model/channel-access-manager.cc +++ b/src/wifi/model/channel-access-manager.cc @@ -17,6 +17,7 @@ #include "ns3/log.h" #include "ns3/simulator.h" +#include #include #undef NS_LOG_APPEND_CONTEXT @@ -591,13 +592,13 @@ ChannelAccessManager::RequestAccess(Ptr txop) */ Time accessGrantStart = GetAccessGrantStart() + (txop->GetAifsn(m_linkId) * GetSlot()); - if (txop->IsQosTxop() && txop->GetBackoffStart(m_linkId) > accessGrantStart) + if (const auto diff = txop->GetBackoffStart(m_linkId) - accessGrantStart; + txop->IsQosTxop() && diff.IsStrictlyPositive()) { - // 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 = txop->GetBackoffStart(m_linkId) - accessGrantStart; - uint32_t nIntSlots = (diff / GetSlot()).GetHigh() + 1; + // 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. + const auto div = diff / GetSlot(); + const uint32_t nIntSlots = div.GetHigh() + (div.GetLow() > 0 ? 1 : 0); txop->UpdateBackoffSlotsNow(0, accessGrantStart + (nIntSlots * GetSlot()), m_linkId); } diff --git a/src/wifi/test/channel-access-manager-test.cc b/src/wifi/test/channel-access-manager-test.cc index e71016d85..ff156b7a6 100644 --- a/src/wifi/test/channel-access-manager-test.cc +++ b/src/wifi/test/channel-access-manager-test.cc @@ -1746,15 +1746,15 @@ LargestIdlePrimaryChannelTest::DoRun() * that the frame is not transmitted. A backoff value is kept being generated as long as the * frame is kept in the queue. * - * Backoff Last - * Backoff Backoff Backoff value #3, backoff - * value #0 value #1 value #2 unblock queue value - * | ┌─────┐ | | | ┌─────┐ ┌────┐ | - * | ┌───┐ │Assoc│ | |Decrement| |Decrement| |Decrement│ADDBA│ │QoS │ | - * | │ACK│ │Resp │ |AIFS| backoff |slot| backoff |slot| backoff │ Req │. .│data│ | - * ──┬─────┬┴───┴──┴─────┴┬───┬────────────────────────────────────────────┴─────┴───┴────┴┬───┬── - * │Assoc│ │ACK│ │ACK│ - * │ Req │ └───┘ └───┘ + * Backoff Last + * Backoff Backoff Backoff value #3, backoff + * value #0 value #1 value #2 unblock queue value + * | ┌─────┐ | | | ┌─────┐ ┌────┐ | + * | ┌───┐ │Assoc│ | | Decrement | Decrement | Decrement │ADDBA│ │QoS │ | + * | │ACK│ │Resp │ |AIFS| backoff | backoff | backoff │ Req │. .│data│ | + * ──┬─────┬┴───┴──┴─────┴┬───┬────────────────────────────────────────┴─────┴───┴────┴┬───┬── + * │Assoc│ │ACK│ │ACK│ + * │ Req │ └───┘ └───┘ * └─────┘ * * The ProactiveBackoff test checks the generation of backoff values when the attribute is set @@ -2164,10 +2164,6 @@ BackoffGenerationTest::BackoffGenerated(AcIndex ac, uint32_t backoff, uint8_t li offset, "Backoff value generated too early"); m_nextBackoffGen.Cancel(); - - // we get here when the backoff expired but no transmission occurred, thus we have - // generated a new backoff value and we will start decrementing the counter in a slot - delay = m_apMac->GetWifiPhy(linkId)->GetSlot(); } if (m_nGenBackoff < nValues) diff --git a/src/wifi/test/wifi-dynamic-bw-op-test.cc b/src/wifi/test/wifi-dynamic-bw-op-test.cc index 3e243e0dd..1c47e2776 100644 --- a/src/wifi/test/wifi-dynamic-bw-op-test.cc +++ b/src/wifi/test/wifi-dynamic-bw-op-test.cc @@ -155,8 +155,8 @@ WifiUseAvailBwTest::Transmit(uint8_t bss, client->SetAttribute("Interval", TimeValue(MicroSeconds(0))); client->SetRemote(m_sockets[0]); m_apDevices.Get(0)->GetNode()->AddApplication(client); - client->SetStartTime(Seconds(0)); // start now - client->SetStopTime(Seconds(1)); // stop in a second + client->SetStartTime(TimeStep(1)); // start shortly after the start of PPDU in BSS 1 + client->SetStopTime(Seconds(1)); // stop in a second client->Initialize(); // after 1us (to allow for propagation delay), the largest idle primary @@ -470,20 +470,18 @@ WifiDynamicBwOpTestSuite::WifiDynamicBwOpTestSuite() AddTestCase( new WifiUseAvailBwTest({"{50, 160, BAND_5GHZ, 5}", "{42, 80, BAND_5GHZ, 2}"}, MHz_u{80}), TestCase::Duration::QUICK); - // clang-format off /** - * ───────────────────────────── primary 160 ───────────────────────────── - * primary20 - * ┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┐ - * BSS 0 │ 1 │ 5 │ 9 │ 13 │ 17 │ 21 │ 25 │ 29 │ 33 │ 37 │ 41 │ 45 │ 49 │ 53 │ 57 │ 61 │ - * └────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────└────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────┘ + * ────────────── primary 160 ────────────── + * primary20 + * ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ + * BSS 0 │ 1 │ 5 │ 9 │ 13 │ 17 │ 21 │ 25 │ 29 │ 33 │ 37 │ 41 │ 45 │ 49 │ 53 │ 57 │ 61 │ + * └────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ * - * ┌────────┬────────┬────────┬────────┬───────┬────────┬────────┬────────┐ - * BSS 1 │ 1 │ 5 │ 9 │ 13 │ 17 │ 21 │ 25 │ 29 │ - * └────────┴────────┴────────┴────────┴───────┴────────┴────────┴────────┘ - * primary20 + * ┌────┬────┬────┬────┬────┬────┬────┬────┐ + * BSS 1 │ 1 │ 5 │ 9 │ 13 │ 17 │ 21 │ 25 │ 29 │ + * └────┴────┴────┴────┴────┴────┴────┴────┘ + * primary20 */ - // clang-format on AddTestCase( new WifiUseAvailBwTest({"{31, 320, BAND_6GHZ, 10}", "{15, 160, BAND_6GHZ, 7}"}, 160), TestCase::Duration::QUICK);